OpenCV를 사용하여 color histogram 계산해보겠다.
먼저 OpenCV에는 cv2.calcHist 라는 함수가 있다. 간단하게 이 함수에 대해서 리뷰해보면 다음과 같다.
cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])
images - 히스토그램을 계산하기 위한 그림 배열이다. python에서 리스트처럼 넣을 수 있다. [image].
channels - 우리가 계산하고자 하는 히스토그램의 인덱스들을 나타내는 리스트이다. 만약 grayscale의 이미지를 계산하려면 [0], Red, Green, Blue 채널을 계산하려면 [0, 1, 2]로 사용할 수 있다.
mask - 마스크 옵션이다. 이미지 전체를 사용할 경우 "None"으로 사용한다. 만약 특정한 이미지 내의 히스토그램영역을 사용하려면 마스크를 생성해야한다.
histSize - bin의 개수를 나타낸다.
ranges - 픽셀값의 범위를 결정한다. 보통 [0, 256]로 각 채널의 범위를 정한다.
http://docs.opencv.org/modules/imgproc/doc/histograms.html
여기에 자세한 설명이 나와있다.
histogram.py
먼저 기본이미지를 불러오자
main1.jpg <-이미지 이름 (같은 폴더 내에 존재해야한다)
>python histogram.py -i main1.jpg
이미지가 잘 뜨는 것을 확인할 수 있다.
line 6-8 : 윈도우 커멘드 창에서 이미지를 입력할 수 있도록 설정한다.
line 10-12 : 커멘드에서 받은 이미지를 image에 저장하고 출력한다. line 12는 키보트에 특정한 입력이 있을 때까지 무한정 대기한다.
Grayscale 계산
line 1-2 : 이미지를 gray로 변환하고 이미지를 보여준다.
line 3 : grayscale의 변환된 이미지를 히스토그램으로 계산한다. 위에서 cv2.calHist() 함수를 간단하게 설명했다. grayscale의 이미지는 오직 하나의 채널만 가지고 있기 때문에 채널 리스트를 [0]로 한다. bin의 개수와 픽셀 값의 범위는 256으로 한다.
line 4-10 : figure 값을 설정하고 화면에 나타낸다.
커멘드 창에서 다음과 같이 입력하면
>python histogram.py -i main1.jpg
Figure1을 보면 x축은 0~256 의 bins로 되어 있다. y축은 각각의 bins에 매치되는 픽셀의 수 이다. 주요한 점은 bins의 약 80~100bins의 값이 높은 것을 보면 회색으로 변하는 곳이 많다는 것을 알 수 있고, 250쪽에서 값들이 꽤 있는 것을 보면 이미지에 흰색도 조금 있다는 생각을 할 수 있다.
Color Histgram 계산
이번에는 이미지에 있는 세가지 colors 에 대한 히스토그램을 계산하겠다.
line 1 : cv2.split() 함수는 BGR이미지의 채널 값을 나눌 수 있다. 예를 들어 >>> b,g,r = cv2.split(img) 와 같이 사용 할 수 있다.
line 9-14 : 채널과 colors를 for루프를 돌면서 히스토그램을 생성하고 features 리스트에 추가한다. color histogram을 사용하여 colors features vector 값을 생성할 수 있다.
위와 같은 plot을 생성할 수 있다.
컬러 히스토그램의 값에 대해서 살펴 보면 140bin 의 값은 이미지 배경이 파란색임을 알 수 있다. red와 green도 높은 값을 가지고 있는데 아마도 이미지에서 노란색 값이 꽤 높음을 볼 수 있었다. 아마 그 값을 나타내는 것이라고 생각할 수 있다.
'IT > Python' 카테고리의 다른 글
pandas 기초, series (0) | 2018.02.20 |
---|---|
윈도우환경 Docker에서 Tensorflow 사용하기 (0) | 2016.06.22 |
[자연어처리] 간단하게 만든 긍정, 부정, 중립 분류 using naive bayes classifier (8) | 2014.12.19 |
[자연어처리] a little spell-checker using string edit distance (0) | 2014.12.19 |
파일을 만들기 전에 파일 존재 확인하는 코드 (0) | 2014.12.19 |