Program/OPEN_CV

[Open CV] 기본적인 영상처리 기법 _ 특정 색상 영역 추출

사막여유 2022. 5. 12. 22:10
728x90

 

 < RGB 색 공간에서 녹색 영역 추출 >

TrueColor 영상에서 아래와같이 

Red Green Blue 색상타입만 추출하도록 할 수 있는 기능을 구현해본다.

 

0 < R < 100 , 128 < G < 255 , 0 < B < 100

 

간단히 생각해보면 각각의 픽셀값에 저장되어있는 RGB 성분 중 추출하고자 하는 성분의 값이

상대적으로 또는 절대적으로 높은 픽셀값만 Binary 시키면 될 것 같다.

 

위와 같은 방법도 간간히 사용되지만 원색을 찾을때에는

RGB 보다는 HSV 색 공간에서의 색 추출이 더 많이 사용된다.

 

H는 Hue 성분으로 색상을 표현하므로 H 성분으로 어떤 색을 추출할지 결정한다.

영상에서는 Unsinged Char로 0 ~ 180 으로 표현된다.

S는 Saturation 성분으로 색상의 선명도 ( 순수 색 ) 으로 어느정도 큰 값을 가져줘야한다.마지막으로 V는 밝기 성분으로 밝은 색상인지 어두운 색상인지 구분하는 성분이다.

 

따라서 해당 성분의 조건을 잘 갖춰주면 원하는 색상을 잘 추출할 수 있다.

 

 

위 사진들만 보고 어? RGB가 더 깔끔하게 추출 되는데 왜 HSV 를 더 많이 사용한다고 하지? 라고 의문을 품을 수 있다.하지만영상 획득을 어떻게 했는지에 따라서 RGB의 추출방식이 굉장히 효율적이지 않을 수 있다.

 

출처 :&nbsp;https://velog.io/@redorangeyellowy/ch03-%EA%B8%B0%EB%B3%B8%EC%A0%81%EC%9D%B8-%EC%98%81%EC%83%81-%EC%B2%98%EB%A6%AC-%EA%B8%B0%EB%B2%95-%ED%8A%B9%EC%A0%95-%EC%83%89%EC%83%81-%EC%98%81%EC%97%AD-%EC%B6%94%EC%B6%9C

 

위와같이 영상이 조금이라도 어두워지면 G값을 제대로 추출하지 못하는 경우가 발생한다.

하지만 HSV 에서 V값을 0 ~ 255 로 넓게 설정해준다면 어두운 녹색이든 밝은 녹색이든 모두 추출하게 된다.

 

출처 :&nbsp;https://velog.io/@redorangeyellowy/ch03-%EA%B8%B0%EB%B3%B8%EC%A0%81%EC%9D%B8-%EC%98%81%EC%83%81-%EC%B2%98%EB%A6%AC-%EA%B8%B0%EB%B2%95-%ED%8A%B9%EC%A0%95-%EC%83%89%EC%83%81-%EC%98%81%EC%97%AD-%EC%B6%94%EC%B6%9C

 

위와 같은 작업을 효율적으로 할 수 있게 도와주는 함수들이 몇가지 있다.

 

 - cv2.inRange ( src, lowerb, upperb, dst ) 

특정 범위안에 있는 행렬 원소를 검출하는 함수로

src의 입력영상들중 lower ( 하한값 ) 부터 upper ( 상한값 ) 까지의 픽셀값을 가진 픽셀들을 골라서

dst로 return 해주는 함수이다. ( 범위안에 들어가는 픽셀은 255 , 나머지는 0 )

( Mask Binary 영상 ) 

GrayScale 영상과 TrueColor 영상 모두 사용할 수 있는데

그레이스케일 영상은 사용하기 쉽기때문에 컬러영상 사용법을 알아본다.

 

 

위와같이 RGB or HSV 의 각각의 성분값의 상한값과 하한값을 설정해주어 Binary 시킬 수 있다.

 

 

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

728x90