我正在尝试对数独谜题进行透视变换。预期的转换仅发生在左侧。请帮助我指出我的错误。
输入图像:
预期输出图像:
我得到的输出:
使用cv2.approxpolydp()找到的数独游戏的角落如下:
top_left = [71,62]
top_right = [59, 418]
bottom_right = [443, 442]
bottom_left = [438, 29]
Run Code Online (Sandbox Code Playgroud)
输出图像的形状为 [300,300]。
对应的输出坐标为:
output_top_left = [0,0]
output_top_right = [0, 299]
output_bottom_right = [299, 299]
output_bottom_left = [299,0]
Run Code Online (Sandbox Code Playgroud)
以下是我用于透视变换的代码:
top_left = [71,62]
top_right = [59, 418]
bottom_right = [443, 442]
bottom_left = [438, 29]
Run Code Online (Sandbox Code Playgroud)
生成的变换矩阵为:
[[ 9.84584842e-01 3.31882531e-02 -7.19631955e+01]
[ 8.23993265e-02 9.16380389e-01 -6.26659363e+01]
[ 4.58051741e-04 1.45318012e-04 1.00000000e+00]]
Run Code Online (Sandbox Code Playgroud)
我正在尝试以任何给定的角度旋转图像。我以图像的中心为原点旋转。
但是代码没有按预期进行旋转。我附上下面的代码。
import math
import numpy as np
import cv2
im = cv2.imread("Samples\\baboon.jpg", cv2.IMREAD_GRAYSCALE)
new = np.zeros(im.shape,np.uint8)
new_x = im.shape[0] // 2
new_y = im.shape[1] // 2
x = int(input("Enter the angle : "))
trans_mat = np.array([[math.cos(x), math.sin(x), 0],[-math.sin(x), math.cos(x), 0],[0, 0, 1]])
for i in range(-new_x, im.shape[0] - new_x):
for j in range(-new_y, im.shape[1] - new_y):
vec = np.matmul([i, j, 1], trans_mat)
if round(vec[0] + new_x) < 512 and round(vec[1] + new_y) < 512:
new[round(vec[0]+new_x), round(vec[1]+new_y)] = im[i+new_x,j+new_y]
cv2.imshow("rot",new) …Run Code Online (Sandbox Code Playgroud) python numpy image-processing linear-algebra transformation-matrix