stereolabs上的访问冲突错误

时间:2018-02-14 14:20:30

标签: opencv c++14

我正在编写一个程序,将用StereoLabs ZED立体摄像机感应的图像转换为OpenCV图像,进行一些处理,这里是代码(如果我不知道是否知道是否包含设置部分)问题可能存在):

#include "stdafx.h"
#include "sl/camera.hpp"
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;
using namespace sl;

cv::Mat zed_to_ocv(sl::Mat zed_mat) {

    int cv_type = -1;

    switch (zed_mat.getDataType()) {
        case MAT_TYPE_32F_C1: cv_type = CV_32FC1; break;
        case MAT_TYPE_32F_C2: cv_type = CV_32FC2; break;
        case MAT_TYPE_32F_C3: cv_type = CV_32FC3; break;
        case MAT_TYPE_32F_C4: cv_type = CV_32FC4; break;
        case MAT_TYPE_8U_C1: cv_type = CV_8UC1; break;
        case MAT_TYPE_8U_C2: cv_type = CV_8UC2; break;
        case MAT_TYPE_8U_C3: cv_type = CV_8UC3; break;
        case MAT_TYPE_8U_C4: cv_type = CV_8UC4; break;
        default: break;
    }

    return cv::Mat(zed_mat.getHeight(), zed_mat.getWidth(), cv_type, zed_mat.getPtr<sl::uchar1>(MEM_CPU));

}

int main(int argc, char **argv) {

    InitParameters parameters;
    parameters.depth_mode = DEPTH_MODE_PERFORMANCE;
    parameters.coordinate_units = UNIT_METER;
    parameters.camera_fps = 30;
    if (argc > 1) {
        parameters.svo_input_filename = argv[1];
    }
    sl::Camera zed;

    ERROR_CODE err = zed.open(parameters);
    if (err != SUCCESS) {
        zed.close();
        cout << "Error while opening ZED camera";
        return -1;
    }

    RuntimeParameters runtime_parameters;
    runtime_parameters.sensing_mode = SENSING_MODE_STANDARD;

    Resolution image_size = zed.getResolution();
    int new_width = image_size.width;
    int new_height = image_size.height;

    sl::Mat image_zed(new_width, new_height, MAT_TYPE_8U_C4);
    cv::Mat image_ocv = zed_to_ocv(image_zed);
    cv::Mat image(new_width, new_height, CV_8UC1);

    while (true) {
        if (zed.grab(runtime_parameters) == SUCCESS) {
            zed.retrieveImage(image_zed, VIEW_LEFT, MEM_CPU, new_width, new_height);

            cv::cvtColor(image_ocv, image, CV_BGRA2GRAY);

            imshow("camera", image);
            waitKey(30);
        }
    }

    zed.close();
    return 0;
}

这段代码工作正常,但如果我想改用32F矩阵(更改 image_zed 图像的类型),我会得到一个

Exception in correspondence of 0x00007FF97D175400 (opencv_imgproc340d.dll) in projectCV.exe: 0xC0000005: access violation error reading 0x000002C52DC13040.

错误。我尝试过改为

getPtr<sl::float1>

zed_to_ocv 中,但错误仍然存​​在。

编辑:调试我发现崩溃发生在

cv::cvtColor(image_ocv, image, CV_BGRA2GRAY);

但我仍然无法弄清楚原因。

这是什么问题?感谢。

0 个答案:

没有答案