如何将图像中的红色改为whi

2024-05-16 09:15:22 发布

您现在位置:Python中文网/ 问答频道 /正文

iam在车牌识别方面的工作需要对车牌图像进行预处理才能开始识别,iam面临的问题是对红色车牌字符不清晰要进行分割

对于RGB图像,有没有办法将红色转换成白色?你知道吗


Tags: 图像rgb字符iam红色白色办法车牌
1条回答
网友
1楼 · 发布于 2024-05-16 09:15:22

使用cv2会让你的生活更轻松。有一个“inRange”函数可以让你定义你的红色范围。在hsv颜色空间中,红色是一个矩形,而在rgb空间中,红色是一个难以捕捉的立方体块,如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)

然后定义红色范围的低端和高端,通过减去/加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)

现在你做一个最终的遮罩,它是两个红色遮罩的“或”,按位\u和遮罩(反转它之后,因为你想只丢失红色而不是只保留红色)来得到一个结果:

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图像上

相关问题 更多 >