반응형
이번에는 좀처럼 찾기 힘든 이미지의 색성분을 추출하여 컬러 히스토그램 plot을 그리는 예제를 소개해드리려고 합니다. 보통 calcHist를 한 후 RGB형태로만 그래프를 그리는 예제는 많이 보셨을텐데 이포스팅에는 여러색깔을 본인의 입맛에 맞게 막대 그래프로 표현하는 예제를 소개하겠습니다.
이미지 불러오고 HSV로 색상변경
mport cv2
import numpy as np
img = cv2.imread('2_TEST.jpg') #이미지 불러오기
#img = cv2.imread('gogo22.jpg')
img=cv2.resize(img,(320,200)) #이미지사이즈 조정
cv2.imshow("hist2",img)
x= 20 #히스토그램 x 값 범위
img=cv2.cvtColor(img,cv2.COLOR_BGR2HSV) #색 추출을위해 이미지 HSV 색상으로 변경
먼저 테스트할 이미지를 불러온 뒤 색추출을 위해 cvtColor함수로 RGB이미지를 HSV로 색상을 변경 합니다. 제가 이번에 사용한 원본 이미지와 변경 후 결과는 다음과 같습니다.
이미지 히스토그램 계산
img=cv2.calcHist(img,[0],None,[x],[0,180]) #이미지 히스토그램 계산
imgBuf=np.zeros((x,1,3),dtype="uint8") # 히스토그램 그리기위한 버퍼
imgHistResult = np.zeros((200,320,3),dtype="uint8") #히스토그램을 그릴 이미지배열
imgHistResult.fill(255)
rows,cols, channels = imgHistResult.shape # row,col 값 구하기위함
for i in range(0,x):
imgBuf[i,0] = ((i*180/x) , 255,255 ) #버퍼에 지정한 x 만큼의 색상정보를 H 에 저장
binW= int(cols/x) #색상 히스토그램 너비값
imgBuf=cv2.cvtColor(imgBuf, cv2.COLOR_HSV2BGR) #HSV 를 BGR로 변환
HSV로 색상을 변경한 이미지를 calcHist로 히스토그램을 계산합니다. 그리고 최종 히스토그램 색상 추출 그래프 결과를 위한 계산식을 정의 합니다. 여기 변수에서 막대그래프의 범위와 색깔 범위등을 변경 할 수 있습니다.
히스토그램 색상 추출 그래프 그리기
for i in range(0, x):
setY = int(img[i,0]*rows/255) #이미지 y값 을위한 변수
#print(int(imgBuf[i,0][0]),int(imgBuf[i,0][1]),int(imgBuf[i,0][2]))
cv2.rectangle(imgHistResult, ((i*binW),rows),((i+1)*binW,rows-setY),(int(imgBuf[i,0][0]),int(imgBuf[i,0][1]),int(imgBuf[i,0][2])),-1,8) #히스토그램 색깔별 출력 x에 따라 범위는 다름
cv2.imshow("Hist", imgHistResult)
cv2.rectangle함수로 앞에 정의한 변수를 사용해 막대그래프를 표현합니다. 색상별로 어떤 색깔이 많이 포함되어 있는지를 한눈에 확인 할 수 있습니다.
잘 추출되었네요. 이상으로 파이썬 opencv로 colorHistogram을 표현하는 예제를 마치겠습니다.
반응형
'개발' 카테고리의 다른 글
파이썬 opencv를 이용한 multi tracking 예제 (Blob, 객체 감지) (0) | 2022.05.26 |
---|---|
Keras Conv2d CNN 간단한 예제 ( Mnist data) (0) | 2022.05.24 |
파이썬 logistic regression 그래프 예제 (without sklearn) (0) | 2022.05.19 |
(ETL) TALEND OPEN STUDIO DB 데이터 엑셀로 출력하기(MSSQL) (0) | 2022.05.18 |
sklearn 사이킷런 SVM모델 그래프 그리기 (margin, decision boundary) (0) | 2022.05.16 |
댓글