(17)处理边缘

/*
 *处理边缘
    图像卷积的时候边界像素不能被卷积操作,原因在于边界像素没有完全跟kernel(卷积核)重叠,所以当3*3滤波时候
    有1个像素的边缘没有被处理,5*5滤波的时候有2个像素的边缘没有被处理

    在卷积开始之前增加边缘像素,填充的像素值为0或者RGB黑色,比如3*3在四周各填充1个像素的边缘,这样就确保图像的边缘被处理,
    在卷积处理之后再去掉这些边缘。openCV中默认的处理方法是:BORDER_DEFAULT,此外常用的还有如下几种:
    BORDER_CONSTANT -填充边缘用指定像素值
    BORDER_REPLICATE -填充边缘用已知的像素边缘值
    BORDER_WRAP -用另外一边的像素来补偿填充 就相当于你一个东西到顶了你还往上面走走不了了就换行
                                                                                好像是卷积到边上超出了几个像素对超出的几个像素给它换行换到这边来
                                                                                 把这边的几个像素加过来一起把边缘像素给处理

    API说明 -给图像添加边缘API
        copyMakeBorder(
        Mat src, //输入图像
        Mar dst, //添加边缘图像
        int top, //边缘长度,一般上下左右都取相同值
        int bottom,
        int left,
        int borderType //边缘类型
        Scalar value //颜色,颜色的一个向量
        )
 */

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

using namespace std;
using namespace cv;

int main()
{
    Mat src, res;
    src = imread("D:/A_Graduation/Pictures/Segmentatio/1.jpg");
    imshow("src", 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);

    int borderType = BORDER_DEFAULT;

    //生成随机数
    //定义一个随机数
    RNG rng(12345);

    int c = 0;
    while (true)
    {
        c = waitKey(500); //500毫秒
        if ((char)c == 27) //ESC
        {
            break;
        }
        if ((char)c == 'r')
        {
            borderType = BORDER_REPLICATE;
        }
        else if ((char)c == 'w')
        {
            borderType = BORDER_WRAP;
        }
        else if ((char)c == 'c')
        {
            borderType = BORDER_CONSTANT;
        }
        Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
        copyMakeBorder(src, res, top, bottom, left, right, borderType, color); //color好像只对BORDER_CONSTANT有效
        imshow("result", res);
    }

//    GaussianBlur(src, res, Size(5, 5), 0, 0,BORDER_CONSTANT);
//    imshow("result", res);
    waitKey(0);
    return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值