2016-11-27 1 views
-3

I 화살 다발이 sampleOpenCV의 - 노하우 찾기 컨투어 (화살표) 방향

같은 이미지를 갖는다. 나는 이미지의 대부분의 화살표의 방향을 알아 내고 싶다.

나는 OpenCV의 일부 독서를했고, 내가 어느 정도 정확한 결과를 얻기 위해 관리 내 스크립트를 사용하여 folowing 코드

import numpy as np 
import cv2 
import math 

img = cv2.imread('sample7.png') 
height, width, channels = img.shape 
img = cv2.resize(img, (width*8, height*8))      
img = cv2.medianBlur(img,5) 
imgray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 


ret,th1 = cv2.threshold(imgray,100,255,cv2.THRESH_BINARY) 
edged=cv2.Canny(th1,127,200) 


im2,contours,h = cv2.findContours(edged.copy(),cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) 
(img2,cnts, _) = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 
screenCnt=None 
flag_t=False 
flag_s=False 

kot=[] 

for c in cnts: 
    approx = cv2.approxPolyDP(c, 0.01*cv2.arcLength(c,True), True) 

    area = cv2.contourArea(c) 
    #print area 
    if int(len(approx)) > 8 and area > 600 and area < 1100: 
     anglelist=[] 
     cv2.drawContours(img, [approx], -1, (0, 255, 255), 1) 
     (x,y),(MA,ma),angle = cv2.fitEllipse(c) 
     print round(angle,-1) 
     kot.append(round(angle,-1)) 


d = {} 
for elm in kot: 
    d[elm] = d.get(elm, 0) + 1 
counts = [(j,i) for i,j in d.items()] 
count, max_elm = max(counts) 


print 'most common:' 
print max_elm 
cv2.imshow('img',img) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

마련. 문제는 화살표가 위 또는 아래, 왼쪽 또는 오른쪽으로 향하는 경우 동일한 결과를 얻는 것입니다. 화살표가 왼쪽 또는 오른쪽을 가리키고 있는지 어떻게 알 수 있습니까? 아래 그림의 두 경우 모두 90도 전후로 같은 결과를 얻습니다. 거이다 enter image description here enter image description here

+0

이것은 분명히 컴퓨터에서 생성 된 이미지입니다. 이미지를 생성 한 코드에서 더 많은 정보를 얻을 수 있다면 훨씬 더 앞서 나갈 수 있습니다. 아마도 추가 메타 데이터를 파일에 첨부 할 수 있습니다. 그러나 예, OpenCV는 많은 이미지 처리 기능을 갖추고 있습니다. 이미지 처리 만이 유일한 옵션 인 경우 시작하는 것이 좋습니다. –

답변

1

는 일부 컴퓨터 비전의 기초 지식없이 힘든 작업이 될. 내가 갈 방법은 opencv로 이미지를 읽는 것이다. 그레이 스케일 이미지로로드하고 가장자리를 탐지하기 위해 소벨 필터와 같은 마스크를 사용하십시오. 심지어 더 나은, 영리한 연산자. 가장 좋은 방법은 먼저 이러한 것들을 살펴 보는 것입니다. 이것들을 사용하여 이미지와 방향의 가장자리를 감지 할 수 있습니다. 너는 그걸로 일할 수있어. 더 진보 된 (아마도 더 나은) 옵션은 이미지에서 선 (또는 다른 기하학적 객체)을 감지 할 수있는 허프 (hough) 변환을 사용하는 것입니다. 이것들은 모두 opencv에 담겨 있지만, 어떻게 작동하는지 이해할 필요가있을 것입니다. 희망이 도움이됩니다.