Merhaba arkadaşlar, Mobilhanem.com sitemizde Python ile Görüntü İşleme Dersleri eğitim serisine kaldığımız yerden devam ediyoruz. Geçen dersimizde OpenCv’de Resim Çevçeveleme ve Çözünürlüğe Göre İşlem’den bahsettik. Python ile Görüntü İşleme dersinde bu hafta ise OpenCv’de Resim Formatı ve Çözünürlük Değiştirme‘den bahsedeceğiz. Eğer bir önceki dersimizi inceleme fırsatınız olmadıysa OpenCv’de Resim Çevçeveleme ve Çözünürlüğe Göre İşlem dersimize buradan ulaşabilirsiniz. OpenCv’de Resim Formatı ve Çözünürlük Değiştirme işlemlerine başlamadan önce OpenCv’de Temel İşlemler dersimizde işleyeceğimiz konu başlıklarımızı tekrar gözden geçirelim.
Resim Okuma ve Yazma İşlemleriResim ÖzellikleriResim Çerçeveleme İşlemiÇözünürlüğe Göre Pencere Boyutlandırma- Format ve Çözünürlük Değiştirme
- Resim üzerinde piramit oluşturma (Görüntü işleme durumlarına göre resim boyutlandırma)
- Resime Dörtgen Ekleme
- Resime Çizgi ve Daire Ekleme
- Resime Metin Ekleme İşlemleri
OpenCv’de Resim Formatı ve Çözünürlük Değiştirme
OpenCv’de Temel İşlemler bölümü maddelerinde yer alan Şimdi OpenCv’de Resim Formatı ve Çözünürlük Değiştirme işlemlerine hep birlikte bakalım.
Yeni bir python dosyası oluşturarak çalışmamıza başlayalım. Yeni bir python dosyası oluşturduktan sonra gerekli kütüphanelerimizi çalışma dosyamıza dahil edelim.
import cv2
Kütüphanemizi dahil ettikten sonra jpg’yi farklı kalitelerde kaydetme ve png ‘yi sıkıştırma yöntemi ile resim üzerinde nasıl işlem yaparız buna bakacağız. Bu işlemlerimizi resimKaydet adında yeni bir fonksiyon içerisinde gerçekleştireceğiz.
import cv2 def resimKaydet(path,image,jpg_quality=None,png_compress=None): if jpg_quality: cv2.imwrite(path,image,[int(cv2.IMWRITE_JPEG_QUALITY),jpg_quality]) elif png_compress: cv2.imwrite(path,image,[int(cv2.IMWRITE_PNG_COMPRESSION),png_compress]) else: cv2.imwrite(path,image)
Yukarıdaki resimKaydet fonksiyonunda path (resmin yolu), image (resmin kendisi), jpg_quality (kalite değeri), dilersekte png sıkıştırması için png_compress parametrelerini tanımadık. Ayrıca jpg kalitesi 0-100 arasında değer alır. 100 değeri en yüksek kaliteyi belirler. Varsayılan olarak bu kalite 95 değerini alır.
Fonksiyonumuzu incelediğimizde jpg_quality değişkenine girilen bir kalite değeri var ise parametre üzerinden gönderdiğimiz resmimizi ve kalite değerimizi alıp cv.imwrite ile yeni resmimizin kayıt işlemini yapıyoruz. Eğer ki girilen parametremizde png_compress değeriyse de resmimizi png olarak sıkıştırma işlemini yapıyoruz. Şimdi resimKaydet fonksiyonumuzu ana fonksiyonumuzda çağırıp kullanalım.
def main(): resimYol="everest.jpg" resim=cv2.imread(resimYol) cv2.imshow('Everest',resim)
Bu kod bloğunda ise yeni bir resmi okuduk ve resim değişkenine aktardık. Aktardığımız bu resmi cv2.imshow ile keyfi olarak ekranda gösteriyorum.
son_jpg="everestJPG.jpg" resimKaydet(son_jpg,resim,jpg_quality=6)
Daha sonra son_jpg değişkenine dışarıya aktaracağımız yeni bir resim yolu tanımladık. Kullanacağımız resmiKaydet fonksiyonuna resim yolumuz olan son_jpg , kalitesini değiştireceğimiz olan resmimizin olduğu resim değişkenini ve jpg kalitesi için 0-100 değerleri arasından belirlediğim 6 değerini parametre olarak gönderiyoruz.
son_png = "everestPNG.png" resimKaydet(son_png,resim,png_compress=9)
Şimdi ise png sıkıştırması yapalım. Bu kısımda png sıkıştırma değerimiz 0-9 arasındadır. Maksimum olan 9 değeri ile dosyanın yüksek bir sıkıştırma yaparak daha küçük boyut elde edeceğimizi ifade ediyor.
import cv2 import numpy as np def resmiKaydet(path,image,jpg_quality=None,png_compress=None): if jpg_quality: cv2.imwrite(path,image,[int(cv2.IMWRITE_JPEG_QUALITY),jpg_quality]) elif png_compress: cv2.imwrite(path,image,[int(cv2.IMWRITE_PNG_COMPRESSION),png_compress]) else: cv2.imwrite(path,image) def main(): resimYol="everest.jpg" resim=cv2.imread(resimYol) cv2.imshow('Everest',resim) son_jpg="everestJPG.jpg" resmiKaydet(son_jpg,resim,jpg_quality=6) son_png = "everestPNG.png" resmiKaydet(son_png,resim,png_compress=9) cv2.waitKey(0) cv2.destroyAllWindows() if __name__=="__main__": main()
Son olarak cv2.waitKey(0) , cv2.destroyAllWindows() fonksiyonlarını kullanalım. Böylelikle penceremiz ekranda sabit duracak ve herhangi bir tuşa bastığımızda tüm pencereleri kapatmış olacağız. Ana fonksiyonumuzu ekledikten sonra Run tuşuna basarak derleme işlemimizi yapalım.
Derleme başarılı bir şekilde gerçekleşti. Herhangi bir tuşa basarak açılan pencerelerimizi kapatalım.
Pencereler kapandıktan sonra sol kısımda bulunan Project alanında jpg resim üzerine png sıkıştırması yaptığımız ve çözünürlük kalitesi değiştirilmiş birer resim oluştu. Gelin hep birlikte oluşan bu resimlerimizi inceleyelim.
Jpg uzantısına sahip olan everest adlı resmimize png sıkıştırması yaptık. Yaptığımız işlem ile çözünürlük kalitesini değiştirmeyi başardık. Ayrıca kalitesine göre resmin dosya boyutunda değişme oldu. Fonksiyon parametreleri üzerinden verilen değerleri değiştirerek sizde çeşitli kaliteler elde edebilirsiniz.
Mobilhanem.com da Python ile Görüntü İşleme serisinde bir dersin daha sonuna geldik. Bu hafta Python ile Görüntü İşleme dersimizde OpenCv’de Resim Formatı ve Çözünürlük Değiştirme‘den bahsettik. Umarım sizin için faydalı bir yazı olmuştur. Bir sonraki OpenCv ‘de Temel İşlemlerde devam edeceğimiz Resim üzerinde piramit oluşturma (görüntü işleme durumlarına göre resim boyutlandırma) dersinde görüşmek üzere. Eksik ya da yanlış gördüğünüz bir şey varsa lütfen iletişime geçmekten çekinmeyin.
Tüm Görüntü İşleme Dersleri için tıklayınız.
Kaynak : Link
7
derslerin devamı yok mu ?
Ders serimiz devam etmektedir. Tüm derslerimize aşağıdaki linkten erişebilirsiniz.
Görüntü İşleme Eğitim Serisi
derslerin devamı var diyorsunuz
Resim üzerinde piramit oluşturma dersi nerde bulamadım?
Merhaba Mustafa. Ders içerisinde gördüğünüz liste üzeriden sırasıyla gidilmektedir. Listede üstünü çizdiklerim yayınlanan derslerdir. Şuan Piramit oluşturma ve Resime Dörtgen Ekleme dersi hazırlanıyor. Birkaç gün içerisinde yayınlanacaktır.
ilginiz için teşekkürler.. bekliyorum
Merhaba ben makine mühendisliği hazırlık sınıfıyım . Temel düzeyde python biliyorum ve bu yıl takımım ile teknofeste katılacağım ama görevim gereği görüntü işleme ile bir rengi tanıtmam gerekiyor. Bunu sizce opencv ile mi daha rahat yapabilirim yoksa keras ile mi ? Ayrıca bu işi yapabilmem için önerdiğiniz bir kaynak,ders,döküman varsa önerirmisiniz. Cevabınız için şimdiden teşekkürler.
Merhaba. Renk tespit olayınız yapay zeka içerecek ise tensorflow kütüphanesini öneririm. Tensorflow’da renkler ile ilgili oluşturucağınız eğitim veri seti ile F-RCNN derin öğrenme modeli ile eğitip tanıma işlemini yapabilirsiniz. Kaynak Link
Eğer sadece renk tespiti üzerine çalışmak isterseniz opencv kütüphanesini kullanarak bu tespiti yapabilirsiniz. Kaynak Link 2
merhaba görüntü işlemede, wavelet transform ile görüntü sıkıştırma nasıl yapabilirim ? Gerçek zamanlı kamera görüntüsü için istiyorum. Fotoğraflar için değil ?
mail adresim : [email protected]
yardımcı olabilirmisiniz ?
Hocam harika olmuş elinize sağlık.