案例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给我一个错误吗?
答案 0 :(得分:0)
看起来它是旧OpenCV版本中的一个错误。 OpenCV 2.4.4更改日志的一部分:
许多错误修复和优化,包括:blendLinear,square samples,erode / dilate,Canny,卷积修复与AMD FFT库,平均移位过滤, Stereo BM。
最有可能使用2.4.4或更高版本(我最新的稳定版本)将解决您的问题。