- ベストアンサー
opencvにおけるコンパイルエラー解決法
- 初心者によるopencvのコンパイルエラーについての解決法
- Visual Studioでopencvの利用時に発生するコンパイルエラーの解決方法
- プリコンパイル済みヘッダーの使用に関連するopencvのコンパイルエラーの解決法
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>Releaseで依存ファイル等設定し直してビルドしましたがダメでした。 「プリコンパイル済みヘッダーは使わない。」にしておいたほうがいいでしょう。 使うなら使うで、ソース側を正しく修正するべきです。 で…… Release構成の「追加のインクルードディレクトリ」の指定が間違っています。 "C:\OpenCV2.2\include\opencv"ではなく"C:\OpenCV2.2\include"です。 実行時にVSの出力ウィンドウに表示される 「Cannot find or open the PDB file」とか「バイナリはデバッグ情報と一緒にビルドされませんでした。」は無視しても良いでしょう。 自分で作ったDLLなどの場合で、デバッグするなら重要でしょうが、そうでなければ無視して問題ないと。 # 中まで追いかけたいとかいうならデバッグ情報なり入手する必要はあるかも知れませんが…初心者のすることでもないでしょう。 >Debugモードで行うと、一瞬cmdの窓は出てくるのですが、すぐに消えてしまいます。 コードの > if (argc != 3 || >(src_img1 = cvLoadImage (argv[1], CV_LOAD_IMAGE_GRAYSCALE)) == 0 || >(src_img2 = cvLoadImage (argv[2], CV_LOAD_IMAGE_GRAYSCALE)) == 0) >return -1; が、何を示しているのか…理解されていないということですね。 プロセスのコマンドラインで引数が2つ必要(argc != 3の部分)で、それぞれcvLoadImage()が読み込める画像ファイル名である必要があります。 プロジェクトの構成プロパティで「デバッグ」の「コマンド引数」に画像ファイルを2つ「フルパスで」記述してください。 # ファイル名だけでもOKだったりしますが、その場合は「作業ディレクトリ」で指定されてい場所に置いておく必要があります。 # 作業ディレクトリがなんなのか…について理解していないのならフルパスで記入してください。 ちなみに私の場合は 「P:\optical_flow\image_sample20-1.jpg P:\optical_flow\image_sample20-2.jpg」となりました。 なお、Debug構成とRelease構成で別々に設定が必要ですのでご注意を。
その他の回答 (5)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> PDBがないのはOpenCVのdistributionに含まれていないんだからアタリマエ。 ああ、ごめんなさい。Windows-APIのデバッグシンボル"も"ないのか。 ...やっぱり要らんよね? Release-modeでは無問題ですよね。
補足
epistemeさん 度々の回答ありがとうございます。 Releaseで依存ファイル等設定し直してビルドしましたがダメでした。 結果は以下です。 1>optical_flow.c++(1): warning C4627: '#include <opencv\cv.h>': プリコンパイル済みヘッダーの使用を検索中にスキップされました 1>ディレクティブを 'StdAfx.h' に追加するか、プリコンパイル済みヘッダーをビルドし直します 1>optical_flow.c++(2): warning C4627: '#include <opencv\highgui.h>': プリコンパイル済みヘッダーの使用を検索中にスキップされました 1>ディレクティブを 'StdAfx.h' に追加するか、プリコンパイル済みヘッダーをビルドし直します 1>optical_flow.c++(8): error C2065: 'IplImage' : 定義されていない識別子です。 ・ ・ ・ とこのメッセージの後「定義されていない識別子です。」や、「識別子が見つかりませんでした。」というメッセージがかなりの数で続きます。 Debugモードで行うと、一瞬cmdの窓は出てくるのですが、すぐに消えてしまいます。 エラーメッセージの最後に ・ ・ ・ 'optical_flow.exe': 'C:\Windows\SysWOW64\msctf.dll' を読み込みました。Cannot find or open the PDB file プログラム '[5536] optical_flow.exe: ネイティブ' はコード -1 (0xffffffff) で終了しました。 とあるので、おそらく-1がreturnされてしまっているようです。 プログラム自体は動作していません。 一応、ヒューマンエラーの可能性も考えて以下に私がビルドしようとしているプログラムファイルを載せておきます。 http://kie.nu/fBp パスワード:optical
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
PDBがないのはOpenCVのdistributionに含まれていないんだからアタリマエ。 PDBはデバッグ情報だからなくてもいぃんじゃね? 動かなかったですか?
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
できましたけど。参考URL参照。
補足
epistemeさん 解答ありがとうございます。 ファイル確認しました。ありがとうございます。 確かに、コンパイルエラーは出ませんでした。が、今度はdllの読み込みでエラーが出たようです。 >'optical_flow.exe': 'C:\Users\ken\Documents\Visual Studio 2010\Projects\optical_flow\Debug\optical_flow.exe' を読み込みました。シンボルが読み込まれました。 >'optical_flow.exe': 'C:\Windows\SysWOW64\ntdll.dll' を読み込みました。Cannot find or open the PDB file >'optical_flow.exe': 'C:\Windows\SysWOW64\kernel32.dll' を読み込みました。Cannot find or open the PDB file ・ ・ ・ と各dllファイルの読み込みに関してCannot find or open the PDB fileというメッセージが出ます。 他の質問を探した結果、ランタイム?というものをインストールすると書いてあるのを見つけました。 が、具体的に何をどうすればよいのかが分かりませんでした。 動作環境の違いでしょうか?一応、私の動作環境を以下に書いておきます。 OS : Windows7 64bit 使用しているVSのver : Microsoft Visua Studio 2010 (Professional) 使用しているOpencv : OpenCv2.2
- Wr5
- ベストアンサー率53% (2173/4061)
>optical_flow.c++(9): error C3872: '0x3000': この文字を識別子で使用することはできません >optical_flow.c++(9): error C2065: ' IplImage' : 定義されていない識別子です。 9行目になんかヘンなの混じっているようですけど? 全角スペースとか入っていませんか? # UNICODEで全角スペースが0x3000っぽいですが。
補足
Wr5さん 度々の回答ありがとうございます。 原因は不明ですが全体的にスペースが全角になっていました。お騒がせして申し訳ありませんでした。 また、新しくdllの読み込みでエラーが出ているのでNO.3さんへの回答をご覧いただいて回答いただけると幸いです。
- Wr5
- ベストアンサー率53% (2173/4061)
>しかし、以下のHPに記載されているオプティカルフローのサンプルプログラムを動かそうとすると上記のヘッダファイルが開けない。という旨のエラーメッセージが出ます。 どのようにプロジェクトを作成したのでしょうか? 新規に作成した場合、先に掲示されたページの「【2】openCVの環境設定」はやり直す(というかプロジェクト毎に別の設定になる)必要がありますが……。 # 構成プロパティの「VC++ ディレクトリ」で「インクルードディレクトリ」「ライブラリディレクトリ」に追加すると…他のプロジェクトにも適用されますかねぇ……。 # 未確認ですが。 # ただし、その場合でも「追加のライブラリファイル」の指定(リンカーの入力・追加の依存ファイル)は必要です。 >プリコンパイルヘッダーを使用しない。という設定も試みましたがダメでした。 どんなエラーが出ましたか? >解決法を教えてください。 最初に掲示されたページの「【2】openCVの環境設定」を行い、 サンプルソースの #include <cv.h> #include <highgui.h> を #include <opencv\cv.h> #include <opencv\highgui.h> に変更、プリコンパイルヘッダは使用しないに設定してビルドすると…… ライブラリが見つからない。と言われましたので…… ライブラリディレクトリにあるライブラリファイルを追加の依存ファイルに突っ込んでみました。 # Debugビルドなので、 # dir /b C:\OpenCV2.2\lib\*d.lib # で表示されたファイルを指定。 # リリースビルドの場合はdが付かないヤツになりますな。 ということで、とりあえずビルドは出来ました。 入力ファイルとか用意していないので、「ビルドが通る」ということを確認しただけですが。 ちなみに使ったのは、 http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.2/ から OpenCV-2.2.0-win32-vs2010.exeをDLしてインストールしたもの…です。
補足
回答ありがとうございます! コンパイルが成功した空白のウィンドウを表示するプロジェクトにそのまま上書きする形で行いました。また、設定をし直した新規プロジェクト(ファイル→新規作成→プロジェクト→C++→WIN32コンソール…)で作成したものにも設定をしなおしてコンパイルしましたが同じ結果が出ました。 >#include <opencv\cv.h> >#include <opencv\highgui.h> >に変更、プリコンパイルヘッダは使用しないに設定してビルドすると…… ※(1) 1>c:\users\ken\documents\visual studio 2010\projects\optical_flow\optical_flow\optical_flow.c++(9): error C3872: '0x3000': この文字を識別子で使用することはできません 1>c:\users\ken\documents\visual studio 2010\projects\optical_flow\optical_flow\optical_flow.c++(9): error C2065: ' IplImage' : 定義されていない識別子です。 ※(1)下のようなエラーがひたすらに続きました。 直接的にcv.h、highgui.hを読み込めない。というようなメッセージは見当たりませんが、認識できていないのでしょうか? また、 >ライブラリディレクトリにあるライブラリファイルを追加の依存ファイルに突っ込んでみました。 とある通りcmdで検索し、 opencv_calib3d220d.lib opencv_contrib220d.lib opencv_core220d.lib opencv_features2d220d.lib opencv_ffmpeg220d.lib opencv_flann220d.lib opencv_gpu220d.lib opencv_highgui220d.lib opencv_imgproc220d.lib opencv_legacy220d.lib opencv_ml220d.lib opencv_objdetect220d.lib opencv_video220d.lib をプロジェクト→optical_flowのプロパティ→構成プロパティ→リンカー→入力→追加の依存ファイル に追加しました。 が、依然状況が変わらず、※(1)のようなエラーメッセージが表示されます。 使用したopencvはWr5さんと変わらずOpenCV-2.2.0-win32-vs2010.exeです。 インストールした場所はcドライブ直下で、c:\opencv2.2となっています。ファイルの場所も合っているとは思うのですが…。
お礼
回答ありがとうございます! なるほど!コマンドラインでの画像入力をしたことがなかったのでプログラム起動時に画像パスの入力を求められるものだと勝手に思っていました。コマンド引数にパスを入力するのですね。。 相対パスで入力し、無事動作しました。 丁寧に最後まで教えていただきありがとうございました。本当に助かりました。