我正在阅读只有一个物体的照片(img1=cv2.imread('picture.jpg')
),背景为黑色。
请注意,该对象没有黑色像素。
我想将img1
复制到img2
,如下所示:img2=img1.copy()
但我想在img2
中获得img1
的所有黑色像素(背景)设为白色。我怎样才能达到这个目标?
答案 0 :(得分:0)
这应该有效:(在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创建蒙版。