我的代码:
import cv2
import numpy as np
imgL = cv2.imread('Blender_Suzanne1.jpg')
img1 = cv2.cvtColor(imgL, cv2.COLOR_BGR2GRAY)
imgR = cv2.imread('Blender_Suzanne2.jpg')
img2 = cv2.cvtColor(imgR, cv2.COLOR_BGR2GRAY)
stereo = cv2.StereoBM_create(numDisparities = 16, blockSize = 17)
disparity = stereo.compute(img2, img1)
cv2.imshow('DepthMap', disparity)
cv2.waitKey()
cv2.destroyAllWindows()
当我运行它时,我看到一个全是灰色的窗口?我认为这是错误的。 我在OpenCV docs网站上使用了这段代码。 有人可以帮忙吗?
PS:首先我遇到了一些不允许输出窗口弹出的错误。所以,我在我的代码中添加了两行,即img1和img 2.
答案 0 :(得分:2)
在对其进行标准化后,您也可以使用disparity
显示结果cv2.imshow()
。
norm_image = cv2.normalize(disparity, None, alpha = 0, beta = 1, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_32F)
cv2.imshow('norm_image', norm_image)
注意标准化图像后数据类型的更改。在规范化之前,disparity
的类型为int16
。标准化后,它是float32
(在函数cv2.normalize()
中提到)
答案 1 :(得分:0)
而不是使用imshow
根据文档使用matplotlib
进行可视化。您也可以在读取图像的同一行中将图像转换为灰色。
import cv2
from matplotlib import pyplot as plt
imgL = cv2.imread('Blender_Suzanne1.jpg',0)
imgR = cv2.imread('Blender_Suzanne2.jpg',0)
stereo = cv2.StereoBM_create(numDisparities = 16, blockSize = 17)
disparity = stereo.compute(imgL, imgR)
plt.imshow(disparity,'gray')
plt.show()