Я бегу код, который я использую функции 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. Кажется, что ничего не загружается. Я проверил каталог файла, и он кажется правильным. Я не уверен, в чем проблема.
Возможно, проблема в библиотеках 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 все в порядке, попробуйте сделать следующее:
Mat img(X,Y,CV_XXXX,Scalar(...))
, где Икс а также Y размеры изображения, CV_XXXX является блоком памяти, используемым для хранения данных пикселей (например, CV_32FC2) и Скалярное (…) представляет значения каждого цветового канала, который вы хотите использовать для всех пикселей вашего изображения.Если вы хотите отобразить свое изображение, просто используйте 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;