尝试将图像上的点投影到2D平面时使用OpenCV通道

时间:2019-05-07 07:57:25

标签: python opencv

我目前正尝试在下图中投射黑点: enter image description here

到下图的2D平面: enter image description here

对于“ pts_dst”,我使用以下坐标: enter image description here

从同一位置拍摄现场照片的点。

我的代码如下:

import cv2
import numpy as np

if __name__ == '__main__':
    # Read source image.
    im_src = cv2.imread('field2.png')
    # Four corners of the book in source image
    pts_src = np.array([[436, 181], [319, 181], [539, 314], [180, 312]])

    # Read destination image.
    im_dst = cv2.imread('field1.png')
    # Four corners of the book in destination image.
    pts_dst = np.array([[297, 233], [297, 139], [55, 234], [54, 139]])

    # Calculate Homography
    h, status = cv2.findHomography(pts_src, pts_dst)

    # provide a point you wish to map from image 1 to image 2
    a = np.array([[493, 274]], dtype='float32')
    a = np.array([a])

    pointsOut = cv2.perspectiveTransform(a, h)

    # Display image
    cv2.imshow("Warped Source Image", pointsOut)

    cv2.waitKey(0)

但是我遇到以下错误:

  

cv2.imshow(“ Warped Source Image”,pointsOut)

     

cv2.error:OpenCV(3.4.2)   /io/opencv/modules/imgcodecs/src/utils.cpp:622:错误:(-15:错误编号   的通道)源图像必须具有1、3或4个通道   'cvConvertImage'

由于某种原因,这个问题对我来说很难解决-可能是我刚接触OpenCV时-但我似乎无法解决。

好像是在指

pointsOut = cv2.perspectiveTransform(a, h)

我发现this answer是一个类似的问题,但由于我已经将其设置为浮点数,因此无法解决我的问题。

如果我使用perspectiveTransform()无法做到,那么有人对我做错了什么或解决此问题的更好方法有任何建议吗?

编辑:我发现了this solution,但是当我添加多余的括号时,它将引发新的错误。

  

pointsOut = cv2.perspectiveTransform(a,h)cv​​2.error:OpenCV(3.4.2)   /io/opencv/modules/core/src/matmul.cpp:2268:错误:(-215:Assertion   失败)scn + 1 == m.cols in函数'perspectiveTransform'

我还尝试在处理之前将两个图像都转换为灰度,但是仍然收到通道错误。

1 个答案:

答案 0 :(得分:1)

cv2.perspectiveTransform是一个返回点而不是图像的函数。您必须绘制由其返回的点。例如,

pointsOut = cv2.perspectiveTransform(a, H)
cv2.polylines(im_src, [np.int32(pointsOut)], True, (0, 255, 0), 5)

话虽如此,我的方法是先进行透视变换,然后将其包裹在图像周围。类似于此代码段

M = cv2.getPerspectiveTransform(rect, dst)
warped = cv2.warpPerspective(image, M, (maxWidth, maxHeight))

其中maxWidth和maxHeight是源图像的

您可以在此处参考更多内容, https://www.pyimagesearch.com/2014/08/25/4-point-opencv-getperspective-transform-example/