web-dev-qa-db-fra.com

Erreur OpenCV: Échec de l'assertion (size.width> 0 && size.height> 0) code simple

J'essaie d'exécuter ce programme OpenCV simple, mais j'ai eu cette erreur:

OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file .../opencv/modules/highgui/src/window.cpp, line 276

Code:

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;

int main()
{
    cout << "Hello World!" << endl;

    cv::Mat inputImage = cv::imread("/home/beniz1.jpg");
    cv::imshow("Display Image", inputImage);

    return 0;
}

Quelle est la cause de cette erreur?

12
user3191398

Cette erreur signifie que vous essayez d'afficher une image vide. Lorsque vous chargez l'image avec imshow, cela est généralement dû à:

  1. Le chemin de votre image est incorrect (dans Windows, séparez deux fois les délimiteurs de répertoire, par exemple imread("C:\path\to\image.png") devrait être: imread("C:\\path\\to\\image.png") ou imread("C:/path/to/image.png"));
  2. L'extension d'image est incorrecte. (par exemple, ".jpg" est différent de ".jpeg");
  3. Vous n'avez pas les droits d'accès au dossier.

Une solution de contournement simple pour exclure d'autres problèmes consiste à placer l'image dans le répertoire de votre projet et à passer simplement à imread le nom de fichier (imread("image.png")).

N'oubliez pas d'ajouter waitKey();, sinon vous ne verrez rien.

Vous pouvez vérifier si une image a été chargée correctement comme:

#include <opencv2\opencv.hpp>
#include <iostream>
using namespace cv;

int main()
{
    Mat3b img = imread("path_to_image");

    if (!img.data)
    {
        std::cout << "Image not loaded";
        return -1;
    }

    imshow("img", img);
    waitKey();
    return 0;
}
13
Miki

J'ai eu exactement le même problème, uniquement dans Raspbian. Après des heures d'essais, la solution était assez simple, j'ai dû omettre l'extension du fichier.

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;
int main()
{
    Mat inputImage = imread("beniz1");
    imshow("Display Image", inputImage);
    waitKey(5000);

    return 0;
}
1
Fade

Habituellement, cela signifie que votre image n'est pas là, c'est une assertion de base pour vérifier si le contenu est affichable dans la fenêtre avant de l'afficher, et au fait, vous devez créer une fenêtre afin d'afficher l'image nommée Windows ("nom" ) puis imshow ("nom", image);

1
David Safrastyan

revérifiez votre chemin vers une image

0
Sanzhar Askaruly