바뀜

2,904 바이트 추가됨 ,  2021년 10월 7일 (목) 17:15
편집 요약 없음
102번째 줄: 102번째 줄:  
</syntaxhighlight>
 
</syntaxhighlight>
 
|-
 
|-
|영상 내보내기
+
|영상 보여주기
 
|처리한 영상을 img에 담으면 각 프레임마다
 
|처리한 영상을 img에 담으면 각 프레임마다
 
'창이름'이라는 창을 띄워 매끄러운 영상으로 보여준다.
 
'창이름'이라는 창을 띄워 매끄러운 영상으로 보여준다.
 +
 +
 +
print함수로 코드 중간을 점검하듯, imshow로 점검한다.
 
|<syntaxhighlight lang="python">
 
|<syntaxhighlight lang="python">
 
cv2.imshow('창이름', img)
 
cv2.imshow('창이름', img)
179번째 줄: 182번째 줄:  
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
 
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
 
</syntaxhighlight>[카메라 외의 영상은 이렇게 안줄여진다고 하던데...]
 
</syntaxhighlight>[카메라 외의 영상은 이렇게 안줄여진다고 하던데...]
 +
 +
=== 처리 효율 ===
 +
{| class="wikitable"
 +
!의도
 +
!설명
 +
!방법
 +
|-
 +
|이미지 형태 변환
 +
|원본 이미지를 사용하면 처리량이 많아져 계산이 오래걸린다.
 +
옵션은 굉장히 다양한데, 자주 쓰이는 것만 모아보았다.
 +
{| class="wikitable"
 +
!옵션
 +
!설명
 +
|-
 +
|cv2.COLOR_BGR2GRAY
 +
|BGR 컬러 이미지를 그레이스케일로
 +
|-
 +
|cv2.COLOR_BGR2RGB
 +
|BGR을 RGB로 변환
 +
|-
 +
|
 +
|
 +
|}
 +
|<syntaxhighlight lang="python">
 +
cov_img = cv2.cvtColor(img, cv2.COLOR_옵션)  # 원본 img와 옵션을 받아 형태를 변환한다.
 +
</syntaxhighlight>
 +
|-
 +
|바이너리
 +
|이미지를 검은색과 흰색만으로 표현한 것.
 +
그레이스케일보다 더 빠른 처리를 위해서 + 피사체의 모양을 더 명확하게 파악하기 위해.
 +
|<syntaxhighlight lang="python">
 +
ret, cov_img = cv2.threshold(img, 경계값, 255, cv2.THRESH_BINARY)
 +
# ret엔 트레시홀딩에 사용한 경계값이 나오니, 버리는 값이다.
 +
 +
ret, cov_img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)  # 원본 img와 옵션을 받아 형태를 변환한다.
 +
# ret에 사용된 경계값이 담기니, 이 ret은 쓸만할지도..
 +
</syntaxhighlight>파이프 문자로 연결한 오츠 옵션은 오츠의 알고리즘을 통해 경계값을 자동으로 설정하게 하기 위한 것이다.
 +
 +
오츠의 알고리즘을 사용하면 모든 경우의 수에 대한 경계값을 조사하기 때문에 느리다.
 +
|-
 +
|적응형 트레숄드
 +
|그러나.. 조명이 일정하니 않은 경우엔 하나의 경계값을 전체에 적용하면 일부가 타버리는 경우가 있다.
 +
때문에 여러 영역에 따라 달리 적용해주어야 한다.
 +
|<syntaxhighlight lang="python">
 +
block_size = 9  # 블록사이즈
 +
c = 5  # 차감상수
 +
 +
cov_img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, block_size, c)
 +
</syntaxhighlight>적응형에서 가우시안 분포를 사용해 정리하는 편이 노이즈도 적고 깨끗한 이미지를 얻을 수 있다.
 +
|}
 +
 +
=== 이미지 준비 ===
 +
{| class="wikitable"
 +
!의도
 +
!설명
 +
!방법
 +
|-
 +
|노멀라이즈
 +
|정규화 하면 흐릿했던 이미지의 격차를 벌려 선명한 이미지를 얻을 수 있다.
 +
|<syntaxhighlight lang="python">
 +
norm = cv2.normalize(img, None, 0, 255, cv2.NORM_MINMAX)  # 구간 노멀라이즈를 실행한다.
 +
</syntaxhighlight>
 +
|-
 +
|이퀄라이즈
 +
|중심에서 멀리 떨어진 값은 노멀라이즈를 적용해도 여전히 흐리다.
 +
노멀라이즈 후 누적값을 전체 개수로 나누어 나온 값을 원래 값에 매핑.
 +
 +
각각의 값이 전체 분포에 차지하는 비중에 따라 재분배하여 명암대비에 효과적.
 +
 +
빛이 적어 윤곽선이 흐릿한 부분을 살려준다.
 +
|<syntaxhighlight lang="python">
 +
img = cv2.equalizeHist(img)
 +
</syntaxhighlight>
 +
|}
    
= 꾸미기 =
 
= 꾸미기 =
익명 사용자