Opencv入門筆記(1):影象載入、顯示、儲存、轉換灰度圖
影象載入、顯示、儲存函式:
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;
}