OpenCV3 # 掩膜mask学习笔记

学习掩膜的记录

不知道为什么, 看了好几遍掩膜的使用方法和资料, 但是一到用的时候就全TNND忘了
所以决定好好记录一下

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

1365633-20190725163446404-1674976144.png


然后捏

还有提取ROI区域的像素用法

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

1365633-20190725163704819-2003577948.png


可以参考这位大佬的讲解 https://www.cnblogs.com/skyfsm/p/6894685.html

先这样

转载于:https://www.cnblogs.com/HY12345/p/11245064.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值