Tracing RGB dengan OpenCV

Posted: January 27, 2013 by Iman Rahmansyah Tayibnapis in C++, openCV

Tracing RGB  di sini maksudnya adalah penelusuran suatu pixel warna merah, hijau,, biru (RGB) dari suatu objek yang dilihat oleh kamera. Pada penelitan smart health diagnostic digital camera, tracing RGB merupakan dasar untuk mengetahui detak jantung manusia dari perubahan pixel warna pada wajah pengguna.

Untuk dapat melakukan pemrograman  tracing RGB dapat dilakukan dengan menggunakan  library OpenCV di Visual Studio C++. Langkah awal adalah mendapatkan gambar wajah pengguna dengan cara yg diposting sebelumnya. Kedua, gunakan fungsi pemisah warna RGB. Ketiga, gunakan histogram Counter untuk menghitung dan penelusuran pixel dari amsing-masing warna.

berikut contoh potongan program yang kami buat :

 


void histo( Mat objekROI)
{

	Mat src;
	/// Load image
	src = objekROI;
	if( !src.data )
	 return ;

	for(int j=1;j<10;j++){
	  grafik.col(j*max_data/10) = Scalar(255,255,255);
	}
	for(int j=1;j<10;j++){
	  grafik.row(j*batas_atas_grafik/10) = Scalar(255,255,255);
	  stringstream post;
	  post<<batas_atas_grafik-j*batas_atas_grafik/10;
	  putText(grafik,post.str(),Point(2,j*batas_atas_grafik/10),1,1.2,Scalar(255,255,255),3);
	}

	// Separate the image in 3 places ( B, G and R )
	vector<Mat> bgr_planes(3);
	split( src, bgr_planes );

	// Get mean of each R,G,B image
	float meanR = mean(bgr_planes[2]).val[0];
	float meanG = mean(bgr_planes[1]).val[0];
	float meanB = mean(bgr_planes[0]).val[0];
    float previous_mean_green = meanG;

	if(i*skala<max_data){
		cout<<(int)firstface.width<<"x"<<(int)firstface.height;
		// Show R,G,B mean
	    printf("R %3.3f  G %3.3f  B %3.3f  ",meanR,meanG,meanB);

		// Save xit value
		xit.at<Vec3f>(0,i)[2] = meanR;
		xit.at<Vec3f>(0,i)[1] = meanG;
		xit.at<Vec3f>(0,i)[0] = meanB;

		// draw graphic of the RAW Image - unnormalized
		line( grafik, Point( i,batas_atas_grafik-meanR*skala) ,Point((i+1),(batas_atas_grafik+2)-meanR*skala),Scalar( 0, 0, 255), 1, 8, 0 );
		line( grafik, Point( i,batas_atas_grafik-meanG*skala) ,Point((i+1),(batas_atas_grafik+2)-meanG*skala),Scalar( 0, 255, 0), 1, 8, 0 );
		line( grafik, Point( i,batas_atas_grafik-meanB*skala) ,Point((i+1),(batas_atas_grafik+2)-meanB*skala),Scalar( 255, 0, 0), 1, 8, 0 );

		i++;
		cout<<"i:"<<i;
	}
	else if(i*skala==max_data) {
		normalizing_signal();
	}
	namedWindow("Raw RGB traces");
	imshow("Raw RGB traces",grafik);
}

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s