OpenCV 对矩阵的掩模操作

1、Mask operations

掩膜模板以及运算规则:

2、示例代码

void Sharpen(const Mat& myImage, Mat& Result)
{
    CV_Assert(myImage.depth() == CV_8U);  // accept only uchar images

    Result.create(myImage.size(), myImage.type());
    const int nChannels = myImage.channels();

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

3、OpenCV自带的函数filter2D()

用OpenCV自带的掩膜操作函数具有更高的效率,可以操作任意指定的模板

Mat kern = (Mat_(3,3) <<   0, -1,  0,
                                -1,  5, -1,
                                 0, -1,  0);
filter2D(I, K, I.depth(), kern);

处理前后对比

原文出自OpenCV官网英文文档,笔记记录了模板操作的相关知识点

你可能感兴趣的:(OpenCV笔记)