圖像載入、顯示、保存函數:
1 圖像載入函數:imread() Mat imread(const string& filename, int flags=1);
const string&類型的filename為載入圖像的路徑(絕對路徑和相對路徑)
flags是int類型的變量,flags>0,返回一個3通道的彩色圖像;
flags = 0,返回灰度圖像;
flags < 0,返回包含Alpha通道的加載圖像。
flags默認值為1,可以省略對其賦值。
例如:Mat srcImage = imread(‘1.jpg’);
2 圖像顯示函數:imshow() void imshow(const string& winname, InputArray mat);
Const string&類型的winname為需要顯示的窗口名稱;
InputArray類型的mat,填需要顯示的圖像。
例如:imshow(‘圖’,srcImage);
3 Mat類型是用於保存圖像以及其他矩陣數據的數據結構,默認尺寸為0,也可以初始化尺寸。InputArray/outputArray在opnecv中和Mat類似都是一種數據格式,而很多時候,遇到函數原型中的InputArray/outputArray類型,可以把它簡單的當做Mat類型。
4 輸出圖像到文件:imwrite() bool imwrite(const string& filename,InputArray img, const vector<int> & params=vector<int> () );
const string& filename表示填寫需要的文件名,需帶上后綴,如“1.jpg”;
InputArray img表示要保存的圖像數據;
const vector<int> & 類型的params,其默認值為vector<int> (),需要填寫時有:
1.JPEG格式圖片,參數為0-100,表示圖像質量,默認為95;
2.PNG格式圖片,參數為0-9,表示壓縮級別,高值則表示更小尺寸和壓縮時間更長;
3.PPM,PGM,PBM格式時,表示二進制格式標志,參數0或1,默認為1。
例如:imwrite(‘123.jpg’,dstImage);
基礎圖像容器Mat
5 使用Mat() 構造函數
Mat M(2,2,CV_8UC3,Scalar(0,0,255));表示創建2行2列,CV_8UC3表示使用8位的unsigned char型,每個像素由三個元素組成的三通道。另外,Scalar是個short型的向量,能使用指定的定制化來初始化矩陣,還可以表示顏色。
常用數據結構和函數
6 點表示:Point
用法:Point point;
point.x = 10;
point.y = 8;
或者:Point point = point(10,8); 都表示為有x=10和y=8定位的2D點。
7 顏色的表示:Scalar
Scalar(a,b,c) 表示定義的RGB值為:紅色分量為c,綠色分量為b,藍色分量為a。這里取決於opnecv和matlab不同儲存三通道顏色方式,matlab為RGB順序,opnecv為BGR,也可以理解為兩者相反。
8 矩形表示:Rect
Rect類的成員變量有x,y,width,height表示左上角點的坐標和矩形寬和高。其成員函數有:
Size()返回值為Size(尺寸大小),area()返回矩形的面積,contains(Point)判斷點是否在矩形內,inside(Rect)判斷矩形是否在該矩形內,tl()返回左上角點坐標,br()返回右下角點坐標。
Rect rect = rect1 & rect2; 兩矩形交集
Rect rect = rect1 | tect2; 兩矩形並集
Rect rectShift = rect + point; 矩形平移
Rect rectScale = rect + size; 矩形縮放
9 顏色空間轉換:cvtColor()
其中RGB和Gray轉換有:Opnecv2版本的CV_RGB2GRAY,CV_GRAY2RGB
Opencv3版本的COLOR_RGB2GRAY,COLOR_GRAY2RGB
RGB和HSV轉換有:Opnecv2版本的CV_RGB2HSV,CV_BGR2HSV,CV_HSV2RGB,CV_HSV2BGR
Opencv3版本的COLOR_RGB2HSV,COLOR_BGR2HSV,COLOR_HSV2RGB,COLOR_HSV2BGR
即對於顏色轉換,Opnecv2的CV_前綴的宏命名規范被Opnecv3中的COLOR_式的宏命名前綴所取代,另外,Opnecv中默認的圖片通道存儲順序是BGR。
10 綜合例子:
#include <opnecv2/opencv.hpp>
using namespace cv;
int main()
{
Mat srcImage = imread(“1.jpg”);
Mat dstImage;
cvtColor(srcImage,dstImage, COLOR_BGR2GRAY);
imwrite(“圖1.jpg”,srcImage);
imshow(“原圖”,srcImage);
imshow(“變換圖”,dstImage);
waitKey(0);
return 0;
}