美文网首页
opencv-图像处理api及效果展示

opencv-图像处理api及效果展示

作者: littleDad | 来源:发表于2017-08-24 14:03 被阅读320次

    滤波【线性;非线性】 - [含义:不能损坏图像的轮廓以边缘等重要信息;使图像清晰视觉效果好]

    测试原始矩阵.png

    平滑滤波: 功能:一类是模糊;另一类是消除噪音

    平滑分两种:
      ·线性滤波 :高斯噪音处理比较好,噪音的值不是很大【如果处理散粒噪音只是让它变得柔和】
      ·非线性滤波 :散粒噪音处理比较好,噪音值很大,很孤立
    
    • 方框滤波:BoxBlur
    方框滤波非归一化.png 前后对比.png

    结论:像素点变大,意味着图像模糊了

    • 均值滤波:Blur 其实是方框滤波的归一化处理【归一化例子:归一化为20x80像素的图像,即经切割后的特征块图像若尺寸不为20x80像素,就把它们统一归一化为 20x80像素】
    均值.png 前后对比.png 缺点演示.png
    结论:模糊效果比较好,原理是局部求均值起到模糊。缺点:如果局部有高频噪音,就会对局部像素影响较大;如上带雪花的图像
    • 高斯滤波:GaussianBlur 和前两种算法的区别;通过一个掩膜mask遍历图像中每个像素进行卷积然后替代它
    高斯.png 前后对比.png
    结论:相对于前两中平滑,高斯平滑更能保留细节,处理后的像素值更加接近原像素
    • 中值滤波:medianBlur 含义:用领域的中值取替代遍历到的像素
      中值.png
    前后效果.png
    结论:避开了大量的散粒噪音
    • 双边滤波:bilateralFilter
    /*
        参三:像素领域的直径
        参四:在像素领域中,这个值越大混合的颜色就越宽广
        参五:数值越大意味着越远的像素会互相影响
    */
    bilateralFilter(srcImg, g_sourceImg, 20, 70, 10);
    
    左上是原图-右上是中值滤波-下图是双边滤波.png

    结论:双边滤波在去除散粒噪音的同时还能保留边缘细节信息。而这个时候我们的中值滤波的效果则还带模糊。

    形态学滤波【平滑作用;且不改变面积】 腐蚀-erode;膨胀-dilate;开闭运算;顶帽;黑帽;形态学梯度

    含义介绍

    • 腐蚀:突出图像暗的区域;侵蚀亮的区域
    • 膨胀:突出图像亮的区域;侵蚀暗的区域
    • 开运算:先腐蚀后膨胀;将原图小型亮处的部分排除
    • 闭运算:先膨胀后腐蚀;将原图小型暗处部分排除
    • 顶帽:原图像矩阵减去开运算,得到轮廓边缘更亮细节
    • 黑帽:闭运算减去原图像矩阵,得到轮廓边缘更暗细节(为什么不是闭-原;因为越暗的像素值越小,越亮的像素值越大)
    • 形态学梯度:膨胀图减去腐蚀图的差:突出边缘轮廓
      • 形态学滤波使用morphologyEx函数,传入不同的枚举值来执行以上6种算法
    /** morphologyEx 枚举值
        -MORPH_ERODE 腐蚀
        -MORPH_DILATE 膨胀
        -MORPH_OPEN 开运算
        -MORPH_CLOSE 闭运算
        -MORPH_GRADIENT 形态学梯度
        -MORPH_TOPHAT 顶帽
        -MORPH_BLACKHAT 黑帽
     */
     int w_h = 3;//传进来的数 先转成int整型变量
    /**
      参二:内核尺寸
      参三:锚点 默认是 (-1,-1),为中心
    */
     Mat element = getStructuringElement(MORPH_RECT, cv::Size(w_h * 2 +1,w_h *2 +1),cv::Point(w_h,w_h));
     morphologyEx(g_sourceImg, dstImg, type, element);
    
    腐蚀-膨胀-闭运算-开运算-顶帽-黑帽-形态学梯度 效果.png

    漫水填充floodFill 含义:用特定的颜色填充连通区域,效果和photoshop魔术棒类似;用处:用来标记或分离图像的一部分;用来制作掩膜

    注意:漫水填充设置的g_maskImage必须是比原图的size大出2,也只能是2,cv::size(g_sourceImg.rows + 2, g_sourceImg.cols + 2)

    //g_maskImage 掩膜
    g_maskImage.create(g_sourceImg.rows + 2, g_sourceImg.cols + 2, CV_8UC1);
    g_maskImage = Scalar::all(0);
     cv::Rect ccomp;//定义重绘制区域的最小边界矩形区域
    //阈值处理
     threshold(g_maskImage, g_maskImage, 1, 128, THRESH_BINARY);
    /*漫水填充
      参二:掩膜
      参三:seek选择点,也就是鼠标点击触碰要填充的点
      参四:newVal 填充的颜色
      参五:cv::Rect**类型 ,重绘区域的最小边界矩形
     参六:和观察点颜色负差最大值
     参七:和观察点颜色正差最大值
    */
    floodFill(dst, g_maskImage, seed, newVal,&ccomp,Scalar(LowDifference,LowDifference,LowDifference),Scalar(UpDifference,UpDifference,UpDifference));
    
    漫水填充效果

    图像金字塔reSize 含义:对图像大小进行调整

    • 两种大小变换方式
    resize(g_sourceImg, g_dstImg, cv::Size(),size.width,size.height,INTER_LINEAR); // 按照比例缩放
    resize(g_sourceImg, g_dstImg, g_dstImg.size(),INTER_LINEAR);//按照固定cv::size缩放
    

    阈值化:threshold 概念:THRESH_BINARY模式 设定阈值大于遍历的像素时设置255,小于阈值设置为0;用处:常常作为掩膜

    注意:输入的原图需要是单通道,深度为8或32位

    相关文章

      网友评论

          本文标题:opencv-图像处理api及效果展示

          本文链接:https://www.haomeiwen.com/subject/rkpjdxtx.html