我在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);
}
抱歉我的英语不好。
答案 0 :(得分:2)
断言信息非常含义,这是解释:
scn
和dcn
分别是源图像和目标图像中的通道数。而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);