少有人走的路

勇哥的工业自动化技术网站

OpenCV学习15--处理边缘

卷积边缘问题
在做卷积处理时,图像边缘的像素不会被卷积操作。
原因在于边界像素没有完全跟卷积和重合,所以3x3像素会有1个像素的边缘没有被处理。
image.png

边缘处理方法:

在卷积开始之前增加边缘像素,填充的像素为0或者RGB黑色。这样就确保边缘被处理。OpenCV默认的是BORDER_DEFAULT,其他还有:

BORDER_CONSTANT - 填充边缘用指定像素

BORDER_REPLICATE -填充边缘像素用已知的边缘像素值

BORDER_WRAP - 用另外一边的像素来补偿填充


API说明 - 给图像添加边缘API

copyMakeBorder


代码:

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>

using namespace cv;

int main(int argc,char ** argv)
{
    Mat src,dst;    
    int flag = 0;
    RNG rng;
    Scalar color;
    int border_type = BORDER_WRAP;
    src = imread("1.jpg");
    namedWindow("input window",CV_WINDOW_AUTOSIZE);
    imshow("input window",src);

    int top = (int)(0.05 *src.rows);
    int bottom = (int)(0.05*src.rows);
    int left = (int)(0.05 *src.cols);
    int right = (int)(0.05*src.cols);

    while(true)
    {
        flag = waitKey(500);
        if((char)flag == 27){
            break;
        }
        if((char)flag == 'c'){
            border_type = BORDER_CONSTANT;
        }
        else if((char)flag == 'r'){
            border_type = BORDER_REPLICATE;
        }
        color = Scalar(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255));
        copyMakeBorder(src,dst,top,bottom,left,right,border_type,color);
        imshow("out",dst);
    }

    return 0;
}

image.png

源码和原图片请到github下载:
https://github.com/MRwangmaomao/OpencvBorder-Project.git



————————————————

版权声明:本文为CSDN博主「南山二毛」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_16481211/article/details/79606040


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接

Powered By Z-BlogPHP 1.7.3

Copyright www.skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864