Как я могу исправить ошибку «Exception Thrown» в OpenCV? - PullRequest
1 голос
/ 02 июля 2019

Я сталкиваюсь с ошибкой при компиляции моей программы OpenCV в Visual Studio 2017. Ошибка произошла, когда я использовал функцию imwrite для сохранения изображения в градациях серого. Вы можете увидеть скриншот здесь

the screen capture here

Я пытался скопировать файл opencv_world320.dll в мой проект каталога, но все еще не в порядке.

Это код:

#include <opencv2/opencv.hpp>
#include <opencv/highgui.h>
#include <iostream>
using namespace std;
using namespace cv;

int main(int argv, char** argc)
{
   Mat img_original = imread("lisa.jpg",CV_LOAD_IMAGE_UNCHANGED);
   Mat img_grayscale = imread("lisa.jpg", CV_LOAD_IMAGE_GRAYSCALE);

   imshow("Lisa-Original", img_original);
   imshow("Lisa-Grayscale", img_grayscale);

   imwrite("LisaGray.jpg", img_grayscale);
   waitKey(0);
   return 0;
}

Это исключение:

Исключение выдается в 0x00007FFC7D9B86C2 (opencv_world320.dll) в 1_open_image_lisa.exe: 0xC0000005: место чтения нарушения прав доступа 0x000001926A40F000. произошло

1 Ответ

1 голос
/ 03 июля 2019

Код сам по себе не является неправильным, и даже если imread не был успешным, imwrite не сработает.(Хотя пустой cv :: Mat, записанный в jpg-файл, создает пустые файлы, которые не распознаются как допустимые файлы изображений).

Итак, чтобы точно определить вашу проблему, используйте механизм try / catch:

try {
    imshow("Lisa-Original", img_original);
    imshow("Lisa-Grayscale", img_grayscale);

    imwrite("LisaGray.jpg", img_grayscale);
}
catch(cv::Exception& e) {
    std::cout << e.msg << std::endl;
}

На моем компьютере, когда imwrite не удается из-за формата, сообщение:

OpenCV(4.0.0) D:\Dev\Opencv4\opencv-4.0.0\opencv-4.0.0\modules\imgcodecs\src\loadsave.cpp:661: error: (-2:Unspecified error) could not find a writer for the specified extension in function 'cv::imwrite_'

В этом случае попробуйте использовать другой формат для сохранения изображения и / или проверьте, скомпилирован ли opencv с правильными параметрами и библиотеками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...