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.