小编Ttp*_*ala的帖子

OPENCV PYTHON 中的透视变换

我正在尝试对数独谜题进行透视变换。预期的转换仅发生在左侧。请帮助我指出我的错误。

输入图像:

在此处输入图片说明

预期输出图像:

在此处输入图片说明

我得到的输出:

在此处输入图片说明

使用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)

python opencv numpy

4
推荐指数
1
解决办法
3658
查看次数

图像的二维旋转

尝试旋转 90 度时的图像。 左边一张是原图。我正在尝试以任何给定的角度旋转图像。我以图像的中心为原点旋转。

但是代码没有按预期进行旋转。我附上下面的代码。

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

3
推荐指数
1
解决办法
594
查看次数