Python 2.7 Python/OpenCV:为什么cv2.StereoBM在这种情况下不工作?
案例1:此代码运行良好:Python 2.7 Python/OpenCV:为什么cv2.StereoBM在这种情况下不工作?,python-2.7,opencv,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
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:error:(-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给了我一个错误吗?看起来它是旧OpenCV版本中的一个bug。OpenCV 2.4.4变更日志的一部分: 大量错误修复和优化,包括:blendLinear、方形样本、腐蚀/扩张、Canny、AMD FFT库卷积修复、均值漂移滤波、立体声BM。
最有可能使用2.4.4或任何更高版本(我建议您使用最新的稳定版本)将解决您的问题。检查imgL和imgR的大小-
打印imgL.shape,imgR.shape
,它们可能不同或等于0。另外,尝试使用其他版本的OpenCV-2.3.1已经有3.5年的历史了,为什么不使用最新的稳定版本-2.4.10或最终的beta版(3.0)?这个问题在版本2.4.9中是不可复制的。你是对的,它可以用OpenCV 2.3.1复制,但不能用OpenCV 2.4.8复制。Ubuntu12.04LTS上没有2.4版本是一件很遗憾的事情。试着从源代码开始构建它,这应该不难。OpenCV使用cmake,所以您可以使用简单的配置一切,但漂亮的gui和cmake将处理大多数配置内容。我已经在Windows上做过几次了(这不是最简单的从源代码frienly OS;)构建它),而且非常简单。