Существует много разных подходов.Если вы извлекли края с помощью cv2.Canny()
, вы можете извлечь контуры с помощью cv2.findContours()
.Как только вы это сделаете, вы можете нарисовать пластину с помощью cv2.drawContours()
или сделать маску контура, к которой вы затем добавите свой логотип и т. Д.
Вместо обнаружения края Кэнни вы можете попытаться преобразовать свою обрезанную область вдвоичное изображение с cv2.threshold()
и поиск контуров.Вы даже можете добавить некоторый критерий для определения правильного контура, например, занимаемой площади, периметра контура, высоты, длины и т. Д.
Например:
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()
Результат:
Надеюсь, это немного поможет или даст вам новую точку зрения на проблему.Ура!