web-dev-qa-db-ja.com

入力画像のチャンネル数が無効です

プログラムを実行するとエラーが発生します。OpenCVライブラリでの色操作について特に考えています。

Raspberry Piカメラからビデオフィードを取得して分析するプログラムを構築しようとしています。ビデオで最も明るいポイントを見つけて、ビデオフィードの中心からのポイントの距離と角度を計算します。

私が行っているプロジェクトでは、カメラが暗いボックスの中心に向けられており、光の移動点があります。

Raspberry Pi 3でOpenCV 4.0.0とC++、および raspicam ライブラリを使用しています。

this ガイドからポインタを取得していますが、Pythonと静的画像の代わりにC++とビデオフィードを使用しています。

    raspicam::RaspiCam_Cv Camera;
    cv::Mat image;
    cv::Mat gray;
    int nCount=100;
    int nR, nC;         // numRows, numCols
    cv::Point imgMid;
    Vect toCenter;

    // for recording brightest part of img
    double minVal, maxVal;
    cv::Point minLoc, maxLoc;

    Camera.set(cv::CAP_PROP_FORMAT, CV_8UC1);

    #ifdef DEBUG
    cout << "Opening camera..." << endl;
    if (!Camera.open()) {
        cerr << "Error opening the camera" << endl;
        return -1;
    }
    cout << "Capturing " << nCount << " frames ...." << endl;
    #endif

    for (int i=0; i< nCount; i++) {
        Camera.grab();
        Camera.retrieve(image);
        nR = image.rows;
        nC = image.cols;
        imgMid.x = nC / 2;
        imgMid.y = nR / 2;

        // convert to grayscale image
        cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);

        // find x, y coord of brightest part of img
        cv::minMaxLoc(gray, &minVal, &maxVal, &minLoc, &maxLoc);

        // calculate vector to the center of the camera
        toCenter.first = distBtwn(imgMid.x, maxLoc.x, imgMid.y, maxLoc.y);
        toCenter.second = angle(imgMid.x, maxLoc.x, imgMid.y, maxLoc.y);

プログラムがビデオフィードのフレームを取得し、それをグレースケールに変換し、フレームの最も明るい部分を見つけ、最後にいくつかの計算を行って、フレームの中心までの距離と、正のxからのポイントの角度を見つけます。 -軸。

これはエラーです

私は電話のカメラをお詫びしますが、私は別の都市で他の誰かと一緒に働いています。彼らはテスト機器を持っています(私はコーダーです)、これは彼らが私に送ったものです。

4
Deditionis

色を操作したいが、画像のタイプがCV_8U1である。 CV_8UC3やCV_32Fのような少なくとも3チャンネルの画像である必要があります。別のCV_Typeを試す

Camera.set(cv::CAP_PROP_FORMAT, CV_32F);
0
Muhammed Yücel