Ошибка OpenCV: утверждение не выполнено (size.width> 0 && size.height> 0) простой код

Я пытаюсь запустить эту простую программу OpenCV, но я получил эту ошибку:

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

код:

#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;
}

Какова причина этой ошибки?

Ответ 1

Эта ошибка означает, что вы пытаетесь показать пустое изображение. Когда вы загружаете изображение с помощью imshow, это обычно вызвано:

  • Путь вашего изображения неверен (в Windows дважды дублируются разделители каталогов, например imread("C:\path\to\image.png") должен быть: imread("C:\\path\\to\\image.png") или imread("C:/path/to/image.png"));
  • Неправильное расширение изображения. (например, ".jpg" отличается от ".jpeg" );
  • У вас нет прав на доступ к папке.

Простым обходным решением для исключения других проблем является размещение изображения в каталоге проекта и просто переход к imread имени файла (imread("image.png")).

Не забудьте добавить waitKey();, иначе вы ничего не увидите.

Вы можете проверить, правильно ли загружено изображение, например:

#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;
}

Ответ 2

Обычно это означает, что вашего изображения нет, это основное утверждение для проверки того, отображается ли содержимое в окне перед его фактическим отображением, и, кстати, вам нужно создать окно, чтобы показать изображение namedWindow ( "name" ), затем imshow ( "имя", изображение);

Ответ 3

У меня была такая же проблема, только в Raspbian. После нескольких часов попыток решение было довольно простым, мне пришлось оставить расширение файла.

#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;
}

Ответ 4

дважды проверьте свой путь к изображению