2024-05-16 09:15:22 发布
网友
iam在车牌识别方面的工作需要对车牌图像进行预处理才能开始识别,iam面临的问题是对红色车牌字符不清晰要进行分割
对于RGB图像,有没有办法将红色转换成白色?你知道吗
使用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图像上
使用cv2会让你的生活更轻松。有一个“inRange”函数可以让你定义你的红色范围。在hsv颜色空间中,红色是一个矩形,而在rgb空间中,红色是一个难以捕捉的立方体块,如this,这将更容易实现。下面是红色的色调:
然后定义红色范围的低端和高端,通过减去/加10或20(根据您认为红色的确切含义,可以更改任意值)。你必须处理在opencv中实现的hsv范围的最末端的红色,所以下面的,你可以用于其他颜色,对于红色是不合适的
相反,你必须使用
在hsv的高端为红军重新做这件事。cv2的色调从0到179,而不是从0到标准255。你知道吗
现在你做一个最终的遮罩,它是两个红色遮罩的“或”,按位\u和遮罩(反转它之后,因为你想只丢失红色而不是只保留红色)来得到一个结果:
它似乎工作正常,例如在this图像上
相关问题 更多 >
编程相关推荐