Ошибка 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
дважды проверьте свой путь к изображению