6 Haziran 2016 Pazartesi

Trackbar Kullanımı, Aydınlık ve Kontrast (OpenCV & C++)

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", &deger1, 100);

    int deger2 = 50;
    double kontrast;
    createTrackbar("Kontrast", "Pencere", &deger2, 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", &deger1, 100);
createTrackbar() fonksiyonu, trackbar oluşturur. Parametreleri inceleyelim:
~ "Aydinlik"   trackbar'ımızın adı ne olacak?
~ "Pencere"    trackbar'ımız hangi pencerede bulunacak?
~ &deger1     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.





<< AnaSayfa - << Önceki Yayın - Sonraki Yayın >>

Hiç yorum yok:

Yorum Gönder