gpt4 book ai didi

python - 图像处理 : Bad Quality of Disparity Image with OpenCV

转载 作者:太空宇宙 更新时间:2023-11-03 21:29:00 24 4
gpt4 key购买 nike

我想使用来自低分辨率 USB 相机的两张图像创建视差图像。我正在使用 OpenCV 4.0.0。我使用的帧取自视频。我目前得到的结果非常糟糕(见下文)。

disparity

两台相机都经过校准,校准数据用于消除图像失真。是不是因为左图和右图的分辨率低?

左:

left

右:

right

为了更好地猜测还有两个图像的叠加。

叠加层:

overlay

cv2.StereoSGBM_create() 函数的值基于 OpenCV 附带的示例代码(位于 OpenCV/samples/python/stereo_match.py​​).

如果有任何帮助或建议,我将不胜感激。

这是我的代码:

# convert both image to grayscale
left = cv2.cvtColor(left, cv2.COLOR_BGR2GRAY)
right = cv2.cvtColor(right, cv2.COLOR_BGR2GRAY)

# set the disparity matcher
window_size = 3
min_disp = 16
num_disp = 112-min_disp
stereo = cv2.StereoSGBM_create(minDisparity = min_disp,
numDisparities = num_disp,
blockSize = 16,
P1 = 8*3*window_size**2,
P2 = 32*3*window_size**2,
disp12MaxDiff = 1,
uniquenessRatio = 10,
speckleWindowSize = 100,
speckleRange = 32
)

# compute disparity
dis = stereo.compute(left, right).astype(np.float32) / 16.0

# display the computed disparity image
matploitlib.pyplot.imshow(dis, 'gray')
matploitlib.pyplot.show()

最佳答案

大多数立体算法都需要对输入图像进行校正。校正变换图像,使相应的对极线在两个图像中都是相应的水平线。对于整改,您需要了解相机的内在和外在参数。

OpenCV 拥有执行校准和校正所需的所有工具。如果您需要进行校准,您还需要有一个可用的校准图案(棋盘)。

简而言之:

  1. 使用 calibrateCamera() 计算相机内在参数.
  2. 使用内部参数 stereoCalibrate()执行立体对的外部校准。
  3. 使用来自stereoCalibrate() 的参数,使用stereoRectify() 计算整流参数
  4. 使用校正参数,计算用于校正和不失真的 map initUndistortRectifyMap()

现在您的相机已校准,您可以使用 remap() 执行校正和去畸变对于用相机对拍摄的图像(只要相机不相对移动)。通过 remap() 计算的校正图像现在可用于计算视差图像。

此外,我建议您查阅有关该主题的一些相关教科书。 Learning OpenCV: Computer Vision with the OpenCV Library 对该过程进行了非常实用的描述。

关于python - 图像处理 : Bad Quality of Disparity Image with OpenCV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58150354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com