我运行此示例cod,我得到运行时异常
#include "stdafx.h"
#include <iostream>
using namespace std;
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace cv;
int _tmain(int argc, char** argv)
{
//IplImage* img = cvLoadImage( "Walk1001.jpg" ,1 );
IplImage* img =cvLoadImage( argv[1] );
if(!img)
cout << "Could not open or find the image" << endl ;
cvNamedWindow( "Example1", 1 );
cvShowImage( "Example1", img );
cvWaitKey(0);
cvReleaseImage( &img );
cvDestroyWindow( "Example1" );
return 0;
}
当我使用IplImage* img = cvLoadImage( "Walk1001.jpg" ,1 );
代替此IplImage* img =cvLoadImage( argv[1] );
程序时运行正常。但否则我得错了。
与argv
有什么关系。我遇到过许多程序,其中图像通过一些argv[]
syntex加载!如何使用这个数组(argv[]
)或其他什么?
答案 0 :(得分:1)
要使用argv数组,你必须为你的程序提供参数(来自cmdline或类似的)
prog.exe Walk1001.jpg 19
现在argv拥有3个元素,[“prog.exe”,“Walk1001.jpg”,“19”]和argc == 3
在你的程序中,执行:
char * imgPath="Walk1001.jpg"; // having defaults is a good idea
if ( argc > 1 ) // CHECK if there's actual arguments !
{
imgPath = argv[1]; // argv[0] holds the program-name
}
int number = 24;
if ( argc > 2 ) // CHECK again, if there's enough arguments
{
number = atoi(argv[2]); // you get the picture..
}
旁注:你似乎是一个初学者(没有错!),opencv api多年来一直在变化,请不使用IplImage*
和cv *函数( 1.0 api),
使用cv :: Mat和cv :: namespace。
using namespace cv;
int main(int argc, char** argv)
{
char * imgPath="Walk1001.jpg";
if ( argc > 1 )
{
imgPath = argv[1];
}
Mat img = imread( imgPath );
if ( img.empty() )
{
cout << "Could not open or find the image" << endl ;
return 1;
}
namedWindow( "Example1", 1 );
imshow( "Example1", img );
waitKey(0);
// no, you don't have to release Mat !
return 0;
}
答案 1 :(得分:0)
我得到运行时异常。错误是array.cpp中的2482行未知函数?我想我在调试后从imshow
收到此消息。我正在使用Mat img=imread("walk100.jpg");
,但img.total()
返回NULL。为什么imread
返回NULL。 cvload
工作正常。
我解决了这个问题,在网上我了解了***d.dll
。在添加dll文件时,我省略了 d ,即发布模式而不是调试模式。所以我只是放置“d”,例如opencv_core244d.dll
而不是opencv_core244.dll
感谢所有人的贡献