Python ve OpenCV İle Resimleri Birleştirme

0 38

Bu makalemizde Python ve OpenCV ile resim dosyalarımızı yatay veya dikey olarak nasıl birleştirebileceğimizi anlatıyoruz.

Giriş

Bu derste Python ve OpenCV kullanarak görüntüleri yatay ve dikey olarak birleştirmeyi öğreneceğiz.

Önemli : Basit olması için, aşağıdaki kod örneklerinde bir görüntüyü kendisiyle birleştireceğiz. Bununla birlikte, aşağıdaki kodları kullanarak farklı görüntüleri birleştirmek mümkündür:

  • Görüntü boyutları yalnızca birleştirme ekseni boyunca farklılık gösterebilir (kullandığımız birleştirme işlevine bağlı olarak yatay veya dikey). Bu makalede, bu kısıtlamaya uymak için resimlerin yeniden boyutlandırılmasını ele almayacağız;
  • Kanal sayısının aynı olması gerekir. Bu nedenle, ek bir manipülasyon yapmadan bir BGR görüntüsünü gri tonlamalı bir görüntüyle birleştiremeyiz (aşağıda açıklanmıştır).

Bu makaledeki kodlar OpenCV 4.0.0 sürümü ve Python’un 3.7.2 sürümü ile test edilmiştir .

Resim ekleme

Hem numpy hem de cv2 modüllerini içe aktararak başlayacağız.  Görüntülerimizi birleştirmek için numpy kütüphanesini, dosya eklemeyi gerçekleştirmek, orijinal görüntüyü okumak ve sonra nihai sonucu görüntülemek için cv2  kütüphanesini kullanacağız.

Veri Bilimine Başlangıç Rehberi : Numpy Kütüphanesini isimli yazımızda bu kütüphane ile daha fazla bilgi edinebilirsiniz.

import numpy
import cv2

Bundan sonra, birleştirmeyi yapmak için kullanacağımız orijinal görüntüyü okuyacağız. Bu ilk örnek için, görüntüyü kendisiyle birleştireceğiz.

Görüntüyü okumak için , cv2 modülünün imread fonksiyonunu çağırmamız ve dosya sistemindeki görüntünün yolunu içeren bir dize olarak girmemiz gerekir .

img = cv2.imread('Test.jpg')

Önceki eğitimlerde gördüğümüz gibi imread işlevi tarafından döndürülen görüntünün bir ndarray olarak temsil edildiğini unutmayın . Bu , manipüle etmek için birçok numpy fonksiyonunu kullanabileceğimiz anlamına gelir .

Bunu göz önünde bulundurarak, numpy modülünden vstack işlevini kullanarak görüntüyü kendisiyle dikey olarak ekleyeceğiz .

Girdi olarak, bu fonksiyon birleştirmek istediğimiz ndarralarla bir demet alır . Böylece, görüntümüzü birinci ve ikinci pozisyonlarda içeren bir demet geçireceğiz. Çıktı olarak, sonuçla dikey olarak birleştirilen iki görüntüye karşılık gelen yeni bir ndarray alırız .

verticalAppendedImg = numpy.vstack((img,img))

Hstack işlevini çağırarak bu birleştirme işlemini yatay olarak da yapabiliriz . Argüman aynı: birleştirmek istediğimiz ndarrays ile bir demet. Örnek olarak, her seferinde birden fazla görüntüyü birleştirebildiğimizi doğrulamak için grubumuz görüntüyü üç kez içerecektir.

horizontalAppendedImg = numpy.hstack((img,img,img))

Sonlandırmak için her iki görüntüyü iki farklı pencerede göstereceğiz.

cv2.imshow('Vertical Appended', verticalAppendedImg)
cv2.imshow('Horizontal Appended', horizontalAppendedImg)


cv2.waitKey(0)
cv2.destroyAllWindows()

Kodun tamamı aşağıda görülebilir.

import numpy
import cv2


img = cv2.imread('Test.jpg')


verticalAppendedImg = numpy.vstack((img,img))
horizontalAppendedImg = numpy.hstack((img,img,img))




cv2.imshow('Vertical Appended', verticalAppendedImg)
cv2.imshow('Horizontal Appended', horizontalAppendedImg)


cv2.waitKey(0)
cv2.destroyAllWindows()

Kodu test etme

Kodu test etmek için, istediğiniz aracı kullanarak çalıştırın. Ben Python IDE olan PyCharm kullanıyorum.

python ve opencv resimleri birleştirme

Şekil 1, yatay olarak eklenen görüntülerden ne beklendiğini göstermektedir.

python ve opencv resimleri birleştirme

Şekil 2 dikey olarak eklenen görüntüleri göstermektedir.

 

BGR ve Gri Tonlamalı görüntüler ekleme

Eklenmenin olası bir uygulaması, bir şekilde işlenen bir görüntüyle orijinal bir görüntüyü yan yana göstermek olabilir ve çoğu zaman görüntüleri gri tonda işleriz.

Biz Gri tonlamalı biriyle RBG bir görüntü eklemek çalışırsanız, o zaman hem hstack ve vstack fonksiyonları bir hata verir. Bunun nedeni, her iki ndarranın farklı boyutlara sahip olmasıdır (BGR görüntüsünün 3 boyutu ve gri tonlamalı görüntünün 2 boyutu vardır).

Bu birleştirme işlemini yapabilmek için gri görüntüyü tekrar BGR renk uzayına dönüştürmemiz gerekir. Aşağıda nasıl yapılacağını kontrol edeceğiz.

Yani, daha önce olduğu gibi, numpy ve cv2’yi içe aktararak başlıyoruz . Bunu takiben, görüntüyü okuyacak ve gri tonlamaya dönüştüreceğiz. Bir görüntüyü gri tonlamaya dönüştürme hakkında ayrıntılı bir eğitim için lütfen bu (OpenCV İle Resim işlemlerine Giriş) eğitimi inceleyin.

import numpy
import cv2

img = cv2.imread('Test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

 

Şimdi gri tonlamalı görüntümüze sahip olduğumuza göre, onu tekrar BGR renk uzayına dönüştürmek için, cvtColor işlevini tekrar arayabiliriz , ilk olarak gri tonlamalı görüntümüzü girerken ve ikinci girdi olarak renk alanı dönüştürme kodunu geçebiliriz : COLOR_GRAY2BGR .

BGR’de görüntünün gri kalacağını, renkli bir görüntüye dönüştürülmeyeceğini unutmayın. Amaçladığımız şey budur: gri görüntüyü korumak, ancak BGR renk alanında tutmak , böylece onu temsil eden ndarray’ın orijinal görüntü gibi 3 boyutu vardır.

grayImageBGRspace = cv2.cvtColor(gray,cv2.COLOR_GRAY2BGR)

Bundan sonra, orijinal görüntüyü ve gri görüntüyü BGR uzayında birleştirmeye özen gösterebilir ve bir pencerede görüntüleyebiliriz.

horizontalAppendedIGrayImg = numpy.hstack((img, grayImageBGRspace))

cv2.imshow('Horizontal Appended Gray Img', horizontalAppendedIGrayImg)

cv2.waitKey(0)
cv2.destroyAllWindows()

Kodun tamamı aşağıda görülebilir.

import numpy
import cv2

img = cv2.imread('Test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

## won't work
##horizontalAppendedIGrayImg = numpy.hstack((img,gray))

grayImageBGRspace = cv2.cvtColor(gray,cv2.COLOR_GRAY2BGR)

horizontalAppendedIGrayImg = numpy.hstack((img, grayImageBGRspace))

cv2.imshow('Horizontal Appended Gray Img', horizontalAppendedIGrayImg)

cv2.waitKey(0)
cv2.destroyAllWindows()

python ve opencv resimleri birleştirme

Kodu çalıştırdıktan sonra, şekil 3’te gösterilene benzer bir sonuç elde etmelisiniz.

Sitemizde Python ve OpenCV ile ilgili onlarca farklı makale ve ders bulabilirsiniz.

Python programlama dilini yeni öğrenmeye başladıysanız Python Dersleri yazımızda bakabilirsiniz.

Makalemiz ile ilgili sorularınız yorumlar bölümden sormaktan çekinmeyin. Yorumlarınız bekliyoruz.

Kaynak Techtutorialsx

Cevap bırakın

E-posta hesabınız yayımlanmayacak.

Bu web sitesi deneyiminizi geliştirmek için çerezleri kullanır. Bununla iyi olduğunuzu varsayacağız, ancak isterseniz vazgeçebilirsiniz. Kabul etmek Mesajları Oku