OpenCV形态学操作一
1 图像分,彩色三通道RGB,灰度,二值黑白
opencv中有API直接可以把彩色转为灰度也就是cvtColor();
转为灰度,也就是由原来的三通道变为单通道,单通道的值范围是<0,255>,我记得作飞卡时候每一个像素值似乎范围就是这个,但是微控上面的<0,255>,似乎好像是有彩色的//我记得不太清了,先写这里,以后,确定后更。
Mat dst=Mat::zeros(src.size(),src.type());
for(int i=0;i<src.rows;i++)
{
//uchar *output=dst.ptr<uchar>(i);
for(int j=0;j<src.cols;j++)
{
int b=src.at<Vec3b>(i,j)[0];
int g=src.at<Vec3b>(i,j)[1];
int r=src.at<Vec3b>(i,j)[2];
dst.at<uchar>(i,3*j)=saturate_cast<uchar>((b+g+r)/3);
dst.at<uchar>(i,3*j+1)=saturate_cast<uchar>((b+g+r)/3);
dst.at<uchar>(i,3*j+2)=saturate_cast<uchar>((b+g+r)/3);
}
}
上面赋值了三次,不然得到的灰度是一个被拉长的。
//////////////////////////////////////////////////割//////////////////////////////////////////////////////////////////
形态学操作
腐蚀
在我们选的格子区间里寻找最小的值代替中间锚点
膨胀
这个呢,就是选择最大的
根据上面的我们可以使用膨胀来滤除椒盐噪声,并且效果还不错,可以与中值滤波媲美。
效果图贴上,注:企鹅椒盐图来自某博客主:
原图:
中值处理:
膨胀效果:
关键API:
getStructuringElement();
morphologyEx();//形态学
开open:先腐蚀,再膨胀
Mat kernel=getStructuringElement(MORPH_RECT,Size(5,5));
morphologyEx(src,dst,CV_MOP_CLOSE,kernel);
关close:先膨胀,再腐蚀
和上面调用的函数一样,只是把CV_MOP_CLOSE改为CV_MOP_OPEN
这个可以用来改善上面那只企鹅。
顶帽:
原图像减去开操作:
morphologyEx(src,dst,CV_MOP_TOPHAT,kernel);
黑帽:
原图像减去关操作:
morphologyEx(src,dst,CV_MOP_BLACKHAT,kernel);
///////////////////////////////////////////////割///////////////////////////////////////////////////////////
opencv的滑动控件:
createTrackbar("SET:",out,&element,maxsize,callback);//创建滑动控件
//SET为控件名字
//out是一个字符数组,表示在哪一个窗口上面创建控件
//element表示初始值
//maxsize是最大值
//callback是回调函数必须具有这样的格式:void callback(int ,void *)
//因为opencv里面createTrackbar原型要求传入这样的函数