Opencv 정보 ④

Opencv3 시스템에 대한 메모

기본적으로 공식 문서를 확인하면서 물건.

메모 정보
Opencv에 대해 ①
Opencv 소개②
Opencv 정보 ③

환경・사용 화상은 전회와 동일.

①2치화(단순한 임계치 처리)



한마디로 흑백 이미지
『0』이나『1』하에서 이미지를 나타낸다.

opencv.ipynb
import cv2
import numpy as np

cap_dir = niku.png
img = cv2.imread(cap_dir,0)
threshold = 100
ret,th1 = cv2.threshold(img,threshold,255,cv2.THRESH_BINARY)
ret,th2 = cv2.threshold(img,threshold,255,cv2.THRESH_BINARY_INV)
ret,th3 = cv2.threshold(img,threshold,255,cv2.THRESH_TRUNC)
ret,th4 = cv2.threshold(img,threshold,255,cv2.THRESH_TOZERO)
ret,th5 = cv2.threshold(img,threshold,255,cv2.THRESH_TOZERO_INV)

cv2.imshow("THRESH_BINARY",th1)
cv2.imshow("THRESH_BINARY_INV",th2)
cv2.imshow("THRESH_TRUNC",th3)
cv2.imshow("THRESH_TOZERO",th4)
cv2.imshow("THRESH_TOZERO_INV",th5)

cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.threshold (제 1 인수, 제 2 인수, 제 3 인수, 제 4 인수)

제1 인수:입력 화상(그레이 스케일 화상)
두 번째 인수: 임계값
제3 인수:최대치(입력 화상의 수치가 0~255이므로 255로 좋을까 생각한다)
네 번째 인수: 임계값 처리 플래그

cv2.threshold는 두 값을 반환하므로ret,th1 = cv2.threshold(img,threshold,255,cv2.THRESH_BINARY)th1측에 처리된 후의 화상(이진 화상)이 격납됩니다.

임계값을 100으로 하고 있는 경우는 이하와 같은 화상이 된다.



임계값을 150으로 하고 있는 경우는 이하와 같은 화상이 된다.



상규의 화상은 알기 어렵다고 생각하므로 여기 에 공식의 2치화 화상이 있으므로 확인해 주세요.

윤곽 검출을 실시한다면 필수라고 생각됩니다.

덧붙여서 컬러 이미지에서도 시도해 보았습니다만 처리는 할 수 있습니다만 아마 사용할 수 없다고 생각합니다.

②오쓰의 2치화



opencv.ipynb
img = cv2.imread(cap_dir,0)
ret2,img_o = cv2.threshold(img,0,255,cv2.THRESH_OTSU)

cv2.imshow("niku",img)
cv2.imshow("niku_othu",img_o)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.threshold (제 1 인수, 제 2 인수, 제 3 인수, 제 4 인수)

제1 인수:입력 화상(그레이 스케일 화상)
두 번째 인수: 임계값
제3 인수:최대치(입력 화상의 수치가 0~255이므로 255로 좋을까 생각한다)
네 번째 인수 : 임계 값 처리 플래그 (여기서는 cv2.THRESH_OTSU)

임계값에 관해서는 0으로 한다. 와의 공식 표기가 있습니다.

솔직히 어떤 상황에서 오쓰의 기술을 사용하는지 잘 모릅니다.
이에 관해서는 모 e-learning에서 만진 정도입니다.

실제로 사용해 본 느낌으로 가면 threshold(임계치)가 자동 변화하므로
배경색이 단색이고 입자 등의 윤곽 검출을하기에는 편했습니다.

다만, 상기는 확인 화상이 안정되어 있는 것이 전제이므로
안정되어 있지 않으면 꽤 이상한 윤곽 검출이 되었습니다.

그래서 THRESH_BINARY를 기본값이라고 생각합니다.
처리하고 싶은 화상에 따라 변경해 가는 것이 길이라고 느꼈습니다.



③이진화 + 트랙바



opencv.ipynb

def onTrackbar(position):
    global threshold
    threshold = position

cv2.namedWindow("img")
threshold = 100
cv2.createTrackbar("threshold","img",threshold,255,onTrackbar)

while True:
    ret,img_th = cv2.threshold(img,threshold,255,cv2.THRESH_BINARY)
    cv2.imshow("img",img_th)
    if cv2.waitKey(10) == 27:
        break
cv2.destroyAllWindows()


cv2.createTrackbar (제 1 인수, 제 2 인수, 제 3 인수, 제 4 인수, 제 5 인수)
첫 번째 인수: 트랙바 이름
두 번째 인수: 첫 번째 인수로 지정한 트랙바가 표시되는 창 이름
세 번째 인수: 트랙바의 기본값
네 번째 인수 : 트랙 바의 가능한 최대 값
다섯 번째 인수 : 트랙 바의 위치가 변경 될 때마다 호출되는 콜백 함수

다섯 번째 인수의 경우 def 함수

상기 cv2.nameWindow("img")의 기재가 없으면 트랙 바는 표시되지 않으므로 주의





트랙 바에서 임계 값을 변경하여 이미지의 변화를 볼 수있어 재미 있습니다.
2치화의 인수를 바꾸어도 즐길 수 있습니다.

④정리



아마 2치화를 어느 정도 사용할 수 없으면, 윤곽 검출은 힘들다고 생각했습니다.
공식 문서는 신

좋은 웹페이지 즐겨찾기