2014-07-10 14 views
0

我使用OpenCV的GrabCut實現爲了從圖像中刪除背景。但是現在新的背景是黑色的。有什麼辦法讓它透明嗎? 的代碼,現在這一部分看起來是這樣的:OpenCV C++中的透明像素(使用GrabCut時)

Mat binMask(image.size(), CV_8UC1); 
binMask = mask & 1; 
image.copyTo(result, binMask); 

我可以以某種方式使用透明像素填充binMask? 我已經閱讀了一些用於覆蓋圖像的教程,但我不需要在我的照片前面有透明圖像,但在後面。 我希望有人能幫忙。 非常感謝!

回答

3

由於您使用的是8UC1圖像類型,因此不可能具有透明像素。 只有您有Alpha通道並且alpha設置爲0時,才允許使用這些通道:您必須使用4通道圖像(3代表顏色,1代表Alpha通道)。 Alpha通道支持文件格式,如PNG,但不支持JPG格式。

在遮罩的情況下,您不需要使用透明像素,因爲黑色實際上對應於0,並且在混合兩幅圖像時它們不會影響結果(例如addWeighted ,或者在bitwise_or操作的情況下)。

+0

我不能把所有的黑色像素看作是背景的一部分,因爲它們中的一些可能是前景的一部分。 – nena

+0

如果您使用輪廓提取方法,您只需將提取的部分定義爲ROI並用白色像素填充輪廓。在這種情況下,你將擁有完整的前景。 參考這個答案http://stackoverflow.com/a/16877055/2369389 – madduci

+0

我使用GrabCut找到背景。沒有辦法重用結果嗎?或者我必須做更多的計算才能找到輪廓? – nena