Hoşgeldin Misafir

OpenCV ile Fare Yardımıyla Çizim (C++)

SurHan

28 Kas 2017
4,186 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
opencv-fareyle-cizim.png


-Açıklama:--


Önceki derslerimizde fare koordinatlarını bulmayı ve resmin piksellerini değiştirmeyi öğrenmiştik.-
Bu iki bilgiyi birleştirerek resmin üzerine fareyle (mause) çizim yapma programı yaptık.-
Biraz romantik olalım dedik:)-

--Program Kodları:--
-

Kod:
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <cstdlib>
 
using namespace std;
using namespace cv;
 
cv::Mat resim = cv::imread("resim.jpg");
int cizgiKalinligi = 4;
 
void ciz(int y, int x)
{
    resim.at<cv::Vec3b>(x, y)[0] = 0; //mavi
    resim.at<cv::Vec3b>(x, y)[1] = 0; //yeşil
    resim.at<cv::Vec3b>(x, y)[2] = 255; //kırmızı
    cv::imshow("Kare", resim);
}
void fareTakip(int event, int x, int y, int flags, void *kullanici)
{
    //farenin sol tuşuna basarak sürüklendiğinde çizim yapıyor veya
    //farenin sol tuşuna tıklandığında çizim yapıyor
    if ((event == EVENT_MOUSEMOVE && flags == EVENT_FLAG_LBUTTON) || event == EVENT_LBUTTONDOWN)
    {
        //tek piksele çizim yapınca görünmesi zor oluyor ve
        //bazı pikselleri işaretlenmiyordu
        //aşağıdaki döngülerle komşu piksellerde boyanıyor
        for (int i = -cizgiKalinligi; i <= cizgiKalinligi; i++)
        {
            for (int j = -cizgiKalinligi; j <= cizgiKalinligi; j++)
            {
                ciz(x + j, y + i);
            }
        }
    }
 
}
 
int main() {
    cv::namedWindow("Kare");
    setMouseCallback("Kare", fareTakip, NULL);
    cv::imshow("Kare", resim);
    cv::waitKey();
    return 0;
}