【问题标题】:Extract object from the image从图像中提取对象
【发布时间】:2019-02-17 05:07:52
【问题描述】:

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

我已经应用了 OpenCV Canny Edge 检测器,但我无法更进一步。 谁能帮帮我?

我的最终目标是用我的公司徽标替换铭牌。

车牌图片示例:

【问题讨论】:

  • 你能告诉我们你到目前为止写的代码吗?

标签: python opencv image-processing


【解决方案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()

结果:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2019-02-02
    • 1970-01-01
    • 2019-10-29
    相关资源
    最近更新 更多