1

我是 Python 和 openCV 的新手,所以如果这很简单,我提前道歉。我正在尝试遵循http://altruisticrobot.tistory.com/219上的深度图代码。在下面的代码中ConvertScale引发以下错误:

src.size == dst.size && src.channels() == dst.channels()

我花了几天时间,不知道为什么。任何指针将不胜感激。提前致谢。

im_l = cv.LoadImage('C:\Python27\project\captureL6324.png',cv.CV_LOAD_IMAGE_GRAYSCALE)
im_r = cv.LoadImage('C:\Python27\project\captureR6324.png',cv.CV_LOAD_IMAGE_GRAYSCALE)
imsize = cv.GetSize(im_l)
disp = cv.CreateImage(imsize,cv.IPL_DEPTH_16S,1)# to receive Disparity
#run stereo Correspondence-- returns a single channel 16 bit signed disparity
disparity = cv.FindStereoCorrespondenceBM(im_r,im_l,disp,cv.CreateStereoBMState())
#convert to a real disparity by dividing it by 16-- first create variable to hold the  converted scale
real_disparity = cv.CreateImage(imsize,cv.IPL_DEPTH_16S,1)
cv.ConvertScale(disparity, real_disparity, -16,0)
#get the point cloud
depth = cv.CreateImage(cv.GetSize(im_l),cv.IPL_DEPTH_32F,3)
cv.ReprojectIMageTo3D(real_disparity,depth, ReprojectMatrix)
4

1 回答 1

0

您的问题是,FindStereoCorrespondenceBM将结果保存在第三个参数中,但您使用的是返回值,None用于进一步计算。这会导致错误,因为需要特定大小和类型的矩阵。

所以只要改变

cv.ConvertScale(disparity, real_disparity, -16,0)

cv.ConvertScale(disp, real_disparity, -16,0)

为了运行整个脚本,我还将最后一行更改为

ReprojectMatrix = cv.CreateMat(4,4,cv.CV_32FC1);
cv.ReprojectImageTo3D(real_disparity,depth, ReprojectMatrix)

这个脚本对我来说运行没有错误。但我还没有检查它是否给出了正确的结果。

于 2013-04-04T16:42:57.597 回答