zoukankan      html  css  js  c++  java
  • 彩色图像与二值图像(mask)点乘

    问题描述:给出一幅彩色图像和一张mask二值图像,其中mask和彩色图像大小相同,感兴趣的部分为1,其余部分为0,请用mask与彩色图像点乘,将感兴趣区域显示出来。

    点乘的本质是mask中是二值图像,感兴趣部分像素值为1,将彩色图像与mask对应像素相乘,感兴趣区域的的像素保持不变,其余的像素点为0,从而显示感兴趣区域。

    首先彩色图像是不能与二值图像直接进行点乘的,因为矩阵的维度都不一样。

    这里有两种方法可以实现如上功能:将彩色图像按通道进行点乘,再合并起来,或者将二值图像复制扩充为三通道图像,再与彩色图像直接进行点乘。

    复制扩充的意思是,图像有三个通道,应该让mask的三个通道都有感兴趣区域,不能也不能简单的将其他通道置为0,否则只会显示一个通道的彩色图像,B或G或R

    Matlab

    假设mask矩阵的大小为a(200,300),展示的是200*300的二值图像,原图大小为m(200,300,3),表示200*300的三通道彩色图像。

    %假设输出图像为c
    %按通道进行点乘
    c(:,:,1)=m(:,:,1).*a;
    c(:,:,2)=m(:,:,2).*a;
    c(:,:,3)=m(:,:,3).*a;
    %先将二值图像进行复制扩充
    %假设三通道mask为p
    p(:,;,1)=a;
    p(:,;,2)=a;
    p(:,;,3)=a;
    c=m.*p;

    C++

    OpenCV中的位与函数为bitwise_and,表示对应的像素点相与,另外mask的复制扩充及分通道,合并通道可以看:Scalar、图像通道、分离、合成通道

  • 相关阅读:
    UG二次开发-CAM-获取修改路径参数
    多线程01
    MFC的对话框使用Scintilla
    CATIA的后处理
    win32窗体中使用Scintilla窗体
    string的reserve和resize
    前端宝典
    MarkDown学习
    JAVA中构造方法总结
    IDEA中maven和tomcat的配置
  • 原文地址:https://www.cnblogs.com/qinguoyi/p/7614572.html
Copyright © 2011-2022 走看看