質問させてください。
現在画像処理ライブラリのOpenCVを使ってテンプレートマッチングを用いた物体追跡しようと考えています。
今回作ってみたのですがどうしても、
「Bad argument(Array should be CvMat or IplImage)in function cvGetSize」
というエラーが出てしまいます。
おそらく画像の読み込みの部分だとは思うのですが・・・・
よろしくお願いします。
ソースプログラムは次のようになってます。
int main( void ) {
int device1 = 0;
int key=0;
double max_interlinkage=0;
double min_interlinkage=0;
CvPoint max_point;
CvPoint min_point;
CvPoint corner_point;
char windowNameTemplate[] = "Template";//テンプレート画像を表示するウィンドウの名前
char windowNameDestination[] = "Destination";//マッチング結果を表示するウィンドウの名前
//videoInputオブジェクト
videoInput VI;
//利用可能なキャプチャデバイス数を取得
int numDevices = VI.listDevices();
//キャプチャデバイスが見つからなかったら終了
if(numDevices == 0)
{
cerr << "[Error] Capture device not found!!" << endl;
exit(-1);
}
//デバイス初期化(今回はデバイスID = 0,CAPTURE_WIDTH x CAPTURE_HEIGHTでキャプチャ)
VI.setupDevice(device1, CAPTURE_WIDTH, CAPTURE_HEIGHT);
IplImage *templateImage = cvLoadImage( "C:/Documents and Settings/ito/My Document/My Pictures/temp.jpg", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR );
IplImage *tempGray = cvCreateImage( cvGetSize(templateImage), IPL_DEPTH_8U, 1 );
if ( templateImage == NULL ) {
//画像が見つからなかった場合
printf( "画像が見つかりません\n" );
return -1;
}
cvCvtColor(templateImage,tempGray,CV_BGR2GRAY);
IplImage *frameImage = cvCreateImage( cvSize(CAPTURE_WIDTH, CAPTURE_HEIGHT), IPL_DEPTH_8U, 3 );//画像用IplImage
IplImage *grayImage = cvCreateImage( cvSize(CAPTURE_WIDTH, CAPTURE_HEIGHT), IPL_DEPTH_8U, 1 );//元画像をグレースケール化した画像用IplImage
IplImage *dstImage = cvCreateImage( cvSize( frameImage->width - templateImage->width + 1, frameImage->height - templateImage->height + 1 ), IPL_DEPTH_32F, 1 );//相違度マップ画像用IplImage
memcpy(frameImage->imageData, VI.getPixels(device1, false , true), frameImage->imageSize);
cvCvtColor(templateImage,tempGray,CV_BGR2GRAY);
//ループ開始
while(1){
//カメラ・デバイスから画像取得
memcpy(frameImage->imageData, VI.getPixels(device1, false , true), frameImage->imageSize);
cvCvtColor(frameImage,grayImage,CV_BGR2GRAY);
//テンプレートマッチングを行う
cvMatchTemplate( grayImage, tempGray, dstImage, CV_TM_CCOEFF_NORMED );
//テンプレートが元画像のどの部分にあるのかという情報を得る
cvMinMaxLoc( dstImage, &min_interlinkage, &max_interlinkage, &min_point, &max_point, NULL );
if(max_interlinkage>0.75){
corner_point=cvPoint(max_point.x+templateImage->width , max_point.y+templateImage->height);
printf("point x=%d ",max_point.x+templateImage->width);
printf("point y=%d ",max_point.y+templateImage->height);
cvRectangle(frameImage , max_point , corner_point , CV_RGB(255,0,0) , LINE_THICKNESS , LINE_TYPE , SHIFT);
printf("\n");
}else{
printf("point Lost\n");
}
//ウィンドウを生成する
cvNamedWindow( windowNameTemplate, CV_WINDOW_AUTOSIZE );
cvNamedWindow( windowNameDestination, CV_WINDOW_AUTOSIZE );
//画像を表示する
cvShowImage( windowNameTemplate, templateImage );
cvShowImage( windowNameDestination , frameImage );
//キー入力
key = cvWaitKey(1);
if(key=='q'){
break;
}else if(key=='c'){
cvSaveImage("image/frame.bmp",frameImage);
}
}
No.1ベストアンサー
- 回答日時:
こんばんは。
ファイルのロードに失敗しているのではないでしょうか。パスをもう一度確認してみましょう。
手っ取り早く、配下のフォルダに入れてtemp.jpgのファイル名だけでロード出来る様にして置いた方が、無難かもしれません。
原因は、
ロードに失敗
↓
templateImage=NULL
↓
cvGetSize(templateImage)に渡される
↓
「Bad argument(Array should be CvMat or IplImage)in function cvGetSize」
です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- その他(プログラミング・Web制作) 物理の斜方投射で目盛りに数値を入れたい 2 2023/05/27 06:32
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- その他(プログラミング・Web制作) Pythonによる物理の斜方投射の位置座標表示について 2 2023/06/05 12:46
- その他(プログラミング・Web制作) Pythonにおける物理のシミュレーションでの単位変換について 2 2023/06/02 17:11
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- その他(プログラミング・Web制作) Pythonでのかんたんな物理シミュレーションについての書籍 5 2023/06/02 07:37
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ImageMagickでgif画像の一部が...
-
Pythonでgif画像が上手く作れない
-
【EXCEL VBA】ダブルクリックで...
-
自作の地図をグーグルマップの...
-
こんなことてしますか??
-
C#で画像を他の画像に貼り付け...
-
Leafletで画像をon、offさせる...
-
画像比較
-
uwcs のマクロで画像認識をして...
-
uwscについての質問です。 画面...
-
イメージマップでマウスオーバ...
-
EXCEL VBA 複数のImageコントロ...
-
PowerPoint VBA で画像の鮮明度...
-
UWSCを使って画像リンクをクリ...
-
jqueryスライダーを2段でスライ...
-
【WPF】画像の切り替え
-
C# Picturebox 縮小・拡大時の...
-
vb.net 画像の透過について
-
画像処理したBitmapをピクチャ...
-
PCは表示されるがスマホでは画...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【EXCEL VBA】ダブルクリックで...
-
こんなことてしますか??
-
Pythonでgif画像が上手く作れない
-
Excel ユーザーフォームで表示...
-
VBA シート毎に画像挿入
-
生成AI画像について
-
EXCEL VBA 複数のImageコントロ...
-
HTMLで画像をポップアップで表...
-
UWSCの色判定
-
UWSC 画像判定と条件分岐について
-
jQuery . プログラミング 助け...
-
VBAのユーザーフォームのイメー...
-
jqueryスライダーを2段でスライ...
-
vb.net 画像の透過について
-
【WPF】画像の切り替え
-
背景画像の繰り返しについて
-
「using Windows」でエラーが出る
-
画像処理したBitmapをピクチャ...
-
スマホでサイトの画像を長押し→...
-
UWSC 画像認識で条件分岐
おすすめ情報