(Ders 41) Open CV ile Webcam’den Renk Takibi (C++)

(Ders 42) OpenCV de Haar Cascade ile Yüz Tanıma (C++)

Size faydalı olduysa, sosyal medyada paylaşarak bize destek olun. Teşekkürler.

Hızlandırılmış Video:)


Orjinal Video:

Program Kodu:

#include 

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/core/core.hpp"

using namespace std;
using namespace cv;


int main()
{
	VideoCapture video(0);
	if (!video.isOpened())
	{
		cout << "Webcam Acilamadi";
		system("pause");
		return -1;
	}
	namedWindow("Kontrol Paneli", CV_WINDOW_AUTOSIZE);

	//HSV formatinda bu degerler kirmiziyi ifade ediyor
	int HMinDeg = 170;
	int HMaxDeg = 179;
	int SMinDeg = 150;
	int SMaxDeg = 255;
	int VMinDeg = 60;
	int VMaxDeg = 255;

	createTrackbar("minH", "Kontrol Paneli", &HMinDeg, 179);
	createTrackbar("maxH", "Kontrol Paneli", &HMaxDeg, 179);

	createTrackbar("minS", "Kontrol Paneli", &SMinDeg, 255);
	createTrackbar("maxS", "Kontrol Paneli", &SMaxDeg, 255);

	createTrackbar("minV", "Kontrol Paneli", &VMinDeg, 255);
	createTrackbar("maxV", "Kontrol Paneli", &VMaxDeg, 255);

	int eskiX = -1;
	int eskiY = -1;

	//siyah arkapilan
	Mat arkaPlan;

	video.read(arkaPlan);

	//zeros yani 0(siyah renk demek) lar matrisi olusturuldu
	//cizgiler bu cizgiResim uzerine cizlecek
	Mat cizgiResim = Mat::zeros(arkaPlan.size(), CV_8UC3);

	while (true)
	{
		Mat yeniFrame;
		bool bSuccess = video.read(yeniFrame);
		if (!bSuccess)
		{
			cout << "Yeni Frame Yuklenemedi" << endl;
			system("pause");
			break;
		}


		Mat HSVres;

		//renk ayirma(yani secme) isleminde BGR formati HSV formatindan daha basarili oldugu icin
		//Webcam'den alinan BGR formatindaki goruntu HSV formatina donusturuldu
		cvtColor(yeniFrame, HSVres, COLOR_BGR2HSV);


		Mat isres;

		//araliktaki degerler 1 diger degerlere 0 veriyor
		inRange(HSVres, Scalar(HMinDeg, SMinDeg, VMinDeg), Scalar(HMaxDeg, SMaxDeg, VMaxDeg), isres);

#pragma region resimde olusan gurultu engelleniyor

		//morfolojik acma yapiliyor
		//resimdeki beyaz gurultuler engelleniyor
		//once asindirma sonra genisletme yapiliyor
		erode(isres, isres, getStructuringElement(MORPH_ELLIPSE, Size(5, 5)));
		dilate(isres, isres, getStructuringElement(MORPH_ELLIPSE, Size(5, 5)));

		//morfolojik kapanma yapiliyor
		//beyaz olan nesnelerin arasindaki kucuk siyah holler temizleniyor
		//once genisletme sonra asindirma yapiliyor
		dilate(isres, isres, getStructuringElement(MORPH_ELLIPSE, Size(5, 5)));
		erode(isres, isres, getStructuringElement(MORPH_ELLIPSE, Size(5, 5)));

#pragma endregion

		//siyah beyaz bir resimdeki beyaz renklerin konumunu bulur
		//bu konumlar konum degiskenine atandi
		Moments konum = moments(isres);

		//piksel degerleri 1 olan piksellerin y eksenindeki konumu bulundu
		double yEksen = konum.m01;
		//piksel degerleri 1 olan piksellerin x eksenindeki konumu bulundu
		double xEksen = konum.m10;
		//degeri 1 olan piksellerin alani bulundu
		double alan = konum.m00;

		if (alan > 100000)
		{
			int yeniX = xEksen / alan;
			int yeniY = yEksen / alan;

			//bu degerler 0 dan buyukse
			if (eskiX >= 0 && eskiY >= 0 && yeniX >= 0 && yeniY >= 0)
			{
				//1. parametredeki konumdan 2. parametredeki konuma
				//3. parametrede belirtilen kirmizi renkte
				//4. parametrede belirtilen kalinlikta yani 2 piksel boyutunda
				//Siyah uzerine (cizgiResim) cizgi cizer
				line(cizgiResim, Point(yeniX, yeniY), Point(eskiX, eskiY), Scalar(0, 0, 255), 2);
			}

			//son bulunan koordinatlar saklanmak icin degiskenlere ataniyor
			eskiX = yeniX;
			eskiY = yeniY;
		}

		imshow("Siyah Beyaz Resim", isres);

		//webcam'deki goruntuye cizgiler eklendi
		yeniFrame = yeniFrame + cizgiResim;

		imshow("Orjinal", yeniFrame);

		if (waitKey(100) == 27)
		{
			cout << "Kullanici esc ile cikti" << endl;
			break;
		}
	}
	cvDestroyAllWindows();
	system("pause");
	return 0;
}

Size faydalı olduysa, sosyal medyada paylaşarak bize destek olun. Teşekkürler.

(Ders 42) OpenCV de Haar Cascade ile Yüz Tanıma (C++)