스터디그룹/OpenCv

opencv를 이용한 자율주행 자동차 제작기(1)

호박공장 공장장 2020. 1. 7. 00:50

opencv를 이용한 공부시작...

 

ubuntu 18.04 + opencv3 + python3.7이용

 

 

[code1]

import cv2
import numpy as np
 
img = cv2.imread('ro.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)
 
lines = cv2.HoughLines(edges,1,np.pi/180,150)
for line in lines:
    rho,theta = line[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(img,(x1,y1),(x2,y2),(0,0,255),1)
 
cv2.imshow('edges', edges)
cv2.imshow('result', img)
cv2.waitKey()
cv2.destroyAllWindows()

 

 

 

[CODE2]

엣지를 검출하기 위한 알고리즘 중 가장 유명한 것은 캐니 알고리즘이며 (Canny Edge Detector) OpenCV에서는

Canny라는 함수로 사용할 수 있다.

edges = cv2.Canny(gray,50,150,apertureSize = 3)

 

250인 첫번째 Threshold와 500인 두번째 Threshold를 각각 변경하면 다음과 같이 엣지가 다르게 나온다. 

 

import cv2
import numpy as np
 
img = cv2.imread('ro.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,150,200,apertureSize = 3)
 
lines = cv2.HoughLines(edges,1,np.pi/180,70)
for line in lines:
    rho,theta = line[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(img,(x1,y1),(x2,y2),(0,0,255),1)
 
cv2.imshow('edges', edges)
cv2.imshow('result', img)
cv2.waitKey()
cv2.destroyAllWindows()

 

Threshold값을 수정하면서 엣지를 검출하는 선을 조절할 수 있음을 확인할수 있다.

 

 

 

[작성:정혜리]