Python/OpenCV: cálculo de un mapa de profundidad a partir de imágenes estéreo
depth (3)
La cámara se traduce verticalmente en lugar de horizontalmente . Gire las imágenes 90 grados, luego intente. (Pruébalo girando la pantalla. Acabo de levantar mi computadora portátil y ponerla en su borde).
Usted menciona diferentes programas; quizás un tipo de cosa row-major / column-major entre el original y pyOpenCV.
Tengo dos imágenes estéreo que me gustaría usar para calcular un mapa de profundidad. Aunque desafortunadamente no conozco C / C ++, sí sé Python, así que cuando encontré este tutorial , me sentí optimista.
Desafortunadamente, el tutorial parece estar un poco desactualizado. No solo necesita modificarse para ejecutarse (cambiar el nombre de ''createStereoBM'' a ''StereoBM''), pero cuando se ejecuta, no da un buen resultado, incluso en las estereoimágenes de ejemplo que se usaron en el tutorial mismo. .
Aquí hay un ejemplo:
import numpy as np
import cv2
from matplotlib import pyplot as plt
imgL = cv2.imread(''Yeuna9x.png'',0)
imgR = cv2.imread(''SuXT483.png'',0)
stereo = cv2.StereoBM(1, 16, 15)
disparity = stereo.compute(imgL, imgR)
plt.imshow(disparity,''gray'')
plt.show()
El resultado:
Esto se ve muy diferente de lo que logra el autor del tutorial:
buen resultado http://docs.opencv.org/trunk/_images/disparity_map.jpg
Afinar los parámetros no mejora las cosas. Toda la documentación que he podido encontrar es para la versión C original del código openCV, no para python-library-equivalent. Desafortunadamente no he podido usar esto para mejorar las cosas.
¡Cualquier ayuda sería apreciada!
Es posible que necesite seguir ajustando los parámetros del algoritmo de coincidencia de bloques.
eche un vistazo a este artículo de blog: https://erget.wordpress.com/2014/03/13/building-an-interactive-gui-with-opencv/
El autor del artículo ha compuesto un conjunto de clases para hacer que el proceso de calibración de las cámaras sea más sencillo que el tutorial de opencv. Estas clases están disponibles como paquete pypi: https://github.com/erget/StereoVision
Espero que esto ayude :)
Tienes las imágenes al revés.
Mire las imágenes, la lata detrás de la lámpara le permite calcular la ubicación de las dos imágenes en la cámara,
Solo cambia esto:
# v
imgR = cv2.imread(''Yeuna9x.png'',0)
imgL = cv2.imread(''SuXT483.png'',0)
# ^
Si miras la imagen en el tutorial que dicen que es el marco left
, es igual a la right
.
Aquí está mi resultado después del cambio.