(Ders 37) OpenCV ile Kameradaki Görüntüyü Yakınlaştırma (C++)

(Ders 38) OpenCV ile Kameradaki Görüntüyü Sınırsız Yakınlaştırma (C++)
(Ders 47) OpenCV ile Arka Plan Çıkarma (C++)

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

Ekran Görüntüsü:

Program Açıklaması:

Kamera’dan aldığımız görüntüyü bazen istediğimiz katsayıda yakınlaştırmak isteriz. Bu projede seçilen bölge sekiz kat yakınlaşıyor.

Bu ne işe yarar diyecek olursanız nokta takibinde çok işinize yarayacak, bunun daha gelişmişi sitemizde mevcut çift katlı yakınlaştırma yapıyor o örnek.

Nokta takibi şu şekilde yapılıyor. Herhangi bir piksel işaretliyoruz ve program o pikselin komşularına göre görüntü takibi yapıyor.

Bu örnekte yakınlaştırma katsayısını program içerisinden değiştirebilirsiniz.

Hareketli görüntüde piksel seçmek gerçekten çok zormuş diğer örneğin kamera duraklatma özelliği var onu mutlaka inceleyiniz.

Visual Studio Projeni İndir

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;
cv::Mat kesilenResim;

Point nokta = 0;
Point noktaEk = 0;

int kareGenisligininYarisi = 25;
int goruntuBuyutmeKatSayisi = 8;

void fareTakip2(int event, int x, int y, int flags, void *kullanici)
{
	//farenin sol tuşuna basınca
	if (event == EVENT_LBUTTONDOWN)
	{
		noktaEk.x = x / goruntuBuyutmeKatSayisi - kareGenisligininYarisi;
		noktaEk.y = y / goruntuBuyutmeKatSayisi - kareGenisligininYarisi;

		system("cls");
		cout << noktaEk.x << " ";
		cout << noktaEk.y << endl;
		cout << kesilenResim.size();
	}
}

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

		noktaEk.x = 0;
		noktaEk.y = 0;
	}
}

int main()
{
	VideoCapture video(0); //dahili webcam icin 0 yaziniz harici webcamlar icin 1,2,3 gibi sayilar yaziniz
	if (!video.isOpened())//eger webcam acilamazsa
	{
		cout << "Webcam acilamadi" << endl;
	}

	namedWindow("Ana Pencere", CV_WINDOW_AUTOSIZE);
	namedWindow("Yakınlaşan Görüntü", CV_WINDOW_AUTOSIZE);

	while (true) //sonsuz dongu
	{
		video.read(resim); //video'yu img'ye frame frame okuyor

		flip(resim, resim, 1); //frame'in yatayda simetrisi aliniyor

							   //kamera açılır açılmaz sol üstte nokta şeklinde dikdörtgen beliriyordu
							   //bu koşul ifadesiyle dikdörtgeni engelledik
		if (!(nokta.x == 0 && nokta.y == 0))
		{
			circle(resim, Point(nokta.x + noktaEk.x, nokta.y + noktaEk.y), 3, Scalar(255, 191, 0), 1, 8, 0);

			//resmin sol üstü (0,0) konumu olarak kabul ediliyor
			int x = nokta.x - kareGenisligininYarisi; //x eksenindeki başlangıç konumu
			int y = nokta.y - kareGenisligininYarisi; //y eksenindeki başlangıç konumu

													  //seçilen bölgenin etrafına dikdörtgen çiziliyor
			rectangle(resim, Point(nokta.x + noktaEk.x - kareGenisligininYarisi, nokta.y + noktaEk.y - kareGenisligininYarisi), Point(nokta.x + noktaEk.x + kareGenisligininYarisi, nokta.y + noktaEk.y + kareGenisligininYarisi), Scalar(255, 191, 0), 4, 8, 0);

			cv::Rect dikdortgen;
			dikdortgen.x = x; //kesilen resmin x eksenindeki başlangıç konumu
			dikdortgen.y = y; //kesilen resmin y eksenindeki başlangıç konumu
			dikdortgen.width = kareGenisligininYarisi * 2; //kesilen resmin genişliği
			dikdortgen.height = kareGenisligininYarisi * 2; //kesilen resmin yüksekliği

			kesilenResim = resim(dikdortgen);//oluşturulan dikdörtgene göre resim kesiliyor
			resize(kesilenResim, kesilenResim, Size(), goruntuBuyutmeKatSayisi, goruntuBuyutmeKatSayisi, INTER_LINEAR);//kesile görüntü büyütüldü
			cv::imshow("Yakınlaşan Görüntü", kesilenResim);
		}

		imshow("Ana Pencere", resim);

		setMouseCallback("Ana Pencere", fareTakip, NULL);
		setMouseCallback("Yakınlaşan Görüntü", fareTakip2, NULL);

		//esc'ye basılırsa programdan çıkılıyor
		if (waitKey(30) == 27) //27 ascii tus karsiligi ESC tusudur.
		{
			break;
		}
	}
	return 0;
}

 

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

(Ders 38) OpenCV ile Kameradaki Görüntüyü Sınırsız Yakınlaştırma (C++)
(Ders 47) OpenCV ile Arka Plan Çıkarma (C++)