Определить несколько прямоугольников и нарисовать ограничивающие рамки вокруг них с помощью OpenCV - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь нарисовать ограничивающий прямоугольник вокруг двух прямоугольников, найденных на изображении, но не включая изогнутый «шум»

enter image description here

enter image description here

Я пробовал несколько методов, включая преобразование линии Хафа и попытки извлечь координаты, но безрезультатно.Мои методы казались слишком произвольными, и я пытался найти черное пространство между настоящими прямоугольниками и шумом в верхней части фреймов, но не смог найти общий алгоритм, который бы подходил этому.

1 Ответ

1 голос
/ 01 июля 2019

Это не так просто сделать, вы можете попытаться выделить вертикальные линии, которые достаточно различимы, расширить / размыть, чтобы сделать прямоугольник прямоугольником, найти контуры того, что осталось, и отфильтровать их соответственно ... Код будет выглядеть так:

import numpy as np
import cv2

minArea = 20 * 20 # area of 20 x 20 pixels

# load image and threshold it
original = cv2.imread("a.png")
img = cv2.cvtColor(original, cv2.COLOR_BGR2GRAY)
ret, thres = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY )

# Get the vertical lines
verticalStructure = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 10))
vertical = cv2.erode(thres, verticalStructure)
vertical = cv2.dilate(vertical, verticalStructure)

# close holes to make it solid rectangle
kernel = np.ones((45,45),np.uint8)
close = cv2.morphologyEx(vertical, cv2.MORPH_CLOSE, kernel)

# get contours
im2, contours, hierarchy = cv2.findContours(close, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# draw the contours with area bigger than a minimum and that is almost rectangular 
for cnt in contours:
  x,y,w,h = cv2.boundingRect(cnt)
  area = cv2.contourArea(cnt)
  if area > (w*h*.60) and area > minArea:
    original = cv2.rectangle(original, (x,y),(x+w,y+h), (0,0,255), 3)

cv2.imshow("image", original)

cv2.waitKey(0)
cv2.destroyAllWindows()

И результат:

enter image description here

enter image description here

Если это не работает с другими изображениями, попробуйте настроить параметры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...