Python OpenCV ile Çarpıcı Panoramik Fotoğraflar Oluşturma

OpenCV kullanarak görüntülerin birleştirilmesi, Python panoramik veya geniş alan görünümü oluşturmak için birden çok görüntünün birleştirilmesini içerir. Bu işlem, fotoğrafçılıkta üst üste binen görüntüleri birleştirmek ve kesintisiz bir panorama oluşturmak için yaygın olarak kullanılır. İşte OpenCV kullanarak görüntülerin nasıl birleştirileceğine dair temel bir taslak:

Görüntü Ön İşleme

cv2.imread() OpenCV'nin işlevini kullanarak birleştirmek istediğiniz görüntüleri yükleyin .

cv2.cvtColor() Gerekirse kullanarak görüntüleri gri tonlamaya dönüştürün .

SIFT, ORB veya AKAZE gibi özellik algılama algoritmalarını kullanarak görüntülerdeki temel özellikleri tespit edin.

Özellik Eşleştirme

Görüntüler arasında karşılık gelen noktaları bulmak için özellik eşleştirme tekniklerini kullanın.

cv2.BFMatcher() OpenCV, özellik eşleştirme gibi veya için işlevler sağlar cv2.FlannBasedMatcher().

Homografi Tahmini

Önceki adımda bulunan karşılık gelen noktaları kullanarak homografi matrisini hesaplayın.

Homografi matrisi, iki görüntü arasındaki dönüşümü tanımlar.

Çözgü ve Dikiş

Görüntülerden birini diğeriyle hizalamak için çarpıtmak için homografi matrisini kullanın.

Fonksiyon cv2.warpPerspective() bu amaç için kullanılabilir.

Birleştirilmiş panoramayı oluşturmak için çarpık görüntüyü diğer görüntüyle birleştirin.

Karıştırma(Opsiyonel)

Birleştirilmiş görüntüleri sorunsuz bir şekilde birleştirmek için görüntü karıştırma tekniklerini uygulayın.

Doğrusal harmanlama veya çok bantlı harmanlama gibi teknikler kullanılabilir.

Görüntüle veya Kaydet

Birleştirilmiş panoramayı kullanarak görüntüleyin cv2.imshow() veya kullanarak kaydedin cv2.imwrite().

 

OpenCV kullanarak görüntü birleştirme sürecini gösteren basitleştirilmiş bir kod örneğini burada bulabilirsiniz:

import cv2  
  
# Load images  
image1 = cv2.imread('image1.jpg')  
image2 = cv2.imread('image2.jpg')  
  
# Convert images to grayscale  
gray1 = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)  
gray2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)  
  
# Detect key features and descriptors  
orb = cv2.ORB_create()  
keypoints1, descriptors1 = orb.detectAndCompute(gray1, None)  
keypoints2, descriptors2 = orb.detectAndCompute(gray2, None)  
  
# Feature matching  
matcher = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)  
matches = matcher.match(descriptors1, descriptors2)  
  
# Apply ratio test to filter good matches  
matches = [match for match in matches if match.distance < 0.7 * max(len(matches), 1)]  
  
# Find corresponding points  
src_pts = [keypoints1[match.queryIdx].pt for match in matches]  
dst_pts = [keypoints2[match.trainIdx].pt for match in matches]  
  
# Calculate homography matrix  
homography, _ = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC)  
  
# Warp and stitch images  
stitched_image = cv2.warpPerspective(image1, homography,(image1.shape[1] + image2.shape[1], image1.shape[0]))  
stitched_image[0:image2.shape[0], 0:image2.shape[1]] = image2  
  
# Display or save the stitched image  
cv2.imshow('Stitched Image', stitched_image)  
cv2.waitKey(0)  
cv2.destroyAllWindows()  

Lütfen bu örneğin basitleştirilmiş bir gösteri olduğunu unutmayın. Uygulamada, yüksek kaliteli panoramik görüntüler elde etmek için görüntü hizalama, karıştırma ve bozulma düzeltme gibi sorunları halletmeniz gerekebilir.