首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenCV问题与perspectiveTransform - scn +1和m.cols

OpenCV问题与perspectiveTransform - scn +1和m.cols
EN

Stack Overflow用户
提问于 2022-02-01 09:58:28
回答 1查看 140关注 0票数 0

我发现了一个透视矩阵,它使用:

代码语言:javascript
运行
复制
import numpy as np
import cv2 as cv

points_src = np.single([[0, 0], [0, 1], [1, 1], [1, 0]])
points_dst = np.single([[0.5, 0.5], [0.5, 2], [2, 2], [2, 0.5]])
perspective_matrix = cv.getPerspectiveTransform(points_src, points_dst)

产生了预期的:

代码语言:javascript
运行
复制
>>> perspective_matrix
array([[1.5, 0. , 0.5],
       [0. , 1.5, 0.5],
       [0. , 0. , 1. ]])

但是,当我尝试使用perspectiveTransform转换点时:

代码语言:javascript
运行
复制
points_original = np.single([[0, 0]])
points_transformed = cv.perspectiveTransform(points_original, perspective_matrix)

我得到以下错误:

代码语言:javascript
运行
复制
"error: (-215:Assertion failed) scn + 1 == m.cols in function 'cv::perspectiveTransform'"

我尝试在points_original坐标中填充一个尾随1 (np.single([[0, 0, 1]])),就像在文献资料中所做的那样,以及添加更多的点(np.single([[0, 0], [1, 1]])np.single([[0, 0, 1], [1, 1, 1]])),删除列表中的嵌套层(np.single([0, 0])np.single([0, 0, 0]))等等,但我不知道到底出了什么问题。蒂娅。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-04 10:44:36

根据@Danšek收到的有益评论,回答我自己的问题。

根据这些文件,src应该是:

输入双通道或三通道浮点阵列。

为了让OpenCV将numpy数组映射到cv::Mat ( OpenCV使用的C++类),通道(通常是RGB组件,但在本例中是坐标)需要是三维/轴(第一个维度是行,第二个列)。

要么通过在初始列表中添加另一个嵌套级别:np.single([[[0, 0]]])来创建形状正确的数组,要么重新构造现有的数组:np.single([[0, 0]]).reshape(-1,1,2)。这将产生尽可能多的行(本例中为一行)、一行一列和每列两个通道。

TLDR:

我只是需要额外的一层嵌套,例如:

代码语言:javascript
运行
复制
points_original = np.single([[[0, 0]]])
points_transformed = cv.perspectiveTransform(points_original, perspective_matrix)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70938575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档