Opencv 정보 ④
기본적으로 공식 문서를 확인하면서 물건.
메모 정보
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치화를 어느 정도 사용할 수 없으면, 윤곽 검출은 힘들다고 생각했습니다.
공식 문서는 신
Reference
이 문제에 관하여(Opencv 정보 ④), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/bobrock/items/b508a9407026f8783381텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)