C++ ve OpenCV ile Resim Okuma, Büyütme, Küçültme (1)

Merhaba arkadaşlar bu yazımda OpenCV kütüphanesinin bazı fonksiyonlarını kullanmayı göreceğiz. C++ ile programlayacağız. Nedenleri anlatmadan önce OpenCV kütüphanesini kurmamış olanlar varsa şurdan hemencecik halledebilirler. Her şeyi adım adım anlatacağım. Biraz uzun olacak ama mümkün olduğunca sıkmamaya ve açık yazmaya çalışacağım.

Neden C++:
  • Üzerine çalıştığım bir proje gereği c++ ile yazmam gerekiyor.
  • Proje performans odaklı olduğu için tercihimiz c++ oldu.
  • C++ öğrenmesi biraz zahmetli ancak isveç çakısı gibi bir dil.
  • Performans odaklı bir geliştirme yapıyor olmasaydım muhtemelen tercihim python olurdu.
  • C++ üzerine oldukça geniş bir döküman dünyası olması işimi kolaylaştırıyor.
Kullacağım Teknolojiler:
  • Vim Editör
  • g++
  • OpenCV
  • C++

E hadi başlayalım.

Kendi yöntemlerim ile anlatacağım ancak kendinize uyarlayabilirsiniz.

ctrl + alt + t kombinasyonu ile uçbirim ekranımızı açıyoruz ya da nasıl isterseniz öyle açın 🙂

mkdir OpenCVCalismalar // OpenCVCalismalar adında bir dizin oluşturdum

cd OpenCVCalismalar // oluşturduğum dizinin içine girdim

cd image // resimleri içine atacağım bir dizin oluşturdum.

Şimdi image adlı dizine deneme.jpg adında herhangi bir resim koyun.

vim resmi_ac.cpp // vim editör ile resmi_ac.cpp adında bir cpp dosyası açıyorum

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;

int main()
{
Mat img = imread(“image/deneme.jpg”); // Mat sınıfını dahil ediyoruz.
// imread() fonksiyonu ile img adında bir değişkene cpp_opencv.png adlı resmi okutuyoruz.
if (img.empty()){ //img nin boş olup olmadığını kontrol et
cout << “Resim bulunamadi !” << endl; // Eğer boşsa ekrana Resim Bulunamadi ! yazdır.
}
else{
namedWindow(“Resmi Ac”, CV_WINDOW_AUTOSIZE); // Pencere başlığına Resmi Ac adı verildi. Pencere boyutu otomatik ayarlandı.

imshow(“Resim Ac”, img); // img yi Resmi Ac başlığı altında gösterdik.
waitKey(0); // Bir giriş alınması bekleniyor.
destroyWindow(“Resim Ac”); // Pencere kapandı.
}

return 0;
}

Kodları yazdıktan sonra sıra geldi derlemeye.

g++ resmi_ac.cpp -o resmi_ac `pkg-config –cflags –libs opencv` // programımızı derler.

./resmi_ac // programımızı çalıştırır.

Ekran görüntülerim:

Resmi görüntüleyebildiğinizi umuyorum.

 

Şimdi resmimizin boyutuyla oynayalım birazda.

Yeni bir cpp dosyasında yazalım kodlarımızı.

vim resimle_oyna.cpp // resimle_oyna.cpp adında bir dosya açıyoruz.

İçine şu kodları yazıyoruz.

#include “opencv2/highgui/highgui.hpp”
#include “opencv2/imgproc/imgproc.hpp”
#include “opencv2/core/core.hpp”

using namespace std;
using namespace cv;

int main()
{
Mat normal, resized, saved;

normal = imread(“image/deneme.jpg”); // normal resmimiz
namedWindow(“Normal Resim”, CV_WINDOW_AUTOSIZE); // normal resmimiz için pencere başlığımızı oluşturduk
imshow(“Normal Resim”, normal); // normal resmimizi açtık

 

resize(normal, resized, Size(), 0.5, 0.5, INTER_LINEAR); // resize() fonksiyonu ile resmimizi küçülttük
namedWindow(“Kucuk Resim”, CV_WINDOW_AUTOSIZE); // küçük resmimiz için pencere başlığımızı oluşturduk
imshow(“Kucuk Resim”, resized); // küçük resmimizi açtık

imwrite(“kucuk_resim.jpg”, resized); // küçük resim kaydedildi kucuk_resim.jpg adında

 

resize(normal, resized, Size(), 1.5, 1.5, INTER_LINEAR); // resmimizi büyüttük
namedWindow(“Buyuk Resim”, CV_WINDOW_AUTOSIZE);
imshow(“Buyuk Resim”, resized);
imwrite(“buyuk_resim.jpg”, resized);

waitKey(0);

 

return 0;
}

g++ resimle_oyna.cpp -o resimle_oyna `pkg-config –cflags –libs opencv` // derlemek için gereken komutumuz.

./resimle_oyna // programımızı çalıştırmak için gerekli komutumuz.

Büyük resim içinde kodlar aynı olduğu için açıklama satırı koymadım arkadaşlar. Ekran görüntümü alırken büyük resmi kapattım çünkü ortalık biraz karıştı o açıkken 🙂 (Çok yer kapladı)

Herhangi bir sorunuzda bana ulaşabilirsiniz. OpenCV ile ilgili öğrendiklerimi paylaşmaya devam edeceğim. Herkese iyi çalışmalar 🙂

 

Sorular kısmından konu ile ilgili soruları sorabilirsiniz

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir