立体图像中的深度地图
下面这段代码是 OpenCV-Python-Tutorial-中文版.pdf (P259)中的实现,
当前系列所有demo下载地址:
https://github.com/GaoRenBao/OpenCv4-Demo
https://gitee.com/fuckgrb/OpenCv4-Demo
不同编程语言对应的OpenCv版本以及开发环境信息如下:
语言 | OpenCv版本 | IDE |
C# | OpenCvSharp4.4.8.0.20230708 | Visual Studio 2022 |
C++ | OpenCv-4.5.5-vc14_vc15 | Visual Studio 2022 |
Python | OpenCv-Python (4.6.0.66) | PyCharm Community Edition 2022.1.3 |
测试原图:
tsukuba_l.png

tsukuba_r.png

运行效果:

注意:C++和C#图像看不清~~

C#版本代码如下:
using OpenCvSharp;
namespace demo
{
internal class Program
{
static void Main(string[] args)
{
// read two input images as grayscale images
Mat imgL = Cv2.ImRead("../../../images/tsukuba_l.png", 0);
Mat imgR = Cv2.ImRead("../../../images/tsukuba_r.png", 0);
// Initiate and StereoBM object
StereoBM stereo = StereoBM.Create(0, 21);
// compute the disparity map
Mat disparity = new Mat();
stereo.Compute(imgL, imgR, disparity);
Cv2.ImShow("gray", disparity);
Cv2.WaitKey(0);
}
}
}
C++版本代码如下:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// read two input images as grayscale images
Mat imgL = imread("../images/tsukuba_l.png", 0);
Mat imgR = imread("../images/tsukuba_r.png", 0);
// Initiate and StereoBM object
Ptr<StereoBM> stereo = cv::StereoBM::create(0, 21);
// compute the disparity map
Mat disparity;
stereo->compute(imgL, imgR, disparity);
cv::imshow("gray", disparity);
cv::waitKey(0);
return 0;
}
Python版本代码如下:
import cv2
from matplotlib import pyplot as plt
# read two input images as grayscale images
imgL = cv2.imread('../images/tsukuba_l.png', 0)
imgR = cv2.imread('../images/tsukuba_r.png', 0)
# Initiate and StereoBM object
stereo = cv2.StereoBM_create(numDisparities=0, blockSize=21)
# compute the disparity map
disparity = stereo.compute(imgL, imgR)
plt.imshow(disparity, 'gray')
plt.show()
disparity.shape