3

AndroidでQCARを使用しており、QCARImageをcvMatに変換してcvtColorで色を変更しようとしています。

cvtColor で以下のエラーが出ましたが、このエラーの意味を知りたいです。(dcn == 3 || dcn == 4)、scn == 2、および深さ == CV_8U の意味は何ですか?

09-23 14:12:54.944: E/cv::error()(23942): OpenCV エラー: アサーションに失敗しました ((dcn == 3 || dcn == 4) && scn == 2 && 深さ == CV_8U) void cv::cvtColor(cv::InputArray, cv::OutputArray, int, int)、ファイル /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 (スレッド 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);
}

下手な英語でごめんなさい。

4

1 に答える 1

4

アサートメッセージはかなり不可解です。解釈は次のとおりです。

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);
于 2013-09-23T07:22:39.900 に答える