[英]Copy image changing black pixels into white pixels
我正在閱讀圖片( img1=cv2.imread('picture.jpg')
),其中只有一個對象,背景為黑色。
請注意,該對象沒有黑色像素。
我想像這樣將img1
復制到img2
: img2=img1.copy()
但我想在img2
中將img1
所有黑色像素(背景)設置為白色。 我怎樣才能達到這個目標?
這應該工作:( 在C ++中,請參閱下面的評論)
const cv::Mat img1=cv::imread('picture.jpg')
///Create a grayscale mask -> only pixel !=0 in the mask will be copied
cv::Mat mask(img1.size(),CV_8U); ///cvtColor requires output image to be already allocated
cv::cvtColor(img1, mask, CV_BGR2GRAY);
///Initialize output image to white
cv::Mat img2(img1.size(),CV_8UC3);
img2.setTo(cv::Scalar(255,255,255) );
///Copy pixels from the original image to the destination image, only where mask pixels != 0
img1.copyTo(img2,mask);
使用copyTo和cvtColor 。 唯一的問題是,如果在輸入圖像中,您的背景中的像素為零。 在這種情況下,您可能更喜歡泛濫填充方法,但可能對您的問題來說太過分了。
編輯:您還可以使用inRange創建蒙版。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.