Ошибка необработанного исключения OpenCV

Я бегу код, который я использую функции opencv imread () и структура данных Mat.

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;

int main(){
int x;
Mat img = imread("D:/OwnResearch/photo2.jpg");
std::cout << img << std::endl;
std::cin >> x;
return 0;}

И я продолжаю получать сообщение об ошибке «Необработанное исключение» по адресу 0x0000000000000000 в opencvtest.exe: 0xC0000005: Нарушение доступа к месту выполнения 0x0000000000000000. Кажется, что ничего не загружается. Я проверил каталог файла, и он кажется правильным. Я не уверен, в чем проблема.

0

Решение

Возможно, проблема в библиотеках DLL, с которыми вы ссылаетесь. Удостоверьтесь, что вы используете правильные из них — выпустите dll для сборки выпуска и отладочные dll для сборки отладки. Это очень распространенная ошибка, поэтому я предлагаю вам сначала посмотреть на нее. Во-вторых, как уже упоминалось в комментариях и ответе @ 1nflktd, вы также пытаетесь напечатать свое изображение в терминале. Во-первых, я не думаю, что это действительно определено в библиотеке, и, во-вторых, я не вижу смысла в этом (<- Кажется, я был неправ — новый интерфейс C ++ позволяет печатать cv :: Mat напрямую). Если вы хотите напечатать атрибуты изображения, вы можете использовать cv :: Mat :: row, cv :: Mat :: col и т. Д. (См. Вот или просто напиши img.[TRIGGER AUTOCOMPLETE] чтобы получить все, что вы можете получить в объекте cv :: Mat). Если вы действительно хотите распечатать данные (массив пикселей) вашего изображения, вам нужно вызвать cv :: Mat :: data и при необходимости привести их к соответствующему значению. Осторожнее, потому что вы получите огромное количество ценностей. Изображение 10×10 имеет 100 значений, 100×100 имеет 10000 значений, а 1000×1000 имеет 1000000 значений в своем массиве пикселей.

Если с DLL все в порядке, попробуйте сделать следующее:

  1. Создать изображение с помощью Mat img(X,Y,CV_XXXX,Scalar(...)), где Икс а также Y размеры изображения, CV_XXXX является блоком памяти, используемым для хранения данных пикселей (например, CV_32FC2) и Скалярное (…) представляет значения каждого цветового канала, который вы хотите использовать для всех пикселей вашего изображения.
  2. Попробуйте отобразить сгенерированное изображение. У меня был плохой опыт работы в Windows с OpenCV не так давно, когда появилась похожая ошибка, потому что я удалил stdafx.h в Visual Studio, что привело к неправильной интерпретации строки, которую я передал резюме :: imread (…) функция. Так я обычно видел, откуда возникла проблема. Если вы работаете на компьютере с Windows, и у вас есть эта проблема, это также хорошее место. Если процедурно сгенерированное изображение загружается и отображается правильно, возможно, это проблема (если вы удалили вышеупомянутый заголовок).
1

Другие решения

Если вы хотите отобразить свое изображение, просто используйте imgshow

Mat img = imread("D:/OwnResearch/photo2.jpg");
if(!img.data) // check if it is loaded
{
cout <<  "Could not open or find the image" << std::endl ;
return -1;
}

namedWindow("TestWindow", WINDOW_AUTOSIZE); // Create a window for display.
imshow("TestWindow", img); // Show our image inside it.
waitKey(0); // Wait for a keystroke in the window
return 0;

Для получения дополнительной информации см. Документы

0

По вопросам рекламы [email protected]