히스토그램 코드로 확인

2020. 9. 28. 22:07Open CV

 

OpenCV의 히스토그램에 대한 설명은 지난 글에서 작성이 되었는데,

이번에는 간단히 코드로 직접 확인을 해보자.

 

각자 사진을 1개씩 준비해 주시고~ cvLoadImage의 경로를 사진이 위치한 경로로 바꿔 주세요.

#include <opencv\cv.h>

#include <opencv\highgui.h>



void main () {

IplImage*src_img=0;

IplImage*imgHistogram=0;



int bins = 256;

int sizes[] = {bins};



float max_value = 0, min_value = 0;



//ranges-grayscale 0 to 255

float xranges[] = {0, 255};

float*ranges[] = {xranges};



src_img=cvLoadImage("C:/Users/Documents/Visual Studio 2010/Projects/openCV test/openCV test/images/tx.jpg",-1);

imgHistogram = cvCreateImage( cvGetSize(src_img), IPL_DEPTH_8U, 1);



cvNamedWindow("Original", CV_WINDOW_AUTOSIZE);

cvNamedWindow("Histo", CV_WINDOW_AUTOSIZE);



CvHistogram*histo = cvCreateHist( 1, sizes, CV_HIST_ARRAY, ranges, 1);

cvCalcHist(&src_img, histo);



cvGetMinMaxHistValue( histo, &min_value, &max_value);

cvConvertScale( histo->bins, histo->bins, ((double) imgHistogram->height)/max_value, 0);

cvSet( imgHistogram, cvScalarAll(255), 0);



int bandwidth = cvRound((double)imgHistogram->width/bins);

for(int i=0; i<bins; i++)

{

int val=cvRound(cvGetReal1D(histo->bins, i));

	cvRectangle(imgHistogram, cvPoint(i*bandwidth, imgHistogram->height), 

		cvPoint((i+1)*bandwidth, imgHistogram->height - val),

		cvScalarAll(0),1);

}

cvShowImage("Original", src_img);

cvShowImage("Histo", imgHistogram);



cvWaitKey();



cvReleaseImage(&src_img);

cvReleaseImage(&imgHistogram);

}

 

 이렇게 되면 결과 값은 아래와 같이 나오는데, 원본 이미지와 함께 팝업이 뜰겁니다.

<히스토그램 결과 값>