从图像中提取对象

时间:2018-09-12 14:09:00

标签: python opencv image-processing

我有车牌的图像(图像像这些示例图像一样被裁剪)。我只想从输入图像中提取印版。

我已应用OpenCV Canny Edge检测器,但无法继续进行。 有人可以帮我吗?

我的最终目标是用公司徽标替换印版。

车牌图片示例:

License Plate

enter image description here

1 个答案:

答案 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()

结果:

enter image description here

enter image description here

希望对您有所帮助,或者为您提供关于该问题的新观点。干杯!