python - 用不同的方法寻找候选板 block

标签 python opencv image-processing detection

我想使用不同的方法检测车牌候选项,但在尝试了几次后我还是卡住了。 我想知道我的做法是否正确。
我正在使用 HSV 图像模型。
到目前为止,我对已知方法的处理方法。
1. 图像预处理->形态学变换->blob检测
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)

我所说的预处理图像是指在提取值、执行 TopHat 和 BlackHat 操作、高斯模糊和自适应阈值处理之后的图像。 我尝试使用 openCV 查找 simpleBlob 但它不能与准备好的图像一起正常工作。 至于边缘检测,我使用的是 canny 边缘检测并实现了 sobel 边缘检测。

示例处理过的图像(我还没有足够的声誉来发布图像......)

enter image description here

我希望输出是具有潜在候选板 block 轮廓的图像,但我无法获得正确转换的图像来使用。我应该怎么办?应该如何应用转换(以及什么类型)。

最佳答案

我尝试使用不同的方法进行车牌检测:2 和 3。它们实际上不起作用。

最佳方法 - 基于 ML。例如最简单的 HAAR cascades . HOG + SVM 效果更好。基于 DNN 的方法是最好的 - from Intel with advance information (您可以将它与带有 OpenVINO 推理引擎的 opencv_dnn 一起使用)。

不要在手动算法上浪费时间。

关于python - 用不同的方法寻找候选板 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54329089/

相关文章:

c++ - opencv相机标定(Assertion failed故障)

Python:连接四个交替的转弯

python - Pandas 数据框在 groupby agg 之后有额外的标题

python - 如何从 python 列表中只删除零位?

opencv - 使用 HSV 和 HoughCircles 通过 OpenCV 检测彩色球体

opengl - 如何使用 OpenGL 将像素数组直接绘制到屏幕上?

python - 将 numpy 数组转换为 pandas 数据框

opencv - ARM A9是否支持OpenCL加速?

c++ - c和matlab以外语言的图像处理

c++ - Kuwahara 过滤器的奇怪结果