Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 Python/OpenCV:为什么cv2.StereoBM在这种情况下不工作?_Python 2.7_Opencv - Fatal编程技术网

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

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:但在最后一行失败:

案例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: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;)构建它),而且非常简单。