首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误:(-215:断言失败)函数'cv::perspectiveTransform‘中的scn +1 == m.cols

错误:(-215:断言失败)函数'cv::perspectiveTransform‘中的scn +1 == m.cols
EN

Stack Overflow用户
提问于 2020-07-02 11:53:19
回答 3查看 9.1K关注 0票数 3

下面是一个python脚本,它计算两个图像之间的同源性,然后将所需的点从一个图像映射到另一个图像。

代码语言:javascript
运行
复制
import cv2

import numpy as np


if __name__ == '__main__' :

  # Read source image.
  im_src = cv2.imread(r'C:/Users/kjbaili/.spyder-py3/webcam_calib/homography/khaledd 35.0 sec.jpg')

  # Five corners of the book in source image
  pts_src = np.array([[281, 238], [325, 297], [283, 330],[248, 325],[213, 321]])

  # Read destination image.
  im_dst = cv2.imread(r'C:/Users/kjbaili/.spyder-py3/webcam_calib/homography/20.jpg')

  # Five corners of the book in destination image.
  pts_dst = np.array([[377, 251],[377, 322],[316, 315],[289, 284],[263,255]])



  # Calculate Homography

  h, status = cv2.findHomography(pts_src, pts_dst)


  
  # provide a point i wish to map from image 1 to image 2
  a = np.array([[260, 228]])


  

  pointsOut = cv2.getPerspectiveTransform(a, h)

  # Display image
  cv2.imshow("treced_point_image", pointsOut)


  cv2.waitKey(0)
cv2.destroyAllWindows()

但是,当我显示包含映射点的图像时,它返回以下错误:

代码语言:javascript
运行
复制
error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\core\src\matmul.dispatch.cpp:531: 
error: (-215:Assertion failed) scn + 1 == m.cols in function 'cv::perspectiveTransform'

据我所知,此错误意味着分配给函数透视图转换的参数不正确或不被读取。我在阅读的时候检查了这两张图片,一切都很好。所以有人知道为什么会这样吗?

事先谢谢哈立德

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-07-02 12:20:53

您将错误的参数传递给cv2.getPerspectiveTransform()。该函数期望原始图像中的四个坐标集和转换后的图像中的新坐标集合。您可以直接将pts_srcpts_dst传递给函数,然后得到转换矩阵。然后,您可以通过矩阵乘法得到点"a“的转换坐标,如a_transformed = np.dot(matrix, a)

票数 1
EN

Stack Overflow用户

发布于 2021-12-29 09:46:20

我认为您的代码中有两个错误。首先,使用cv2.getPerspectiveTransform()获取转换矩阵。其次,要完成点的实际转换,需要调用cv2.perspectiveTransform()。cv2.perspectiveTransform()期望输入一个3或4维矩阵。因此,您需要提供类似于以下内容的内容。请注意下面代码中的三维数组"pts“。我在"pts“数组中只有一个点。你可以加更多。

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

src = np.float32([[0, 1280], [1920, 1280], [1920, 0], [0, 0]])    
dst = np.float32([[0, 600], [400, 600], [400, 0], [0, 0]])    
perspective_transform = cv2.getPerspectiveTransform(src, dst)    
pts = np.float32(np.array([[[1920, 1280]]]))    
warped_pt = cv2.perspectiveTransform(pts, perspective_transform)[0]    
print ("warped_pt = ", warped_pt)
票数 1
EN

Stack Overflow用户

发布于 2020-07-02 13:56:05

实际上,我发现函数cv2.findHomography()已经通过找到两个平面之间的透视图转换来完成这项工作,因此我不再需要cv2.perspectiveTransform()。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62695786

复制
相关文章

相似问题

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