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);
        }
    }

上面赋值了三次,不然得到的灰度是一个被拉长的。

//////////////////////////////////////////////////割//////////////////////////////////////////////////////////////////

形态学操作

腐蚀

在我们选的格子区间里寻找最小的值代替中间锚点

膨胀

这个呢,就是选择最大的

扫描二维码关注公众号,回复: 3545362 查看本文章

根据上面的我们可以使用膨胀来滤除椒盐噪声,并且效果还不错,可以与中值滤波媲美。

效果图贴上,注:企鹅椒盐图来自某博客主:

原图:

中值处理:

膨胀效果:

关键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原型要求传入这样的函数

猜你喜欢

转载自blog.csdn.net/shuiyihang0981/article/details/82903692