web-dev-qa-db-fra.com

Nombre de canaux non valide dans l'image d'entrée

Je reçois une erreur lors de l'exécution de mon programme, je pense spécifiquement à la manipulation des couleurs dans la bibliothèque OpenCV.

J'essaie de créer un programme qui prend un flux vidéo à partir d'une caméra Raspberry Pi et de l'analyser. Je veux trouver le point le plus lumineux de la vidéo et calculer la distance et l'angle du point par rapport au centre du flux vidéo.

Le projet que je fais a la caméra pointée au centre d'une boîte sombre, avec un point lumineux en mouvement.

J'utilise OpenCV 4.0.0 et C++ sur un Raspberry Pi 3, ainsi que la bibliothèque raspicam .

Je prends des pointeurs de this guide, mais j'utilise C++ et un flux vidéo au lieu de Python et une image statique.

    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);

Je m'attends à ce que le programme prenne une image du flux vidéo, la convertisse en niveaux de gris, trouve la partie la plus lumineuse de l'image et fasse enfin quelques calculs pour trouver la distance au centre de l'image et l'angle du point par rapport au x positif -axe.

C'est l'erreur

Je m'excuse pour l'appareil photo du téléphone, mais je travaille avec quelqu'un d'autre dans une ville différente, où ils ont l'équipement de test (je suis le codeur) et c'est ce qu'ils m'ont envoyé.

4
Deditionis

Vous voulez faire de la manipulation des couleurs mais votre image a le type CV_8U1. Ce doit être au moins une image à trois canaux comme CV_8UC3 ou CV_32F. Essayez un autre CV_Type

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