問題描述:給出一幅彩色圖像和一張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、圖像通道、分離、合成通道