0

このサンプル 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[]出くわしました! この配列 ( argv[]) の使用方法または他に何を使用しますか?

4

2 に答える 2

1

argv 配列を使用するには、(コマンドラインなどから) プログラムに引数を指定する必要があります。

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 は長年にわたって変更されています。cv*Functions (1.0 API) を使用しないでください。cv ::IplImage* 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

実行時例外が発生しています。エラーは 2482 行目 array.cpp の不明な関数ですか? imshowデバッグ後にこのメッセージが表示されると思います。私は使用していますMat img=imread("walk100.jpg");が、img.total()NULLを返します。なぜimreadNULLを返すのですか。cvload完璧に機能しています。

私はこれを解決しました.私が知ったウェブ上で***d.dll. dll ファイルを追加するときに、デバッグ モードではなくリリース モード用のdを省略しました。だから私は「d」を配置するだけopencv_core244d.dllです。opencv_core244.dll

あなたの貢献に感謝します

于 2013-03-13T05:43:18.597 に答える