Python / OpenCV:为什么cv2.StereoBM在这种情况下不起作用?

时间:2015-04-26 21:16:42

标签: python-2.7 opencv

案例1:此代码运行良好:

import numpy as np
import cv2
from matplotlib import pyplot as plt

imgL = cv2.imread('lena.png', 0)
imgR = cv2.imread('lena.png', 0)

stereo = cv2.StereoBM(0, ndisparities=16, SADWindowSize=15)
stereo.compute(imgL, imgR)

案例2:但是最后一行失败了:

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('lena.png', 1)
imgR = img[:,:,2]
imgL = img[:,:,1]

stereo = cv2.StereoBM(0, ndisparities=16, SADWindowSize=15)
stereo.compute(imgL, imgR)

错误说:

  

错误:/build/buildd/opencv-2.3.1/modules/calib3d/src/stereobm.cpp:802:错误:(-211)SADWindowSize必须是奇数,在5..255之内且不大于函数中的图像宽度或高度findStereoCorrespondenceBM

真的奇怪的是,即使我在imgR =imgL =起始行前面放了两行,它也会失败并显示相同的消息,即:

img = cv2.imread('lena.png', 1)
img[:,:,2] = cv2.imread('lena.png', 0)
img[:,:,1] = cv2.imread('lena.png', 0)
imgR = img[:,:,2]
imgL = img[:,:,1]

我还是对Python很陌生,所以也许是一个误解:有人可以解释为什么案例1有效但案例2给我一个错误吗?

1 个答案:

答案 0 :(得分:0)

看起来它是旧OpenCV版本中的一个错误。 OpenCV 2.4.4更改日志的一部分:

  

许多错误修复和优化,包括:blendLinear,square samples,erode / dilate,Canny,卷积修复与AMD FFT库,平均移位过滤, Stereo BM。

最有可能使用2.4.4或更高版本(我最新的稳定版本)将解决您的问题。