一、聲明一個表示圖像的變量,在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);
文件的後綴名決定了圖像保存時的編碼格式。