复制图像,将黑色像素更改为白色像素

Copy image changing black pixels into white pixels

我正在看图片(img1=cv2.imread('picture.jpg')),上面只有一个物体,背景是黑色的。

注意对象没有黑色像素。

我想像这样将 img1 复制到 img2img2=img1.copy() 但我想在 img2 中拥有 [=11] 的所有黑色像素(背景) =] 设置为白色。我怎样才能达到这个目标?

这应该有效:(在 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 and cvtColor。 唯一的问题是,如果在输入图像中,背景之外的像素为零。在那种情况下,您可能更喜欢使用 floodfill 方法,但对于您的问题来说可能有点矫枉过正。

编辑:您也可以使用 inRange 创建您的面具。