Bu yayını, yabancı bir siteden kendimce Türkçeleştirerek ve kısaltarak aldım. Umarım faydalı olur...
C:/ klasörümüzün altına calisma adında bir klasör açıp içine de resim1.jpg adında bir resim koyarak başlayalım...
Aşağıdaki kodu inceleyelim.
#include "stdafx.h"
#include <opencv2\opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat kaynak = imread("C:/calisma/resim1.jpg");
Mat hedef;
if (!kaynak.data) { cout << "Resim yuklenemedi." << endl; return -1; }
namedWindow("Pencere");
int deger1 = 50;
int aydinlik;
createTrackbar("Aydinlik", "Pencere", °er1, 100);
int deger2 = 50;
double kontrast;
createTrackbar("Kontrast", "Pencere", °er2, 100);
while (true) {
aydinlik = deger1 - 50;
kontrast = deger2 / 50.0;
kaynak.convertTo(hedef, -1, kontrast, aydinlik);
imshow("Pencere", hedef);
if(waitKey(50) == 27) break;
}
return 0;
}
main() fonksiyonumuz içine bakalım...
Mat kaynak = imread("C:/calisma/resim1.jpg"); Mat hedef;
resim1.jpg adlı resmimizi kaynak değişkenimize aldık. Ayrıca bu resmin işlenmiş (aydınlık ve kontrast katılmış) halini göstermek için de hedef adında boş bir Mat türü değişken oluşturduk.
if (!kaynak.data) { cout << "Resim yuklenemedi." << endl; return -1; }
Bunu önceki yayınlarda if( kaynak.empty() ) { ... } şeklinde görmüştük. Bu da başka bir yol. Resmimiz yüklenemediyse ekrana "Resim yuklenemedi." yazdırıp programı kapatıyoruz.
createTrackbar("Aydinlik", "Pencere", °er1, 100);
createTrackbar() fonksiyonu, trackbar oluşturur. Parametreleri inceleyelim:
~ "Aydinlik" trackbar'ımızın adı ne olacak?
~ "Pencere" trackbar'ımız hangi pencerede bulunacak?
~ °er1 trackbar'ımızın başlangıçtaki değeri, bellekteki hangi adreste tutuluyor?
~ 100 trackbar'ımız sıfır ile kaç aralığında değerler alacak?
while ile açtığımız sonsuz döngünün içine bakalım...
aydinlik = deger1 - 50;
aydinlik, bizim kaynak resmimizin üzerine uygulayacağımız değeri belirleyecek. deger1, 0-100 aralığında bir değer almak üzere trackbar için oluşturulmuştu. Ama biz hedef resmimize 0-100 aralığında değil, -50 ile + 50 aralığında bir değer uygulayacağız. Bu satır sayesinde deger1'in değeri değiştiğinde, aydinlik'in değeri de onun 50 eksiği olacak. Yani başlangıçta deger1=50 iken aydinlik=0 (yani hiçbir işlem yapılmamış) olacak. deger1=100 iken aydinlik=50 olacak. Bu durumun benzeri kontrast için de geçerli. Peki bu işlem yapmaktan kastım nedir? Ona da bakalım.
kaynak.convertTo(hedef, -1, kontrast, aydinlik);
kaynak adındaki matrisimiz üzerinde bazı güzel işlemler yapan convertTo fonksiyonunun parametrelerini inceleyelim.
~ hedef İşlemin sonucu olacak matris
~ -1 Piksel ve kanal sayısının değiştirilme parametresidir. -1 olunca bu alanda bir değişiklik olmaz.
~ kontrast Bu alfa adlı parametredir. kaynak'ın tüm piksel değerleri bu değerle çarpılır.
~ aydinlik Bu da beta adlı parametredir. kaynak'ın tüm piksel değerleri bu değerle toplanır.
if(waitKey(50) == 27) break;
Eğer klavyeden 27 kodlu tuşa (ESC'ye) basılırsa while döngüsünü kırıyoruz. Sonra da zaten program sonlanıyor.
Hiç yorum yok:
Yorum Gönder