如何将图像中的红色更改为白色

how to change the red color in image to white

我正在做图像板识别它需要在图像板开始识别之前对图像板进行预处理过程,我面临红色板的问题字符不清楚被分割

是否有办法将 RGB 图像的红色仅转换为白色?

使用 cv2 会让你的生活更轻松。有一个 'inRange' 函数可以让你定义你的红色范围。这在 hsv 颜色 space 中会更容易,其中红色是一个矩形,而不是在 rgb space 中,其中红色是难以捕捉的立方体块,如 this。在下面,我得到了红色的色调:

img_arr = cv2.imread("/path/to/img.png")
red = np.uint8([[[0,0,255 ]]])
hsv_red = cv2.cvtColor(red,cv2.COLOR_BGR2HSV)
hsv_img = cv2.cvtColor(img_arr, cv2.COLOR_BGR2HSV)

然后通过 subtracting/adding 10 或 20 定义红色范围的低端和高端(您可以更改任意值,具体取决于您对红色的确切看法)。您必须处理在 opencv 中实现的 hsv 范围的最末端的红色,因此以下内容可用于其他颜色,但不适用于红色

red_low = np.array([hsv_red[0]-10,50,50])
red_high = np.array([hsv_red[0]+10,255,255])
mask = cv2.inRange(hsv_img, red_low, red_high)

相反,您必须使用

red_low = np.array(0,50,50])
red_high = np.array(20,255,255])
mask1 = cv2.inRange(hsv_img, red_low, red_high)

并在 hsv 范围的高端为红色再次完成整个业务。 cv2 色调从 0 到 179 而不是从 0 到标准 255 。

red_low = np.array(160,50,50])
red_high = np.array(179,255,255])
mask2 = cv2.inRange(hsv_img, red_low, red_high)

现在你做一个最后的蒙版,它是两个红色蒙版的 'or' 和 bitwise_and 蒙版(在反转它之后因为你只想失去红色而不是只保留reds) 与图像得到结果:

mask = mask1+mask2
mask_inv = cv2.bitwise_not(mask)
res = cv2.bitwise_and(hsv_img,hsv_img, mask= mask_inv)
cv2.imshow('res',res)
cv2.waitKey(0)

它似乎工作正常,例如 this 图片