(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:

[code]
#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;
}
[/code]

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++)