(Ders 26) OpenCV ile Fareyle Çizgi Çizme (C++)

(Ders 27) OpenCV ile Fareyle Dikdörtgen Çizme (C++)
(Ders 38) OpenCV ile Kameradaki Görüntüyü Sınırsız Yakınlaştırma (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 çizgi çiziyoruz.
Siz fareyle sol tıklayınca ilk koordinat kaydediliyor.
Fareyi sürüklemeye başlayınca geçiçi çizgi çiziliyor.
Sol tuşu bırakınca da gerçek çizgi ç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
		line(arkaPlan, Point(ilkKoordinat.x, ilkKoordinat.y), Point(sonKoordinat.x, sonKoordinat.y), Scalar(255, 191, 0), 4, 8, 0);
		arkaPlan = arkaPlan + resim;
		imshow("Çizgi Çizme", arkaPlan);
	}

	//farenin sol tuşunu bırakınca
	if (event == EVENT_LBUTTONUP)
	{
		try {
			//aynı noktaya tıklayıp bırakınca çizgi çizmiyor
			if (!(ilkKoordinat.x == sonKoordinat.x && ilkKoordinat.y == sonKoordinat.y))
			{
				// çizgi çizilirken siyah arkaplan oluşturmak için kullanılıyor
				Mat arkaPlan = Mat::zeros(resim.size(), CV_8UC3);
				line(resim, Point(ilkKoordinat.x, ilkKoordinat.y), Point(sonKoordinat.x, sonKoordinat.y), Scalar(255, 191, 0), 4, 8, 0);
				imshow("Çizgi Ç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("Çizgi Çizme", CV_WINDOW_AUTOSIZE);
		imshow("Çizgi Çizme", resim);

		setMouseCallback("Çizgi Ç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 27) OpenCV ile Fareyle Dikdörtgen Çizme (C++)
(Ders 38) OpenCV ile Kameradaki Görüntüyü Sınırsız Yakınlaştırma (C++)