540 x 960 인 픽셀로 이루어진 3채널 데이터
import matplotlib.pyplot as plt
import cv2
img = cv2.imread("Ex1.jpg")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
print(img.shape)
print(img.shape[0])
print(img.shape[1])
plt.imshow(img)
plt.show()
1. 간단 적용 해보기
1) 단채널로 만들기 위해 아래 채널을 추가해준다.
img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
흑백으로 처리가 된다.
2) 흐리게 만들어주기 위해 다음 코드를 추가한다.
정규분포 처럼 표준편차가 작은 그래프를 옆으로 퍼트리기 위해 블러 처리해준다.
k_size = 5 # 커널의 크기
img_b = cv2.GaussianBlur(img,(k_size, k_size),0) # 단채널로 되어있으므로 0
plt.imshow(img_b, cmap = "gray")
plt.show()
3) 양쪽 경계값을 설정해준다.
lower_value = 50
upper_value = 200
equaulize_gray = cv2.Canny(img_b, lower_value, upper_value)
plt.imshow(equaulize_gray, cmap = "gray")
plt.show()
를 추가해준다.
검정색은 어떠한 데이터를 곱해도 검정색이므로 필요 없는 부분으로 분류 된다.
4) 선을 중심으로 관심 영역을 설정해준다.
필요한 부분을 넘파이 배열로 만들어낸다.
import numpy as np
를 넣는다.
mask : 관심 있는 크기 만큼 데이터를 본떠서 잘라준다.
전달한 데이터의 사이즈로 된 0으로 채워진 넘파이 배열이 만들어진다.
0으로 모두 채워져있기 때문에 검정 화면으로 출력된다.
mask = np.zeros_like(img)
if len(img.shape) > 2: # 3채널이면
c_c = img.shape[2] #색상값을 의미한다.
i_mask_color = (255,) * c_c
else: # 단채널이면
i_mask_color = 255 #하얀색
print(img.shape)
img_shape = img.shape
# 꼭지점 4개를 설정해준다.
filter_value = np.array([[(100,img_shape[0]),
(450,320),
(550,320),
(img_shape[1]-20, img_shape[0])]], dtype = np.int32) # 정수 자료형
cv2.fillPoly(mask,filter_value, i_mask_color)
plt.imshow(mask, cmap = "gray")
plt.show()
내부에 메소드 이용해서 해보았다. (블로그)
car2.py
2) 정석적으로 해보기
메일
경계선 만들고 -> 자르기 (o)
자르기 -> 경계선 만들기 (x) 자른 부분까지 경계선이 생긴다.
ex6 -> 동영상의 라인까지 인식할 수 있다.
https://medium.com/@mrhwick/simple-lane-detection-with-opencv-bfeb6ae54ec0
medium.com
'Robot > 로봇기업' 카테고리의 다른 글
취업 (0) | 2022.03.10 |
---|---|
[파이썬] DAY15 네트워크 (0) | 2022.02.08 |
[파이썬] DAY15 openCV 이미지 출력 수정하기 (0) | 2022.02.08 |