opencv載入,顯示及保存圖像

一、聲明一個表示圖像的變量,在OpenCV2中,這個變量是cv::Mat類型,該類是用於保存圖像以及其餘矩陣數據的數據結構。默認狀況下它們的尺寸爲0。數據結構

  cv::Mat  image;       //這句話將建立一個寬高都爲0的圖像;函數

經過調用cv::Mat 的size()方法能夠獲取該圖像的尺寸,該方法的返回值是一個結構體,包含着寬度和高度;ui

std::cout<<"size:"<<image.size().height<<","<<image.size().width<<std::endl;編碼

cv::Mat類是用於保存圖像以及其餘矩陣數據的數據結構。默認狀況下它們的尺寸爲0,可是也能夠指定初始尺寸:指針

cv::Mat ima(240,320,CV_8U,cv::Scalar(100));ip

同時,你須要指定矩陣中元素的類型,這裏的CV_8U對應的是單字節的像素圖像。字母U意味着無符號的(Unsigned).也可使用字母S聲明帶符號的(Signed)類型。對於彩色圖像,須要指定3個通道(CV_8UC3)。也能夠聲明16位或32位的(無符號的或帶符號的)整數圖像,如CV_16SC3。也可聲明32位或64位的浮點數,如CV_32F。內存

二、一個簡單的讀取函數將進行文件讀取、解碼以及內存的分配。it

   image = cv::imread("img.jpg");gui

在使用該圖像前須要先檢查圖像是否已經被正確讀取,若是文件不存在、文件損壞或者格式沒法識別,將會出現錯誤。檢驗方法以下:變量

if(!image.data){

   //圖像還沒有建立.......

}

此處的成員變量data事實上是指向已分配的內存塊的指針,包括圖像數據。當不存在數據時,它被簡單設置爲0.

三、顯示圖像,OpenCV的highgui模塊實現了該功能。首先定義一個須要進行圖像顯示的窗口,接着指定須要顯示的圖像:

cv::namedWindow("Original Image");    //定義顯示圖像的窗口,參數爲窗口名

cv::imshow("Original Image",image);    //顯示圖像

四、將圖像水平反轉。OpenCV中的多個圖像變換能夠在原地進行,即不建立新的圖像,直接修改輸入圖像的內容。flip函數即是其中一種,然而,也能夠建立另一個矩陣來保存輸出結果。

cv::Mat  result;

cv::flip(image,result,1);     //正數表示水平反轉,0表示垂直反轉,負數表示既有水平也有垂直反轉

結果顯示在另外一個窗口中:

cv::namedWindow("Output Image");

cv::imshow("Output Image",result);

因爲這是個控制檯窗口,它會在main函數的結尾處終止,所以咱們添加額外的highgui函數使得程序退出前不停等待用戶的按鍵輸入:

cv::waitKey(0);

五、將處理後的圖像保存在磁盤上,經過下面的highgui函數獲得實現:

cv::imwrite("output.bmp",result);

文件的後綴名決定了圖像保存時的編碼格式。

相關文章
相關標籤/搜索