如何解决OpenCV中的“抛出异常”错误?

时间:2019-07-02 16:31:24

标签: c++ image visual-studio opencv exception

在Visual Studio 2017中编译我的OpenCV程序时遇到错误。当我使用函数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。发生

2 个答案:

答案 0 :(得分:1)

代码本身并没有错,即使读取未成功,也不会抛出该写入。 (尽管,将空的cv :: Mat写入jpg文件会创建空文件,这些文件不会被识别为有效的图像文件)。

因此,要找出确切的问题,请使用try / catch机制:

alerty.addAction(UIAlertAction(title: "Just Checking",
                      style: UIAlertActionStyle.Default,
                    handler: {(alert: UIAlertAction!) in print("Are You Sure You Want to Start over")}))

在我的计算机上,如果由于格式而导致写入失败,则消息为:

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

在这种情况下,请尝试使用另一种格式保存图片,和/或检查opencv是否使用正确的选项和库进行编译。

答案 1 :(得分:0)

它也是我的。运行C ++代码时,可以使用“发行”配置而不是“调试”。它对我有用,但不知道为什么!