引言
這些Opencv內(nèi)容我之前經(jīng)常在工作時(shí)候用到,在這里我總結(jié)一下方便以后使用以及復(fù)習(xí)。
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互轉(zhuǎn)
Mat->Iplimag
Mat matSrc(pSrcImg, false);//注意:當(dāng)將參數(shù)copyData設(shè)為true后褂傀,則為深拷貝(復(fù)制整個(gè)圖像數(shù)據(jù))
Iplimage-> Mat
IplImage SrcImg(matSrc);//此方法為淺拷貝
6.復(fù)制Mat圖像
此方法會(huì)額外的創(chuàng)建一個(gè)圖像內(nèi)存?zhèn)浞荼翘且谩?/p>
matImg = matSrc.clone();
7.灰度化
彩色圖像RGB轉(zhuǎn)灰度公式:gray = R * 0.299 + G * 0.587 + B * 0.114。CV_BGR2GRAY為彩色轉(zhuǎn)灰度诵冒,CV_GRAY2BGR為灰度轉(zhuǎn)彩色。
Mat matGray;
cvtColor( matSrc , matGray, CV_BGR2GRAY );
8.反轉(zhuǎn)圖像
flip(matSrc , matSrc , -1);
9.判斷輸入圖像的數(shù)據(jù)是否為空
if (!matSrc.data)
{
return FALSE;
}
10.判斷輸入圖像的大小是否滿足想關(guān)條件
if (matSrc.cols < 100 || matSrc.rows < 100)
{
return FALSE;
}
11.腐蝕算法
腐蝕算法使二值圖像減小一圈 谊惭。原理:腐蝕替換當(dāng)前像素位像素集合中找到的最小像素值汽馋。iErode參數(shù)為腐蝕次數(shù)
for (int i = iErode; i > 0; i--)
{
erode(matSrc, matSrc, Mat());
}
12.膨脹算法
膨脹算法使二值圖像減小一圈侮东。原理:膨脹是替換當(dāng)前像素位像素集合中找到的最大像素值。 idilate參數(shù)為膨脹次數(shù)
for (int i = iDilate; i > 0; i--)
{
dilate(matSrc, matSrc, Mat());
}
13.高斯濾波算法
線性平滑濾波豹芯,適用于消除高斯噪聲悄雅。(iSmooth必須為單數(shù))
if (iSmooth % 2 == 0)
{
iSmooth = 1;
}
GaussianBlur(matSrc, matSrc, Size(iSmooth, iSmooth), 0);
14.中值濾波算法
非線性平滑技術(shù),它將每一像素點(diǎn)的灰度值設(shè)置為該點(diǎn)某鄰域窗口內(nèi)的所有像素點(diǎn)灰度值的中值铁蹈。(iSmooth必須為單數(shù))
if (iSmooth % 2 == 0)
{
iSmooth = 1;
}
medianBlur (matSrc, matSrc, iSmooth );
15.二值化
就是將圖像上的像素點(diǎn)的灰度值設(shè)置為0或255宽闲。iThreshold為二值化參數(shù)范圍(0~255)
threshold(matSrc, matSrc, iThreshold, iThreshold , THRESH_BINARY);
16.大律法自適應(yīng)二值化
OTSU的中心思想是閾值T應(yīng)使目標(biāo)與背景兩類的類間方差最大。iThreshold為二值化參數(shù)范圍(0~255)
threshold(matSrc, matSrc, iThreshold , iThreshold , CV_THRESH_OTSU);