Actualmente estoy trabajando con un sensor de profundidad Orbbec Astra Mini. Descargué e instalé el paquete Astra Driver y OpenNI2. El sensor de profundidad se muestra en el administrador de dispositivos en mi Windows 10 tan pronto como lo conecto al puerto USB. Hasta ahora todo está bien.
Mi objetivo es leer RGB images
y depth map
con OpenCV y mostrarlos con imshow
.
El siguiente código se compila bien en Visual Studio 2015, pero aparece este error:
OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow, file C:\build\master_winpack-build-win64-vc14\opencv\modules\highgui\src\window.cpp
... así que supongo que OpenCV no pudo abrir el dispositivo y, por lo tanto, mi cv :: Mat sigue estando vacío.
En algún lugar leí que necesito compilar OpenCV con la bandera OpenNI, ¿es cierto? Si es así, ¿algún enlace útil que pueda ayudarme a progresar? ¿Alguna idea de lo que me podría haber perdido?
#include<iostream>
#include<algorithm>
#include<fstream>
#include<System.h>
#include<time.h>
#include<opencv2/core/core.hpp>
using namespace std;
int main(int argc, char **argv) {
cv::VideoCapture cap;
cap.open(CV_CAP_OPENNI);
cap.set(CV_CAP_OPENNI_IMAGE_GENERATOR_OUTPUT_MODE, CV_CAP_OPENNI_VGA_30HZ);
cap.set(CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION, 1);
cv::Mat im, dm; // rgb image, depth map
while (true)
{
if (cap.grab()) {
cap.retrieve(im, CV_CAP_OPENNI_BGR_IMAGE);
cap.retrieve(dm, CV_CAP_OPENNI_DEPTH_MAP);
} else {
cout << "ERROR: Could not grab image data." << endl;
}
if (!im.data) {
cout << "ERROR: RGB not retrieved." << endl;
}
if (!dm.data) {
cout << "ERROR: Depth map not retrieved." << endl;
}
cv::imshow("Image", im);
cv::imshow("Depth", dm);
if (cv::waitKey(1) >= 0)
break;
}
cap.release();
return 0;
}
ACTUALIZACIÓN 19.02.18:
Problema resuelto compilando las bibliotecas OpenCV con el indicador OpenNI como se describe aquí. ¡Gracias Dmitrii!
Sin embargo, la imagen de profundidad sigue siendo bastante débil. ¿Alguna idea de dónde / cómo ajustar los parámetros? Aunque, al ejecutar las aplicaciones de muestra del Orbbec Astra SDK, la imagen de profundidad es bastante sólida (que funcionan con OpenGL). Entonces, ¿supongo que el problema está en algún lugar dentro de OpenCV?
Aquí hay una captura de pantalla del mapa de profundidad (invertido a blanco, resonancia bastante débil):
2 respuestas
Escribí una guía completa sobre cómo compilar ORB SLAM 2 (que era mi objetivo preliminar) con OpenCV que incluye OpenNI2 para utilizar mi Cámara Orbbec Astra como sensor de profundidad. Con suerte, alguien más que tropiece con este hilo pueda usarlo.
Tu preguntaste:
Sin embargo, la imagen de profundidad sigue siendo bastante débil. ¿Alguna idea de dónde / cómo ajustar los parámetros? Aunque, al ejecutar las aplicaciones de muestra del Orbbec Astra SDK, la imagen de profundidad es bastante sólida (que funcionan con OpenGL). Entonces, ¿supongo que el problema está en algún lugar dentro de OpenCV?
Intente implementar un mapa de color falso a la imagen de profundidad. Los diferentes píxeles de profundidad tienen valores que varían mucho y, por lo tanto, no son fácilmente discernibles si se ven directamente.
// Holds the colormap version of the image:
Mat img_color;
// Apply the colormap:
applyColorMap(img_in, img_color, COLORMAP_JET);
// Show the result:
imshow("colorMap", img_color);
https://docs.opencv.org/3.4.1/d3/d50/group__imgproc__colormap.html
Nuevas preguntas
opencv
OpenCV (Open Source Computer Vision) es una biblioteca para visión por computadora en tiempo real. Cuando utilice esta etiqueta, mencione la versión de OpenCV con la que está trabajando (por ejemplo, 3.4.6) y agregue una etiqueta específica del idioma (python, c ++, ...) si es necesario.