-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;
}
