Anda di halaman 1dari 4

#include <iostream> //file header untuk proses input dan output.

#include <opencv\cv.h> //file header yang merupakan fungsi-fungsi utama


#include <opencv\highgui.h>//liblary pengolahan citra dari OpenCV

using namespace std;//untuk mendeklarasikan/ memberitahukan kepada compiler bahwa kita
akan menggunakan semua fungsi/class/file yang terdapat dalam namespace std

IplImage* DrawHistogram(CvHistogram *hist, float scaleX=1, float scaleY=1)
{
float histMax = 0;
cvGetMinMaxHistValue(hist, 0, &histMax, 0, 0); // fungsi ini untuk menggambar histogram di
dalam window yang akan muncul nantinya..

IplImage* imgHist = cvCreateImage(cvSize(256*1,64*1), 8 ,1);// 256 = nilai warna dari 0-255 =
256 (mulai dari 0) 64 = mencakup 64 bit warna

cvZero(imgHist);

for(int i=0;i<255;i++)
{
float histValue = cvQueryHistValue_1D(hist, i);
float nextValue = cvQueryHistValue_1D(hist, i+1);// baris ini menjelaskan tentang proses nilai
dari warna, karena i=0, i<255, i++

berarti nilai "i" ditambah sampai berjumlah 255 tidak lebih dari 255.

CvPoint pt1 = cvPoint(i*1, 64*1);
CvPoint pt2 = cvPoint(i*1+1, 64*1);
CvPoint pt3 = cvPoint(i*1+1,int(64-nextValue*64/histMax )*1);
CvPoint pt4 = cvPoint(i*1,int(64-histValue*64/histMax)*1);
// kode untuk mempersiapkan bagian window (kotak) histogramnya, jadi disetting ukuran
windowsnya berapa kali berapa, trus nilai2 dari histogram yang akan diisi setelah buka gambar
itu disiapkan dulu tempatnya..

int numPts = 5;
CvPoint pts[] = {pt1, pt2, pt3, pt4, pt1};

cvFillConvexPoly(imgHist, pts, numPts, cvScalar(255)); // diunakan untuk mengisi warna dari
diagramnya nanti jadi nanti diagramnya ada fill (warna isinya)
}

return imgHist;//merupakan fungsi yang disediakan MATLAB untuk membuat histogram dari
gambar
}

int main() //fungsi utama dr sebuah kode Bahasa C yg akan memberikan nilai balik menurut type
dan datanya, makany di bagian belakangnya dri beri perintah return.
{

IplImage* img = cvLoadImage("dante.jpg");// file gambar yang dibaca disimpan dalam satu
folder dengan projectnya
int numBins = 256;
float range[] = {0,255};//kisaran warna dari 0-255
float *ranges[] = {range};

CvHistogram *hist = cvCreateHist(1, &numBins, CV_HIST_ARRAY, ranges, 1);
cvClearHist(hist); // perintah untuk menggambar garis histogramnya
IplImage* imgR = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);//source code tersebut
berfungsi untuk mengconvert warna gambar normal menjadi red.
IplImage* imgG = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);//source code tersebut
berfungsi untuk mengconvert warna gambar normal menjadi green.
IplImage* imgB = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1); //source code tersebut
berfungsi untuk mengconvert warna gambar normal menjadi biru.
//Maksud dari IPL_DEPTH_8U adalah tiap-tiap piksel bernilai 8 bit,sementara angka 1
setelahnya itu bermakna tiap-tiap piksel hanya terdiri dari sebuah channel

cvSplit(img, imgB, imgG, imgR, NULL); // memisahkan warna dari gambar (img) ke warna2
yang mau dihitung imgB = Blue, imgG = Green, imgR = Red

cvCalcHist(&imgR, hist, 0, 0);
IplImage* imgHistRed = DrawHistogram(hist);
cvClearHist(hist);

cvCalcHist(&imgG, hist, 0, 0);
IplImage* imgHistGreen = DrawHistogram(hist);
cvClearHist(hist);

cvCalcHist(&imgB, hist, 0, 0);
IplImage* imgHistBlue = DrawHistogram(hist);
cvClearHist(hist);
// masing-masing warna dari red, green, blue mempunyai window sendiri.

cvShowImage("Image", img);
cvShowImage("Red", imgHistRed);
cvShowImage("Green", imgHistGreen);
cvShowImage("Blue", imgHistBlue); //source code tersebut berfungsi untuk menampilkan hasil
dari gambar yang telah diconvert.

cvWaitKey(0);//Baris ini untuk menunggu suatu Keystroke selama milidetik sejumlah parameter
yang diisikan. Jika tidak ada Keystroke maka aplikasi akan dilanjutkan.
return 0; //menyatakan program exit secara normal
}