OpenCV3 # mask mask study notes

Learn mask records

I do not know why, read it several times to use a mask and information, but to use a whole TNND when he forgot
so I decided to take a note of

void testMaskROI(Mat* _mat)
{
    string fileName0, filename_mask;
    cout << "Get a Image File ..." << endl;
    cin >> fileName0;
    cout << "Get mask Image File ..." << endl;
    cin >> filename_mask;

    Mat mat_mask_0;
    Mat mat_src_0, mat_src_1;
    Mat mat_roi_0;

    mat_src_0 = imread(fileName0);//最终图
    mat_src_1 = imread(filename_mask);//掩膜原图
    mat_mask_0 = imread(filename_mask, 0); //掩膜必须是灰度(二值图)(单通道)

    mat_roi_0 = mat_src_0(Rect(0, 0, mat_mask_0.cols, mat_mask_0.rows));//roi信息头关联原图部分区域矩阵(ROI区域)

    //老子的疑问: 1.为什么要灰度图呢? 因为按照像素值为零的像素将使用掩膜原图(mat_src_1)的像素
    //进行替换的理解, 所以我觉得掩膜的作用通俗点说就是替换不为零的点
    //所以这里用Mat::copyTo()函数将mat_src_1的像素替换到mat_roi_0(也就是关联的mat_src_0中的ROI区域)内不为零的点
    //2. mat_src_1和mat_mask_0的关系:掩膜是灰度图,所以替换的时候将掩膜原图和掩膜对比,替换掩膜中不为零的像素
    mat_src_1.copyTo(mat_roi_0, mat_mask_0);


    *_mat = mat_src_0.clone();
}
int main()
{
    Mat mat_src;
    testMaskROI(&mat_src);
    /*==============================*/
    resize(mat_src, mat_src,Size(),0.3,0.3);
    imshow(WINNAME,mat_src);//显示
    waitKey();
}


Then squeeze

As well as extract the ROI pixel usage

void testMaskROI2(Mat* _mat)
{
    string fileName0, filename_mask;
    cout << "Get a Image File ..." << endl;
    cin >> fileName0;
    //cout << "Get mask Image File ..." << endl;
    //cin >> filename_mask;

    Mat mat_mask_0;
    Mat mat_src_0 , mat_dst_0;

    mat_src_0 = imread(fileName0);
    //创建等大小的全黑8位1通道的掩膜
    mat_mask_0 = Mat::zeros(mat_src_0.size(),CV_8UC1);
    //shezhiROI区域的像素为255(就是最白滴)
    mat_mask_0(Rect(100, 100, 500, 500)).setTo(255);

    //这样复制的时候,只有掩膜上对应的像素为255的点可以复制过去
    mat_src_0.copyTo(*_mat, mat_mask_0);
}


Reference may explain the big brother of https://www.cnblogs.com/skyfsm/p/6894685.html

Firstly

Guess you like

Origin www.cnblogs.com/HY12345/p/11245064.html