引言
這些Opencv內容我之前經常在工作時候用到,在這里我總結一下方便以后使用以及復習。
1.創(chuàng)建Mat
Mat matSrc (Size(320,240),CV_8UC3) ;
2.讀取Mat圖像
Mat matSrc = imread("C:\\Tmp.jpg");
if( matSrc.empty())
{
return FALSE;
}
3.讀取單通道圖像
Mat matSrc = imread("C:\\Tmp.jpg", 0);
if( matSrc.empty())
{
return FALSE;
}
4.保存Mat圖像
if( matSrc.empty())
{
return FALSE;
}
imwirte("C:\\Tmp.jpg", matSrc);
5.Mat與Iplimage互轉
Mat->Iplimag
Mat matSrc(pSrcImg, false);//注意:當將參數copyData設為true后,則為深拷貝(復制整個圖像數據)
Iplimage-> Mat
IplImage SrcImg(matSrc);//此方法為淺拷貝
6.復制Mat圖像
此方法會額外的創(chuàng)建一個圖像內存?zhèn)浞荩且谩?/p>
matImg = matSrc.clone();
7.灰度化
彩色圖像RGB轉灰度公式:gray = R * 0.299 + G * 0.587 + B * 0.114。CV_BGR2GRAY為彩色轉灰度,CV_GRAY2BGR為灰度轉彩色。
Mat matGray;
cvtColor( matSrc , matGray, CV_BGR2GRAY );
8.反轉圖像
flip(matSrc , matSrc , -1);
9.判斷輸入圖像的數據是否為空
if (!matSrc.data)
{
return FALSE;
}
10.判斷輸入圖像的大小是否滿足想關條件
if (matSrc.cols < 100 || matSrc.rows < 100)
{
return FALSE;
}
11.腐蝕算法
腐蝕算法使二值圖像減小一圈 。原理:腐蝕替換當前像素位像素集合中找到的最小像素值。iErode參數為腐蝕次數
for (int i = iErode; i > 0; i--)
{
erode(matSrc, matSrc, Mat());
}
12.膨脹算法
膨脹算法使二值圖像減小一圈。原理:膨脹是替換當前像素位像素集合中找到的最大像素值。 idilate參數為膨脹次數
for (int i = iDilate; i > 0; i--)
{
dilate(matSrc, matSrc, Mat());
}
13.高斯濾波算法
線性平滑濾波,適用于消除高斯噪聲。(iSmooth必須為單數)
if (iSmooth % 2 == 0)
{
iSmooth = 1;
}
GaussianBlur(matSrc, matSrc, Size(iSmooth, iSmooth), 0);
14.中值濾波算法
非線性平滑技術,它將每一像素點的灰度值設置為該點某鄰域窗口內的所有像素點灰度值的中值。(iSmooth必須為單數)
if (iSmooth % 2 == 0)
{
iSmooth = 1;
}
medianBlur (matSrc, matSrc, iSmooth );
15.二值化
就是將圖像上的像素點的灰度值設置為0或255。iThreshold為二值化參數范圍(0~255)
threshold(matSrc, matSrc, iThreshold, iThreshold , THRESH_BINARY);
16.大律法自適應二值化
OTSU的中心思想是閾值T應使目標與背景兩類的類間方差最大。iThreshold為二值化參數范圍(0~255)
threshold(matSrc, matSrc, iThreshold , iThreshold , CV_THRESH_OTSU);