我正在尝试使用带有OpenCV的python脚本来挑选图像中的牌照并返回坐标/在牌照周围绘制一个边界框。我写的剧本无法找到车牌,它经常返回车的不同区域。
import numpy as np
import cv2
def find_license(image):
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.bilateralFilter(gray, 11, 17, 17)
edged = cv2.Canny(gray, 30, 200)
cv2.imwrite('detect.png', edged)
(cnts, _) = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cnts=sorted(cnts, key = cv2.contourArea, reverse = True)[:20]
# loop over our contours
for c in cnts:
peri = cv2.arcLength(c, True)
approx = cv2.approxPolyDP(c, 0.02 * peri, True)
cv2.drawContours(image, [approx], -1, (0,255,0), 3)
# compute the bounding box of the of the paper region and return it
return cv2.minAreaRect(c)
答案 0 :(得分:1)
如果您希望改进代码,我建议您首先尝试对图像进行阈值处理,以仅返回与车牌相关联的颜色。
(英国的黄色和白色,取决于您所在的国家/地区)
这将删除不是那种颜色的图像的所有部分,并且您的脚本可能有更高的工作机会
Here是指向非常有用的教程/工具集的链接,可帮助您实现此目标(以及大多数其他计算机视觉问题)
另一个可能有用的过程是检查每个物体每个轮廓的长度,并丢弃任何不落入你设定的比例(即顶部和底部轮廓比两个边长)的大多数牌照有一个标准大小(可能不是全部,我再也不知道你在做什么国家)
另一种方法完全是训练你自己的牌照级联赛车牌,这可能会有更大的成功机会。要做到这一点,您需要很多包含车牌的图像,甚至包含更多不的图像。
Here是指向教程的链接,其中包含可帮助您实现此目的的工具。
通过遵循本教程,您应该得到一个.XML文件,该文件将成为您新训练的分类器。
Here是教程的链接,可帮助您使用新的分类器。我还建议您阅读haar分类器的工作原理,因为这可以让您更好地了解用于训练分类器的图像以及可以在图像上使用哪些预处理技术来提高分类器的准确性。
祝你好运,希望这会有所帮助。