OpenCV(2)-- 图像掩膜操作

1、掩膜的定义

掩模是由0和1组成的一个二进制图像。当在某一功能中应用掩模时,1值区域被处理,被屏蔽的0值区域不被包括在计算中
。通过指定的数据值、数据范围、有限或无限值、感兴趣区和注释文件来定义图像掩模,也可以应用上述选项的
任意组合作为输入来建立掩模。

2、 数字图像处理中,图像掩膜主要用于:

①提取感兴趣区,用预先制作的感兴趣区掩模与待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0。
②屏蔽作用,用掩模对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计。
③结构特征提取,用相似性变量或图像匹配方法检测和提取图像中与掩模相似的结构特征。
④特殊形状图像的制作。用选定的图像、图形或物体,对待处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程。用于覆盖的特定图像或物体称为掩模或模板。

3、掩膜操作函数

Mat kernel = (Mat_<float>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);  //定义一个3*3掩膜的kernel
filter2D(src, hello, -1, kernel); //filter2D为掩膜操作函数

代码示例:

#include
#include
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
    Mat src,dst;
    src = imread("D:/VS2015Program/buildsrc1.jpg");
    if (src.empty())
    {
        cout << "load image error" << endl;
    }
    namedWindow("1", CV_WINDOW_AUTOSIZE);
    imshow("1", src);

    namedWindow("output", CV_WINDOW_AUTOSIZE);

    cvtColor(src, dst, CV_BGR2GRAY);

    int cols = dst.cols;
    int rows = dst.rows;
    const uchar* firstRow = dst.ptr(5);

    Mat M(300, 300, CV_8UC3, Scalar(0, 0, 255)); //初始化M图像矩阵
    printf("first pixel value is : %d\n", *firstRow);  //通过printf函数打印一些有用信息

    Mat m1;
    m1.create(src.size(), src.type()); //利用create方法创建m1矩阵,其中m1大小和类型都和src一样
    m1 = Scalar(0, 0, 255); //Scalar为赋颜色的函数,常用

    Mat hello;
    Mat kernel = (Mat_<float>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);  //定义一个3*3掩膜的kernel
    filter2D(src, hello, -1, kernel); //filter2D为掩膜操作函数

    Mat m2 = Mat::zeros(200, 200, CV_8UC1); //创建m2图像矩阵新方法

    cout << "m2" << endl << m2 << endl;
    imshow("output", hello);
    waitKey(0);
    return 0;
}

输出图片结果如下:
OpenCV(2)-- 图像掩膜操作_第1张图片

你可能感兴趣的:(OpenCv)