#python #opencv #image-processing #video-processing #cv2
Вопрос:
Я пытаюсь получить четкие кадры горизонтального видео таким образом, чтобы они имели минимум перекрывающихся пикселей. Я попробовал приведенный ниже код, чтобы найти ключевые точки, чтобы я мог идентифицировать различные кадры по тому факту, что у них нет одинаковых ключевых точек. Но этот код использует метод грубой силы и не совсем делает то, что я хочу.
import sys
import cv2
import numpy as np
from google.colab.patches import cv2_imshow
img1 = cv2.imread("/content/drive/MyDrive/lefttom.JPG")
img2 = cv2.imread("/content/drive/MyDrive/righttom.JPG")
img1_gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
img2_gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
orb = cv2.ORB_create(nfeatures=100)
keypoints1, descriptors1 = orb.detectAndCompute(img1, None)
keypoints2, descriptors2 = orb.detectAndCompute(img2, None)
bf = cv2.BFMatcher_create(cv2.NORM_HAMMING)
matches = bf.knnMatch(descriptors1, descriptors2,k=2)
def draw_matches(img1, keypoints1, img2, keypoints2, matches):
r, c = img1.shape[:2]
r1, c1 = img2.shape[:2]
output_img = np.zeros((max([r, r1]), c c1, 3), dtype='uint8')
output_img[:r, :c, :] = np.dstack([img1, img1, img1])
output_img[:r1, c:c c1, :] = np.dstack([img2, img2, img2])
for match in matches:
img1_idx = match.queryIdx
img2_idx = match.trainIdx
(x1, y1) = keypoints1[img1_idx].pt
(x2, y2) = keypoints2[img2_idx].pt
cv2.circle(output_img, (int(x1),int(y1)), 4, (0, 255, 255), 1)
cv2.circle(output_img, (int(x2) c,int(y2)), 4, (0, 255, 255), 1)
cv2.line(output_img, (int(x1),int(y1)), (int(x2) c,int(y2)), (0, 255, 255), 1)
return output_img
Комментарии:
1. Я не знаю, сработает ли это для ваших изображений… Вы можете попробовать: найти гомографию, исказить одно изображение и вычесть из другого (вычислить сумму абсолютной разницы или сумму квадратов разницы). Поищите примеры выравнивания изображений OpenCV. В случае, если вы хотите увеличить свои шансы получить ответ, я рекомендую вам публиковать больше «чистых» образцов изображений (без маркеров) и описывать ожидаемые результаты. (также: добавьте тег opencv)