(Ders 27) OpenCV ile Fareyle Dikdörtgen Çizme (C++)

(Ders 36) OpenCV ile Kameradan Piksel Renk Değerlerini Bulma (C++)
(Ders 26) OpenCV ile Fareyle Çizgi Çizme (C++)

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

Ekran Görüntüsü:

Açıklama:

Bu örnekte resimlerin üzerine fareyle dikdörtgen çiziyoruz.
Siz fareyle sol tıklayınca ilk koordinat kaydediliyor.
Fareyi sürüklemeye başlayınca geçiçi dikdörtgenler çiziliyor.
Sol tuşu bırakınca da gerçek dikdörtgen çiziliyor.

Program Kodu:

#include "opencv2/highgui/highgui.hpp"
#include "iostream" //cout için gerekli
#include <opencv2/imgproc/imgproc.hpp>  //rectangle fonksiyonu için

using namespace std;
using namespace cv;

Mat resim;

Point ilkKoordinat;
Point sonKoordinat;

void fareTakip(int event, int x, int y, int flags, void *kullanici)
{
	//farenin sol tuşuna basınca
	if (event == EVENT_LBUTTONDOWN)
	{
		ilkKoordinat.x = x;
		ilkKoordinat.y = y;
	}

	//farenin sol tuşana basarak sürükleyince
	if (flags== EVENT_FLAG_LBUTTON && event ==EVENT_MOUSEMOVE)
	{
		//burada geçici bir görüntü gösteriliyor
		//gerçek görüntü sol fareyi bırakınca çiziliyor
		sonKoordinat.x = x;
		sonKoordinat.y = y;
		Mat arkaPlan = Mat::zeros(resim.size(), CV_8UC3); //zeros yani 0(siyah renk demek) lar matrisi olusturuldu
		rectangle(arkaPlan, Point(ilkKoordinat.x, ilkKoordinat.y), Point(sonKoordinat.x, sonKoordinat.y), Scalar(255, 191, 0), 4, 8, 0);
		arkaPlan = arkaPlan + resim;
		imshow("Dikdörtgen Çizme", arkaPlan);
	}

	//farenin sol tuşunu bırakınca
	if (event==EVENT_LBUTTONUP)
	{
		try {
			//aynı noktaya tıklayıp bırakınca Dikdörtgen çizmiyor
			if (!(ilkKoordinat.x == sonKoordinat.x && ilkKoordinat.y == sonKoordinat.y))
			{		
				// dikdörtgen çizilirken siyah arkaplan oluşturmak için kullanılıyor
				Mat arkaPlan = Mat::zeros(resim.size(), CV_8UC3);
				rectangle(resim, Point(ilkKoordinat.x, ilkKoordinat.y), Point(sonKoordinat.x, sonKoordinat.y), Scalar(255, 191, 0), 4, 8, 0);
				imshow("Dikdörtgen Çizme", resim);
			}
		}
		catch (...)
		{
			system("cls");
			cout << "<-----------------Hata olustu.----------------->" << endl;
			cout << "<----------Pencerenin disina cikildi.---------->" << endl << endl;
		}
	}
}

int main()
{
	resim = imread("resim.jpg", CV_LOAD_IMAGE_COLOR);
	if (resim.empty())
	{
		cout << "Resim acilamadi" << endl;
	}
	else
	{	
		namedWindow("Dikdörtgen Çizme", CV_WINDOW_AUTOSIZE); 
		imshow("Dikdörtgen Çizme", resim);

		setMouseCallback("Dikdörtgen Çizme", fareTakip, NULL);

		waitKey(0); //bir tuşa basmayı bekliyor
		destroyAllWindows();//pencereler kapandı
	}
	return 0;
}

 

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

(Ders 36) OpenCV ile Kameradan Piksel Renk Değerlerini Bulma (C++)
(Ders 26) OpenCV ile Fareyle Çizgi Çizme (C++)