2012-07-27 55 views
1

我正在嘗試使用帶alpha通道的PNG從視頻流中「屏蔽」當前幀。OpenCV處理圖像的部分

我的PNG在我不想處理的區域有黑色像素,在其他區域有alpha圖像 - 目前它保存了4通道的4色圖像,但它可能是二進制圖像。

我正在圖像上進行背景減除和輪廓查找,所以我想如果我將我的'蒙版'圖像中的黑色像素複製到當前,那麼在黑色區域中將找不到輪廓。這是一個好方法嗎?如果是這樣,我怎樣才能將一個cv::Mat上的黑色/非透明像素複製到另一個上面?

回答

2

您所描述的內容聽起來像是使用圖像蒙版。當你在OpenCV庫中有很多方法支持掩碼時,你會在alpha通道中執行它,這很奇怪。爲什麼不使用alpha通道,而是在任何想要查找輪廓的位置創建一個具有非零值的單獨二進制圖像?

根據您使用哪種算法,您的假設是正確的,即在黑色像素區域中不會找到輪廓。不幸的是,我不知道有沒有任何有效的方法將像素從一個圖像複製到另一個圖像,而沒有深入到Mat結構的本質,並且從一個字節到另一個像素迭代。使用前面介紹的掩模思想和預處理函數,然後將生成的二進制圖像發送到findContours之類,可以讓您充分利用OpenCV庫已經編寫好且優化的代碼,並保留更多你頭上的頭髮,它屬於哪裏;)。

+2

請參閱http://docs.opencv.org/modules/core/doc/basic_structures.html?highlight=copyto#void Mat :: copyTo(OutputArray m,InputArray mask)const – 2012-07-27 18:17:04

+0

謝謝,我確實開始看通過行/列和複製值:)。是的,到目前爲止,我很享受簡歷,即使我渴望與所有事情一起玩,我應該有一個結構來學習。另外,我發現了另一個方便的函數:'cv :: addWeighted' – 2012-07-27 19:45:16