Не удается заменить значение пикселя в целевом изображении после гомографии - PullRequest
1 голос
/ 25 февраля 2020

Я пытаюсь реализовать warpperspect функцию из opencv вручную.

Моя интерпретация Warpperspective такова:

  1. Применить гомографию к каждому [x,y,1] в исходном изображении, чтобы получить [x'/a y'/a a]
  2. Для каждого [x'/a y'/a] координату в целевом изображении, замените значение пикселя (интенсивность) значением пикселя [x y] координата в исходном изображении.

Но я получаю слишком большие x'/a y'/a значения, которые выходят за границы для background

Я знаю, что делаю что-то не так, но не знаю что.

import cv2
import numpy as np

img = cv2.imread('cola.jpg')
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
background = cv2.imread('stadium.jpg')
background = cv2.cvtColor(background,cv2.COLOR_BGR2RGB)

row,col,ch=img.shape
print(row)
print(col)
print(ch)
print("bbb",img[0,0,0])

rows_p,cols_p,ch_p = background.shape
print(rows_p)
print(cols_p)
print(ch_p)

pts1 = np.float32([[0,0],[974,0],[0,974],[974,974]]) # cola coords 
pts2 = np.float32([[560,383],[940, 516],[5,527],[298,733]]) # stadium tile coords

M = cv2.getPerspectiveTransform(pts1,pts2)
print(M)

Store_Matrix=np.empty([3,1])
for i in range(row):
    for j in range(col):
        Store_Matrix=np.dot(M,img[i,j])
        X=Store_Matrix[0].astype(int)
        Y=Store_Matrix[1].astype(int)
        background[X,Y,1]=img[i,j,1]
        background[X,Y,2]=img[i,j,2]
        background[X,Y,3]=img[i,j,3]  # trying to take the pixel vale from the source image for every channel and replacing the pixel value in the backgroung image (the new coordinates after applying homo)graphy
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...