我想知道cv错误的含义

时间:2013-09-23 05:28:36

标签: android c++ opencv

我在android中使用QCAR,并尝试将QCARImage转换为cvMat并使用cvtColor更改颜色。

我在cvtColor中遇到以下错误,我想知道这个错误的含义。 每个(dcn == 3 || dcn == 4),scn == 2和depth == CV_8U是什么意思?

09-23 14:12:54.944:E / cv :: error()(23942):OpenCV错误:断言失败((dcn == 3 || dcn == 4)&& scn == 2 &void;& depth == CV_8U)in void cv :: cvtColor(cv :: InputArray,cv :: OutputArray,int,int),file / home / reports / ci / slave_desktop / 50-SDK / opencv / modules / imgproc /src/color.cpp,第3389行 09-23 14:12:54.944:A / libc(23942):0xdeadbaad(代码= 1)的致命信号11(SIGSEGV),线程23963(Thread-884)

这是我的代码

QCAR::State state = QCAR::Renderer::getInstance().begin();

// Explicitly render the Video Background
QCAR::Renderer::getInstance().drawVideoBackground();

//get the captured frame of camera
QCAR::Image *img = NULL;
QCAR::Frame frame = state.getFrame();
//getting qcar::image data from QCAR
for (int i = 0; i < frame.getNumImages(); ++i) {
    const QCAR::Image *QCARimage = frame.getImage(i);
    LOGD("format %d", QCARimage->getFormat());
    if (QCARimage->getFormat() == QCAR::RGB565) {
        img = (QCAR::Image*) QCARimage;
        break;
    }
}

if(img){
    //converting to mat
    Mat capture = Mat(img->getHeight(), img->getWidth(), CV_8UC3, (unsigned char *)img->getPixels());

cvtColor(capture, capture, CV_BGR5652BGR, 0);
}

抱歉我的英语不好。

1 个答案:

答案 0 :(得分:2)

断言信息非常含义,这是解释:

scndcn分别是源图像和目标图像中的通道数。而depth就是源图像和目标图像的深度。

因此,在英语中,这意味着您的输入图像必须具有CV_8UC2类型(因为5 + 6 + 5 = 16位= 2个字节),并且您的目标图像必须具有CV_8UC3或CV_8UC4类型。

此外,您无法就地进行转换,因此(希望)正确的代码应如下所示:

Mat capture = Mat(img->getHeight(), img->getWidth(), CV_8UC2, (unsigned char *)img->getPixels());
Mat converted = Mat(img->getHeight(), img->getWidth(), CV_8UC3);
cvtColor(capture, converted, CV_BGR5652BGR, 0);