繁体   English   中英

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

[英]Convert White Pixels to Black in OpenCV python

我正在尝试使用python OpenCV将输入图像的白色背景转换为黑色,但是并不是所有的白色像素都完全转换为黑色。 我已经附上了输入和输出图像。

输入图片:

在窗口中输入图像

输出图像:

在窗口中输出图像

我使用以下代码进行转换:

img[np.where((img==[255,255,255]).all(axis=2))] = [0,0,0];

我该怎么办?

我知道这已经得到回答。 我为您提供了一个编码的python解决方案。

首先,我找到了这个线程,解释了如何去除白色像素。

结果:

结果

另一个测试img:

编辑这是一种更好,更短的方法。 在@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()

资源

[ 旧代码 ]

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形态转换

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM