加載圖像(用cv::imread)
- imread功能是加載圖像文件成為一個Mat對象,其中第一個參數表示圖像文件名稱
- 第二個參數,表示加載的圖像是什么類型,支持常見的三個參數值
- IMREAD_UNCHANGED (<0) 表示加載原圖,不做任何改變
- IMREAD_GRAYSCALE ( 0)表示把原圖作為灰度圖像加載進來
- IMREAD_COLOR (>0) 表示把原圖作為RGB圖像加載進來
注意:OpenCV支持JPG、PNG、TIFF等常見格式圖像文件加載
顯示圖像 (cv::namedWindos 與cv::imshow)
- namedWindos功能是創建一個OpenCV窗口,它是由OpenCV自動創建與釋放,你無需取銷毀它。
- 常見用法namedWindow("Window Title", WINDOW_AUTOSIZE)
- WINDOW_AUTOSIZE會自動根據圖像大小,顯示窗口大小,不能人為改變窗口大小
- WINDOW_NORMAL,跟QT集成的時候會使用,允許修改窗口大小。
- imshow根據窗口名稱顯示圖像到指定的窗口上去,第一個參數是窗口名稱,第二參數是Mat對象
保存圖像(cv::imwrite)
- 保存圖像文件到指定目錄路徑
- 只有8位、16位的PNG、JPG、Tiff文件格式而且是單通道或者三通道的BGR的圖像才可以通過這種方式保存
- 保存PNG格式的時候可以保存透明通道的圖片
- 可以指定壓縮參數
- 第一個參數:將要另保存圖像的名稱,可以自己定義名稱。
- 第二個參數:你要要保存的圖像名稱,是目前已經存在的圖像。
- 第三個參數: 來設置對於圖像格式的參數,一般省略,不寫
opencv提供了cvtColor()函數來實現這些功能。首先看一下cvtColor函數定義:
C++: void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 );
1
參數解釋:
. InputArray src: 輸入圖像即要進行顏色空間變換的原圖像,可以是Mat類
. OutputArray dst: 輸出圖像即進行顏色空間變換后存儲圖像,也可以Mat類
. int code: 轉換的代碼或標識,即在此確定將什么制式的圖片轉換成什么制式的圖片,后面會詳細將
. int dstCn = 0: 目標圖像通道數,如果取值為0,則由src和code決定
代碼如下:
//首先是導入相關函數(類似於包java import....) #include<opencv2\opencv.hpp> #include<iostream> #include<math.h> //域名控件(類似java導入包后,無需在每個對象中添加包名例如:本來要寫cv::Mat 添加域名空間后,只需寫Mat) using namespace cv; //主函數 int main(int argc, char** argv) { //創建一個Mat對象並在里面寫入圖片數據(圖片即存儲像素點的矩陣數組) Mat srcImage = imread("E:\\VS2015Opencv\\vs2015\\project\\picture\\01.jpg"); //判斷Mat是否有數據。無,打印消息,退出,有就繼續(C和java都差不多) if (srcImage.empty()) { printf("couldn't load image"); //暫停 getchar(); //返回-1,退出 return -1; } //顯示原圖像 namedWindow("原圖像", WINDOW_AUTOSIZE); imshow("原圖像", srcImage); //將圖像轉換為灰度圖,采用CV_前綴 Mat grayImage; cvtColor(srcImage, grayImage, CV_BGR2GRAY); //將圖像轉換為灰度圖 namedWindow("灰度圖", WINDOW_AUTOSIZE); imshow("灰度圖", grayImage); //將圖像轉換為HSV,采用COLOR_前綴 Mat HSVImage; cvtColor(srcImage, HSVImage, COLOR_BGR2HSV); //將圖像轉換為HSV圖 namedWindow("HSV", WINDOW_AUTOSIZE); imshow("HSV", HSVImage); waitKey(0); return 0; }