我想使用不同的方法来检测候选车牌,但尝试了几次后却卡住了。
我想知道我的方法是否正确。
我正在使用HSV图像模型。
到目前为止,我的已知方法。
1.预处理图像->形态变换->斑点检测。
2.预处理图像->边缘检测->在图像中查找矩形。
3.预处理图像->边缘检测->直方图投影->直方图分析
我不想专注于方法3,因为其他人正在研究它。
我应该在某个地方使用连接组件分析吗?
我将BlackHat和TopHat操作与高斯模糊和自适应阈值一起用于图像预处理。
这是我的代码:
imgHSV = np.zeros((self.height, self.width, 3), np.uint8)
imgHSV = cv.cvtColor(self.image, cv.COLOR_BGR2HSV)
_, _, self.imgValue = cv.split(imgHSV)
imgTopHat = np.zeros((self.height, self.width, 1), np.uint8)
imgBlackHat = np.zeros((self.height, self.width, 1), np.uint8)
structuringElement = cv.getStructuringElement(cv.MORPH_RECT, (3, 3))
imgTopHat = cv.morphologyEx(self.imgValue, cv.MORPH_TOPHAT, structuringElement)
imgBlackHat = cv.morphologyEx(self.imgValue, cv.MORPH_BLACKHAT, structuringElement)
imgGrayscalePlusTopHat = cv.add(self.imgValue, imgTopHat)
imgGrayscaleHSV = cv.subtract(imgGrayscalePlusTopHat, imgBlackHat)
imgBlurred = np.zeros((self.height, self.width, 1), np.uint8)
imgBlurred = cv.GaussianBlur(imgGrayscaleHSV, GAUSSIAN_SMOOTH_FILTER_SIZE, 0)
thresholdedImage = cv.adaptiveThreshold(imgBlurred, 255.0, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY_INV, ADAPTIVE_THRESH_BLOCK_SIZE, ADAPTIVE_THRESH_WEIGHT)
通过预处理的图像,我的意思是提取Value,执行TopHat和BlackHat操作,高斯模糊和自适应阈值处理后的图像。 我尝试使用openCV查找simpleBlob,但是它不适用于准备好的图像。 至于边缘检测,我正在使用Canny边缘检测,并且已经实现了sobel边缘检测。
示例处理过的图像(我没有足够的声誉来发布图像...)
我希望输出的图像具有潜在的候选板的轮廓,但是我无法正确处理变换后的图像。我该怎么办?应该如何应用转换(以及什么类型)。
答案 0 :(得分:0)
我尝试使用不同的方法进行板检测:2和3。它们实际上不起作用。
最好的方法-基于ML。例如,最简单的HAAR cascades。 HOG + SVM效果更好。基于DNN的方法是最好的-from Intel with advance information(您可以将其与带有OpenVINO推理引擎的opencv_dnn一起使用)。
不要在手动算法上浪费时间。