引言
这些Opencv内容我之前经常在工作时候用到,在这里我总结一下方便以后使用以及复习。
1.创建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图像
此方法会额外的创建一个图像内存备份,而非引用。
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);