我有车牌的图像(图像像这些示例图像一样被裁剪)。我只想从输入图像中提取印版。
我已应用OpenCV Canny Edge检测器,但无法继续进行。 有人可以帮我吗?
我的最终目标是用公司徽标替换印版。
车牌图片示例:
答案 0 :(得分:1)
有很多不同的方法。如果用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()
结果:
希望对您有所帮助,或者为您提供关于该问题的新观点。干杯!