在OpenCV Python中将白色像素转换为黑色

4
我正在尝试使用Python OpenCV将输入图像的白色背景转换为黑色。但是,所有白色像素并没有完全变成黑色。我已经附上了输入和输出图像。
输入图像: Input Image in the window 输出图像: Output Image in the Window 我使用了以下代码进行转换:
img[np.where((img==[255,255,255]).all(axis=2))] = [0,0,0];

我该怎么办?


2
检测椭圆区域并将其外部的所有内容遮罩。 - Micka
1
例如,您可以首先掩盖一个“接近白色”的图像,然后仅使用与图像边框相连的那些像素作为背景。 - Micka
2个回答

8
我知道这个问题已经有答案了。我为你编写了一个Python代码解决方案。
首先,我找到了这个线程,其中解释了如何去除白色像素。
结果如下: result 另一张测试图片: 编辑: 这是一种更好、更短的方法。在@ZdaR评论循环遍历图像矩阵后,我研究了它。
[更新代码]
img = cv2.imread("Images/test.pnt")

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret, thresh = cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY)

img[thresh == 255] = 0

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
erosion = cv2.erode(img, kernel, iterations = 1)

cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow("image", erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()

Source

[Old Code]

img = cv2.imread("Images/test.png")

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret, thresh = cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY)

white_px = np.asarray([255, 255, 255])
black_px = np.asarray([0, 0, 0])

(row, col) = thresh.shape
img_array = np.array(img)

for r in range(row):
    for c in range(col):
        px = thresh[r][c]
        if all(px == white_px):
            img_array[r][c] = black_px

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
erosion = cv2.erode(img_array, kernel, iterations = 1)

cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow("image", erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()

其他使用的来源: OpenCV形态学变换


在使用OpenCV时,使用Python中的嵌套for循环逐像素迭代图像矩阵从来不是一个好主意,最好使用Numpy语法。 - ZdaR

1

我认为图像中并非所有的“白色”像素都是 [255,255,255]。相反,应该设置一个阈值。尝试将 [220,220,220] 及以上的像素转换为 [0,0,0]。


这可能会影响中心的明黄色区域! - Jeru Luke
1
转换为HSV可能有助于图像分割。 - Ankur S
1
正如Jeru Luke所说,阈值[220,220,220]会影响某些图像中的黄色区域。 - Gaurav Sawant
使用试错法。如果 [230, 230, 230] 仍然影响黄色,则尝试 [235, 235, 235],以此类推。 - Parth Sarthi Sharma
1
这种方法不够可扩展。无论您将阈值设置为多少,图像中的任何出现都会受到影响。问题规范不好- OP并不想将所有较浅的像素转换为黑色,而只想转换主要图像周围的那些像素。 - Jongware

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接