Я пытаюсь реализовать следующую функцию, которая преобразует изображение с помощью 4 исходных точек, которые я решаю. проблема в том, что изображение всегда смещается вправо и вверх, чем предполагалось.
В функции точки:
luc=left up column
luw= left up row
ldc=left down column
# and so on...
Что я делаю в этом проекте:
Я получаю изображение.
Я изменяю размер изображения, чтобы видеть все изображение в cv2.show()
(размер изображения изменился 0.25
исходного изображения).
Я выбираю мышью 4 точки на измененном изображении (но дублирует координаты на 4, которые будут отображаться как исходное изображение) и помещаю координаты в преобразование «Перспектива».
Я хотел бы знать, что мне нужно исправить в моем коде, чтобы он мог работать правильно.
Заранее спасибо:)
код:
import cv2;
import numpy as np;
import os;
import csv;
import tkinter as tk;
from tkinter import messagebox;
def get_mouse_position(event,x,y,flags,param):
## Gets mouse position in the image
if event == cv2.EVENT_LBUTTONDOWN:
column,width = x,y;
text1.delete(1.0,tk.END);
text2.delete(1.0,tk.END);
text1.insert(1.0,str(x*4));
text2.insert(1.0,str(y*4));
def bilinear_transformation():
##Calculates bilinear transformation and show the transform image
img=cv2.imread('image1.jpg');
width,column,ch=img.shape;
luc=int(luc_e.get());
luw=int(luw_e.get());
ldc=int(ldc_e.get());
ldw=int(ldw_e.get());
ruc=int(ruc_e.get());
ruw=int(ruw_e.get());
rdc=int(rdc_e.get());
rdw=int(rdw_e.get());
src_point=np.float32([[luw,luc],[ldw,ldc],[ruw,ruc],[rdw,rdc]]);
dst_point=np.float32([[0,0],[width,0],[0,column],[width,column]]);
matrix=cv2.getPerspectiveTransform(src_point,dst_point);
new_img=cv2.warpPerspective(img,matrix,(column,width));
new_img=cv2.resize(new_img, (0,0), fx=0.25, fy=0.25);
cv2.imshow("Perspective transformation",new_img);
cv2.setMouseCallback("Perspective transformation",get_mouse_position);
Я ожидаю, чтоесли я выберу 4 края бумаги, то на новом изображении я увижу, что края изображения - это точки, которые я выбрал.