OpenCV学习笔记(1)CoreModel---图像卷积计算(掩模计算)

OpenCV学习笔记(1)CoreModel---图像卷积计算(掩模计算)

图像卷积

图像的卷积非常简单。其方法就是是根据模板(也称为内核)重新计算图像中每个像素的值。此模板的值将调整相邻像素(和当前像素)对新像素值的影响程度。从数学的角度来看,就是对周围像素进行了加权。

基础方法

如下式子是一种对比度增强的方法算式
具体的卷积代码为:

void Sharpen(const Mat& myImage,Mat& Result)
{
    CV_Assert(myImage.depth() == CV_8U);  // 直接受uchar类型图片
    const int nChannels = myImage.channels();
    Result.create(myImage.size(),myImage.type());
    for(int j = 1 ; j < myImage.rows-1; ++j)
    {
        const uchar* previous = myImage.ptr<uchar>(j - 1);
        const uchar* current  = myImage.ptr<uchar>(j    );
        const uchar* next     = myImage.ptr<uchar>(j + 1);
        uchar* output = Result.ptr<uchar>(j);
        for(int i= nChannels;i < nChannels*(myImage.cols-1); ++i)
        {
            *output++ = saturate_cast<uchar>(5*current[i]
                         -current[i-nChannels] - current[i+nChannels] - previous[i] - next[i]);
        }
    }
    Result.row(0).setTo(Scalar(0));
    Result.row(Result.rows-1).setTo(Scalar(0));
    Result.col(0).setTo(Scalar(0));
    Result.col(Result.cols-1).setTo(Scalar(0));
}

运用Filter2D函数

OpenCV库中有可以进行卷积运算的函数,只需要将参数输入图像、输出图像和模板(核)输入进函数中即可,通常来说这种方法会比上面自己手动实现的代码效率更高,这其中有很多优化算法在里面。

Mat kernel = (Mat_<char>(3,3) <<  0, -1,  0,
                                   -1,  5, -1,
                                    0, -1,  0);
filter2D( src, dst1, src.depth(), kernel);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值