OpenCV-Görüntü Üzerinde Geometrik Dönüşümler
Hedefler
Bu yazıda görüntü üzerinde taşıma, döndürme gibi geometrik dönüşüm(transformation) işlemlerini öğreneceğiz.Kullanılacak Fonksiyonlar: cv2.getPerspectiveTransform, cv2.warpAffine
Dönüşüm(Transformation)
OpenCV; cv2.warpAffine ve cv2.warpPerspective olmak üzere iki dönüştürme(transformation) işlevi sunuyor. Dönüşüm işlemlerinin tamamında bu iki fonksiyondan faydalanmak mümkün olacaktır. Dönüşüm matris olarak; cv2.warpAffine , 2x3 dönüşüm matrisi alırken cv2.warpPerspective , girdi olarak 3x3 dönüşüm matrisini alır.Ölçekleme(Scaling)
Ölçekleme(scaling) resmin yeniden boyutlandırılması işlemidir. OpenCV, bu amaçla cv2.resize() işleviyle birlikte gelir. Bunun dışında görüntünün boyutu manuel olarak belirtilebilir veya ölçeklendirme(scaling) faktörü belirtilebilir.Bu işlemlerde; küçültme için cv2.INTER_AREA ve yakınlaştırma için cv2.INTER_CUBIC ve cv2.INTER_LINEAR fonksiyonları kullanılabilir. Varsayılan olarak, kullanılan yeniden boyutlandırma amaçları için cv2.INTER_LINEAR yöntemi kullanılır. Aşağıdaki kodlardaki değerler ile oynayıp sonuçları inceleyebilirsiniz.import cv2
import numpy as np
img = cv2.imread('ogu.jpg')
res = cv2.resize(img,None,fx=2, fy=2, interpolation = cv2.INTER_CUBIC)
# Veya
height, width = img.shape[:2]
res = cv2.resize(img,(2*width, 2*height), interpolation = cv2.INTER_CUBIC)
Translation(Taşıma)
Burada yapılan işlem kelimenin tam manası ile bir taşıma işlemi. (x,y) düzleminde yapılan taşıma işlemi ne ise burada da onun matris versiyonunu görüntü üzerinde gerçekleştiriyoruz.import cv2
import numpy as np
img = cv2.imread('ogu.jpg',0)
rows,cols = img.shape
# Matrisimizi (100,50)(wight,height) şeklinde kaydırıyoruz(Shift):
M = np.float32([[1,0,100],[0,1,50]])
dst = cv2.warpAffine(img,M,(cols,rows))
cv2.imshow('img',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
Döndürme(Rotation)
Temelde bir görüntünün belirlenen bir açı kadar döndürülmesi işlemidir. Bu işlemi OpenCV'nin anlayabilmesi için matris formunda matematiksel bir modele ihtiyaç duyulmaktadır:import cv2
img = cv2.imread('ogu.jpg',0)
rows,cols = img.shape
M = cv2.getRotationMatrix2D((cols/2,rows/2),90,1)
dst = cv2.warpAffine(img,M,(cols,rows))
Persfektif Dönüşümü
Perspektif dönüşümü için 3X3 dönüşüm matrisine ihtiyaç duymaktayız. Dönüşüm matrisini(transformation matrix) bulmak için görüntü üzerinde 4 noktaya ve bu noktaların toplam çıktısını almaya ihtiyacımız bulunmaktadır. Bu 4 noktanın 3'ü collinear olmamalıdır. Dönüşüm matrisini bulmak için kullanacağımız cv2.getPerspectiveTransformation() fonksiyonundan sonra cv2.warpPerspective fonksiyonunu kullanarak 3X3 matrisimizi elde etmiş olacağız. İşte Kodlar:import cv2
img = cv2.imread('sudoku_training.png')
rows,cols,ch = img.shape
pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]])
M = cv2.getPerspectiveTransform(pts1,pts2)
dst = cv2.warpPerspective(img,M,(300,300))
plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()
Bu kodların çıktısı olan görüntü sayfanın başında bulunmaktadır. Görüntüden de anlaşılacağı gibi sudoku çözücü uygulamasının birinci adımını oluşturan bir uygulamayı yapmış olduk. İlerleyen zamanlarda öğrendiğimiz fonksiyonlarla çalışan bir uygulamayı beraber yapmak umudu ile. İyi çalışmalar.
Kaynakça: https://docs.opencv.org/3.2.0/
Kaynak dosyaları ve Resimleri indirmek için: TIKLAYINIZ
0 yorum: