0

我运行这个示例代码,我得到运行时异常

#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[]语法加载图像的程序!如何使用这个数组(argv[])或其他什么?

4

2 回答 2

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*Functions(1.0 api),使用 cv::Mat 和来自 cv 的函数: : 命名空间。

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;
}
于 2013-03-12T09:05:50.800 回答
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

感谢大家的贡献

于 2013-03-13T05:43:18.597 回答