関数への文字列の引渡しにおけるエラーが解決できません(opencv,vc++)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mist

関数への文字列の引渡しにおけるエラーが解決できません(opencv,vc++)

#1

投稿記事 by mist » 9年前

int main(){
my_preprocess( "..\\001.jpg", "..\\test11.jpg" );
}

void my_preprocess( char *img_file_name, char *dst_file_name )
{
IplImage* img;
img = cvLoadImage( img_file_name, 1 );
}

問題箇所はimg = cvLoadImage( img_file_name, 1 );の部分です
何故か,この行を実行する前はimg_file_name= "..\\001.jpg"となっているのに,実行後は不適切なPtrとエラーになります
その前の行にprintf("test:%s\n",img_file_name);と入れても同じようにprintf実行前まではimg_file_name= "..\\001.jpg"となっているのに,実行後は不適切なPtrとエラーになります
どなたかこの原因分かりませんか?

アバター
Ciel
記事: 252
登録日時: 9年前

Re: 関数への文字列の引渡しにおけるエラーが解決できません(opencv,vc++)

#2

投稿記事 by Ciel » 9年前

cvLoadImageでは何してるんですか?

cvLoadImageの戻り値を受け取ってローカル変数imgに入れてますけど、何か意味あるんですか?
oui C'est la Vie♪

mist

Re: 関数への文字列の引渡しにおけるエラーが解決できません(opencv,vc++)

#3

投稿記事 by mist » 9年前

cvLoadImageはopencvの関数です
指定したファイル名の画像を開く関数です
実際にはこの関数のあとに様々な処理があるのですが,問題が出たのがこの部分だったので抜粋しました
一年前のプログラムを別のパソコンに移して改良した後,実行しようとした所でこの基本的な部分にエラーが出ました
色々設定の問題かとも思ったのですが,OpenCVはきちんと入ってますし,ライブラリの指定もしてるので問題が見つからず・・・

アバター
Ciel
記事: 252
登録日時: 9年前

Re: 関数への文字列の引渡しにおけるエラーが解決できません(opencv,vc++)

#4

投稿記事 by Ciel » 9年前

ステップ実行していって、cvLoadImage側での処理で実際にどこでエラーが発生しているか確認しましたか?
oui C'est la Vie♪

mist

Re: 関数への文字列の引渡しにおけるエラーが解決できません(opencv,vc++)

#5

投稿記事 by mist » 9年前

流石にopencvのヘッダファイルまでは確認してません

void my_preprocess( char *img_file_name, char *dst_file_name )
{
IplImage* img;
img = cvLoadImage( img_file_name, 1 );
}


void my_preprocess( char *img_file_name, char *dst_file_name )
{
IplImage* img;
printf("test:%s\n",img_file_name);
img = cvLoadImage( img_file_name, 1 );
}

のように変更したとき,今度はエラーが出るのは
printf("test:%s\n",img_file_name);
の部分になるのです
なので,関数の中身の問題ではないと思ったのです

アバター
Ciel
記事: 252
登録日時: 9年前

Re: 関数への文字列の引渡しにおけるエラーが解決できません(opencv,vc++)

#6

投稿記事 by Ciel » 9年前

変ですね。
さっき同じことやってみましたが、何もエラーなんか出ませんでした。
他の方お願いします。
oui C'est la Vie♪

mist

Re: 関数への文字列の引渡しにおけるエラーが解決できません(opencv,vc++)

#7

投稿記事 by mist » 9年前

すみません,情報が足りないかもしれないのでなるべく詳しく整理して書き直します

① OpenCV2.0を用いてVisual C++ 2008を利用して画像処理のプログラムを組んでいる
(一年前のプログラムを別のPCに移植,新たにOpenCVやVC++のインストールを実行しました)
② cv.hとhighgui.hはインクルードしている
③ pragma commentは次の形式で行っている
#ifdef _DEBUG
#pragma comment( lib, "cv200d.lib" )
#pragma comment( lib, "cxcore200d.lib" )
#pragma comment( lib, "highgui200d.lib" )
#else
#pragma comment( lib, "cv200.lib" )
#pragma comment( lib, "cxcore200.lib" )
#pragma comment( lib, "highgui200.lib" )
#endif
④ ツール→オプション→…でOpenCVのライブラリパス指定済み,及びインクルードファイルパス指定済み
⑤ my_preprocess関数は自作関数で,プロトタイプ宣言は行っている
⑥ my_preprocess関数は画像を読み込み,平滑化などの処理を行う関数である
⑦ ビルドは成功するが,実行時にmy_preprocess関数で止まる
⑧ my_preprocess関数をステップごとに見ると,どうも最初の読み込み時にエラーを吐き出している

以上です.
エラーの内容は先に述べたように,img_file_nameの値が変化し,なぜか不適切なPtrとなってしまうものです.
画像読み込みだけでなく,printfでも同様のエラーが生じます.
何か足りないこと,あるいは間違っている部分はありますでしょうか?

閉鎖

“C言語何でも質問掲示板” へ戻る