2016-11-06 5 views
0

У меня есть изображение, как это:OpenCV Угол обнаружения

enter image description here

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

enter image description here

однако я хотите углы прямоугольника.

Как я могу избавиться от тех углов, которые мне не нужны.

и вот мой код

import cv2 
import numpy as np 
from matplotlib import pyplot as plt 

img = cv2.imread("/home/mkmeral/Desktop/opencv/cropped.png") 

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
corners = cv2.goodFeaturesToTrack(gray,4,0.01,10) 
corners = np.int0(corners) 

for i in corners: 
    x,y = i.ravel() 
    cv2.circle(img,(x,y),3,255,-1) 

plt.subplot(121),plt.imshow(img) 
plt.title('2'), plt.xticks([]), plt.yticks([]) 
plt.suptitle("CORNERS") 

cv2.imwrite("/home/mkmeral/Desktop/opencv/corners.png", img) 

plt.show() 

Вот весь образ, я обрезать изображение, чтобы сделать его меньше.

enter image description here

Здесь мне нужно углы быть:

enter image description here

+0

не ваш изображение уже испорчено? Объекты перекрывают край изображения? – RvdK

+0

Да, но это еще не все образ. Я обрезал его перед публикацией. Мой плохой:/ – mkmeral

+0

Пожалуйста, разместите изображение целиком, если это возможно, тогда было бы легче решить проблему. – ZdaR

ответ

0

Как ваше изображение довольно низкого разрешения и сходство с прямоугольником, любое решение будет несколько в глаз зрителя.

Вы можете сделать это с OpenCV, но я просто объясняю метод, используя ImageMagick в командной строке. Таким образом, пороговое изображение на черно-белое на 50%, а затем на «Анализ блоба» или «Анализ подключенных компонентов».

convert rect.png -threshold 50%    \ 
    -define connected-components:verbose=true \ 
    -connected-components 8 result.png 

Выход

Objects (id: bounding-box centroid area mean-color): 
    0: 160x120+0+0 78.0,58.7 18551 srgb(0,0,0) 
    1: 52x50+97+58 121.8,82.6 649 srgb(255,255,255) 

Так что, если мы посмотрим на последней строке мы имеем объект 52x50 пикселей с площадью 649 пикселей и белым цветом - что ваша форма - или горящая сигарета, как я подумай об этом! Давайте нарисуем его:

convert rect.png -stroke red -fill none -draw "rectangle 97,58 148,107" y.png 

enter image description here

Теперь, если это прямоугольник, как вы говорите, он будет иметь длину примерно равную диагонали коробки ограждающей, так

L = sqrt(52*52 + 50*50) = 72 

и его площадь 649, поэтому его ширина составляет около 9 пикселей и начинается с + 97 + 58 в верхнем левом углу. Или его центроид составляет 121,8,82,6. Итак, все, что вам нужно, это небольшая геометрия школьника, чтобы получить ваши угловые очки.