2014-10-29 1 views
0

두 개의 라인 사이의 거리와 이미지의 중심점을 기준으로 한 위치의 차이를 찾기 위해 openCV를 사용하고 있습니다. 정확한 거리 일 필요는 없습니다 - 어떤 종류의 문맥 값 (픽셀은 괜찮을 것입니다)cv2 라이브러리와 화면 중심 사이의 거리 - 파이썬

두 코드를 감지하는 코드는 이것입니다;

import PIL 
import time 
import io 
import picamera 
import cv2 
import numpy as np 

image_count = 0 

with picamera.PiCamera() as camera: 
    camera.start_preview() 
    camera.resolution = (340, 240) 
    time.sleep(2) 

while(True): 
    try: 
     stream = io.BytesIO() 
     image_counter+=1 
     camera.capture(stream, format='png') 
     data = np.fromstring(stream.getvalue(), dtype=np.uint8) 
     image = cv2.imdecode(data, 1) 
     grey_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
     edge_image = cv2.Canny(grey_image, 50, 150, apertureSize = 3) 
     lines = cv2.HoughLines(edge_image, 1, np.pi/180, 95) 
     if(lines.any): 
      for rho, theta in lines[0] 
       a = np.cos(theta) 
       b = np.sin(theta) 
       x0 = a*rho 
       y0 = b*rho 
       x1 = int(x0 + 1000*(-b)) 
       y1 = int(y0 + 1000*(a)) 
       x2 = int(x0 - 1000*(-b)) 
       y2 = int(y0 - 1000*(a)) 

       cv2.line(image, (x1, y1), (x2, y2), (0,0,255), 2) 

      cv2.imwrite('lined_image_' + str(image_counter) + '.png, image) 

    except: 
     print 'loop error' 

이 이미지와 같은 줄을 감지합니다.

lines around boundaries

나는 수치 적으로이 작업을 수행하는 방법을 해결하기 위해 노력했습니다하지만 복잡한 아마도 잘못 -이 쉬운 방법해야하지만 오픈 CV를 사용하여 내 경험 부족으로 볼 수 없습니다.

이미지의 중심점과 표시되는 가장 안쪽 빨간색 선 사이의 거리를 어떻게 찾을 수 있습니까? (선이 이미지 중심점과 교차하는 수평선과 교차하는 지점)

고마워요!

답변

0

HoughLinesP을 사용한다면 직접 선의 시작점과 끝점을 얻을 수 있습니다. DX를이 (x2-x1)과의 Dy가, 중심점에서 필요한 거리 D(y2-y1) 때 그런 (x0,y0) 당신이 HoughLines 고수하려는 경우, 당신은 쉽게 얻을 수 rhotheta을 변환 할 수 있습니다

enter image description here

입니다 선의 방정식을 사용하고 위의 수식이 빌린 곳인 here,으로 설명한 많은 수식 중 하나를 사용하십시오.