"Access violation reading location 0x0000000000000000",使用 C++ 的 OpenCV 尝试打开图像
"Access violation reading location 0x0000000000000000", OpenCV with C++ trying to opening an image
#include <iostream>
#include <opencv2/highgui.hpp>
using namespace cv;
using namespace std;
// Driver code
int main(int argc, char** argv)
{
//----- COMMAND LINE -----
const String& filename = argv[1];
Mat image = imread(argv[1]);
//----- EXPLICIT WAY -----
//const String& filename = "C:/Users/letto/OneDrive/Things/sonoio.jpg";
//Mat image = imread(filename);
// Error Handling
if (image.empty()) {
cout << "Image File "
<< "Not Found" << endl;
// wait for any key press
cin.get();
return -1;
}
// Show Image inside a window with
// the name provided
imshow("Window Name", image);
// Wait for any keystroke
waitKey(0);
return 0;
}
使用上面的代码,我正在尝试打开图片。
我尝试了两种方法:
- 命令行:我将图像url作为命令传递;
- 明确的方式:我明确地写了图像url。
第二种方法非常有效。
使用第一种方法我得到这个异常:
Exception thrown at 0x00007FFAC1FFF551 (ucrtbased.dll) in OpenImg.exe: 0xC0000005: Access violation reading location 0x0000000000000000.
我正在使用 Visual Studio 代码 2022,所以这是我通过命令行传递 url 的方式:
哪里出错了?请帮我看看,谢谢!
您已根据所附图片为 编译器 设置了额外的命令行参数,而不是 运行.
的应用程序
要向应用程序添加命令行,请右键单击项目 (OpenImg) 并选择“调试”->“命令参数”。
(而且,正如@user4581301 所提到的,通过检查 args 来验证参数是否存在会表明访问 argv[1] 会越界。这是一个很好的学习习惯。)
#include <iostream>
#include <opencv2/highgui.hpp>
using namespace cv;
using namespace std;
// Driver code
int main(int argc, char** argv)
{
//----- COMMAND LINE -----
const String& filename = argv[1];
Mat image = imread(argv[1]);
//----- EXPLICIT WAY -----
//const String& filename = "C:/Users/letto/OneDrive/Things/sonoio.jpg";
//Mat image = imread(filename);
// Error Handling
if (image.empty()) {
cout << "Image File "
<< "Not Found" << endl;
// wait for any key press
cin.get();
return -1;
}
// Show Image inside a window with
// the name provided
imshow("Window Name", image);
// Wait for any keystroke
waitKey(0);
return 0;
}
使用上面的代码,我正在尝试打开图片。
我尝试了两种方法:
- 命令行:我将图像url作为命令传递;
- 明确的方式:我明确地写了图像url。
第二种方法非常有效。 使用第一种方法我得到这个异常:
Exception thrown at 0x00007FFAC1FFF551 (ucrtbased.dll) in OpenImg.exe: 0xC0000005: Access violation reading location 0x0000000000000000.
我正在使用 Visual Studio 代码 2022,所以这是我通过命令行传递 url 的方式:
哪里出错了?请帮我看看,谢谢!
您已根据所附图片为 编译器 设置了额外的命令行参数,而不是 运行.
的应用程序要向应用程序添加命令行,请右键单击项目 (OpenImg) 并选择“调试”->“命令参数”。
(而且,正如@user4581301 所提到的,通过检查 args 来验证参数是否存在会表明访问 argv[1] 会越界。这是一个很好的学习习惯。)