OpenCV 4.1.1 выдает исключение с OpenNI 2.2 + Kinect 1 - PullRequest
1 голос
/ 03 июля 2019

Я пытаюсь использовать Kinect1 с OpenCV 4.1.1 + OpenNI2.2 + QT + MSVC2017 x64.Я могу захватывать видео / изображения / ИК-изображения / ИК-видео и т. Д. С помощью своего кода.Однако датчик глубины и кулачок RGB не откалиброван.Я перепробовал все рекомендуемые решения, но ни один из них не помог.Обратите внимание, что я собрал OpenCV с включенными WITH_OPENNI2 и WITH_OPENNI.

Возникает исключение (генерируется с помощью общего кода ниже)

[ОШИБКА: 0] global C: \ Users \ имя пользователя \ Downloads \ opencv-master \ modules \ videoio \src \ cap.cpp (187) cv :: VideoCapture :: open VIDEOIO (OPENNI2): повышенное исключение OpenCV:

OpenCV (4.1.1-pre) C: \ Users \ имя пользователя \ Downloads \ opencv-master\ modules \ videoio \ src \ cap_openni2.cpp: 359: ошибка: (-2: неопределенная ошибка) OpenCVKinect2: не удалось установить режим вывода потока IR: в функции 'CvCapture_OpenNI2 :: toggleStream'

Я также пробовал эти (для калибровки): OpenCV OpenNI калибровать Kinect Глубина 3D-отображения в RGB (Kinect OpenNI Depthmap в OpenCV RGB Cam)

Код нижепредоставляется в Глубина трехмерного отображения в RGB (Kinect OpenNI Depthmap в OpenCV RGB Cam) , и это вызывает исключение.

#include "opencv2/highgui/highgui.hpp"

#include <iostream>

using namespace cv;
using namespace std;

int main(){
    VideoCapture capture;
    capture.open(CV_CAP_OPENNI);
    //registration
    if(capture.get( CV_CAP_PROP_OPENNI_REGISTRATION ) == 0) capture.set(CV_CAP_PROP_OPENNI_REGISTRATION,1);

    if( !capture.isOpened() ){
        cout << "Can not open a capture object." << endl;
        return -1;
    }
    cout << "ready" << endl;

    for(;;){
        Mat depthMap,depthShow;
        if( !capture.grab() ){
            cout << "Can not grab images." << endl;
            return -1;
        }else{
            if( capture.retrieve( depthMap, CV_CAP_OPENNI_DEPTH_MAP ) ){
                const float scaleFactor = 0.05f;
                depthMap.convertTo( depthShow, CV_8UC1, scaleFactor );
                imshow("depth",depthShow);
            }
        }
        if( waitKey( 30 ) == 27 )    break;//esc to exit
    }

}

Более интересная вещь, когда я запускаю этот код, большечем один раз подряд, это работает.Но при первом запуске это исключение.В чем может быть проблема?Я могу успешно снимать видео с помощью OpenNI, но мне нужно, чтобы OpenCV напрямую работал с Kinect, а затем калибровал датчики Kinect и камеру RGB.Любая помощь по этим вопросам высоко ценится.Заранее спасибо !

...