在Visual Studio 2017中编译我的OpenCV程序时遇到错误。当我使用函数imwrite
保存灰度图像时,发生了错误。您可以在此处查看屏幕截图
我试图将文件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。发生
答案 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 ++代码时,可以使用“发行”配置而不是“调试”。它对我有用,但不知道为什么!