概述
影像讀取儲存(imread、imshow、imwrite)
這邊示範一個簡短的OpenCV的程式,用imread()讀取圖片,並將資料寫入Mat,imwrite()將Mat儲存在硬碟中,imshow()將Mat展示在螢幕上。
內文索引 [隱藏]
- 1 標頭檔
- 2 命名空間
- 3 影像讀取
- 4 創建視窗
- 5 秀出影像
- 6 等待按鍵輸入
- 7 圖片儲存
- 8 程式範例1
- 9 程式範例2
標頭檔
當我們使用OpenCV函式時,要先include此函式的模組,例如要用到Core模組時,我們須加入標頭檔:
#include <opencv2/core/core.hpp>
所有用到的模組都需加入,這邊為了方便,我們直接include所有模組,所以在cpp檔表頭,加入標頭檔:
#include <opencv2/opencv.hpp>
命名空間
為了使用上的安全,OpenCV有加上命名空間cv,所以我們使用此OpenCV的函式或類別時,前面需要加上cv::,為了使用上的方便,所以在cpp檔我們加上:
using namespace cv;
影像讀取
Mat imread(const string& filename, int flags=1)
- filename:要載入的檔案名稱。
- flags:影像標誌,flag分成三種模式,分別為彩色、灰階、原影像格式。
flag值 備註 CV_LOAD_IMAGE_UNCHANGED <0 讀入格式不變 CV_LOAD_IMAGE_GRAYSCALE 0 以灰階讀入 CV_LOAD_IMAGE_COLOR >0 以BGR格式讀入
OpenCV支援的影像格式有BMP、PBM、DIB、JPEG、JPE、PNG、TIF等,常見的格式幾乎都有支援,以下的程式碼讀入"lena.jpg",並賦值給img:
Mat img = imread("lena.jpg",CV_LOAD_IMAGE_GRAYSCALE);
創建視窗
void namedWindow(const string& winname, int flags=WINDOW_AUTOSIZE)
- winname:視窗標題。
- flags:視窗標誌,flag常用的有兩種,分別為WINDOW_NORMAL和WINDOW_AUTOSIZE,當使用WINDOW_NORMAL時,可變更視窗的大小,當使用WINDOW_AUTOSIZE時,會產生剛好包含Mat大小的視窗,無法改變視窗大小。
秀出影像
void imshow(const string& winname, InputArray mat)
- winname:要秀出此影像的視窗。
- mat:要秀出的影像,當Mat為8位元時直接秀出,16位元時數值除以256後秀出,為浮點數時乘上255,使得三種格式,顯現範圍都為0~255。
我們先創建視窗,接著將Mat秀在此視窗內,當我們使用imshow這個函式時,我們需要加上waitKey(0),阻斷程式進行,這樣才可以看到視窗,以及視窗內的圖像,直到按下任一鍵後程式才繼續進行。如果流程完全不阻斷,main函式隨之進行完畢,此時視窗和影像都消失,我們會看不到想要的結果,以下為秀出影像的程式碼:
namedWindow("Display window", WINDOW_AUTOSIZE);
imshow("Display window", img);
waitKey(0);
等待按鍵輸入
int waitKey(int delay=0)
- delay:等待時間,這邊主要分兩大類使用方式,當delay<=0時,程式靜止,當delay>0時,函式會等待參數時間(ms)後,返回按鍵的ASCII碼,如果這段時間沒有按鍵按下,會返回-1。
- waitKey()只有搭配OpenCV視窗才有效果,沒有視窗的話無此暫停程式功能。
- 可以使用這個特性搭配while迴圈,讓圖片不斷顯示,直到按下某特定按鍵後才停止。
由於esc鍵的ASCII碼為27,所以以下程式只有按下esc鍵,程式才會跳出迴圈:
while(true){
imshow("Display window", img);
if(cvWaitKey(10)==27){
break;
}
}
圖片儲存
bool imwrite(const string& filename, InputArray img, const vector& params=vector())
- filename:儲存的檔案名稱。
- img:要儲存的影像。
- params:影像參數,以(id,value)的順序輸入,因為有些格式有參數可輸入,像JPEG壓縮品質的值從0到100,預設為95,我們可將CV_IMWRITE_JPEG_QUALITY設定值,進而改變儲存的JPEG影像品質。
- 如果是儲存3通道彩色圖的話,要注意此時的色彩空間需為BGR,否則後續讀取強度會錯誤,B和R的強度會對調。
OpenCV支援的影像格式有BMP、PBM、DIB、JPEG、JPE、PNG、TIF等,常見的格式幾乎都有支援.
最后
以上就是善良枫叶为你收集整理的OpenCV Tutorial: 影像讀取儲存(imread、imshow、imwrite)影像讀取儲存(imread、imshow、imwrite)的全部内容,希望文章能够帮你解决OpenCV Tutorial: 影像讀取儲存(imread、imshow、imwrite)影像讀取儲存(imread、imshow、imwrite)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复