复制图像,将黑色像素更改为白色像素
Copy image changing black pixels into white pixels
我正在看图片(img1=cv2.imread('picture.jpg')
),上面只有一个物体,背景是黑色的。
注意对象没有黑色像素。
我想像这样将 img1
复制到 img2
: img2=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 创建您的面具。
我正在看图片(img1=cv2.imread('picture.jpg')
),上面只有一个物体,背景是黑色的。
注意对象没有黑色像素。
我想像这样将 img1
复制到 img2
: img2=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 创建您的面具。