【发布时间】:2019-02-17 05:07:52
【问题描述】:
我有车牌图像(图像像这些示例图像一样被裁剪)。我想从输入图像中只提取板。
我已经应用了 OpenCV Canny Edge 检测器,但我无法更进一步。 谁能帮帮我?
我的最终目标是用我的公司徽标替换铭牌。
车牌图片示例:
【问题讨论】:
-
你能告诉我们你到目前为止写的代码吗?
标签: python opencv image-processing
我有车牌图像(图像像这些示例图像一样被裁剪)。我想从输入图像中只提取板。
我已经应用了 OpenCV Canny Edge 检测器,但我无法更进一步。 谁能帮帮我?
我的最终目标是用我的公司徽标替换铭牌。
车牌图片示例:
【问题讨论】:
标签: python opencv image-processing
有很多不同的方法。如果您使用cv2.Canny() 提取了边缘,那么您可以使用cv2.findContours() 提取轮廓。一旦你有了这个,你可以用cv2.drawContours()画出盘子,或者制作一个轮廓的面具,然后添加你的标志等。
您可以尝试使用cv2.threshold() 将裁剪区域转换为二进制图像,而不是Canny 边缘检测并搜索轮廓。您甚至可以添加一些标准来定义正确的轮廓,例如它占据的区域、轮廓的周长、高度、长度等。
例如:
import cv2
import numpy as np
img = cv2.imread('license.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, threshold = cv2.threshold(gray,170,255,cv2.THRESH_BINARY)
_, contours, hierarchy = cv2.findContours(threshold, cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
for cnt in contours:
size = cv2.contourArea(cnt)
perimeter = cv2.arcLength(cnt,True)
x,y,w,h = cv2.boundingRect(cnt)
if 10000 > size > 1000 and w < 140 and h > 50 and perimeter < 360:
cv2.drawContours(img, [cnt], 0, (255,255,255), -1)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果:
希望它对您有所帮助或为您提供有关该问题的新观点。干杯!
【讨论】: