• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Open CVについて)

Open CVについて

このQ&Aのポイント
  • Open CVを使用したVC++2008 ExpressのWindows FormアプリケーションでUSBカメラから画像を取得して表示する方法について質問です。
  • main_formのpictuteBoxにUSBカメラから画像を取得して表示するために、Open CVのライブラリを使っています。しかし、sub_formのみでエラーが出てしまいます。
  • main_form.hの先頭部分とsub_formの先頭部分に必要なインクルードを記述しているのに、なぜエラーが出るのか分かりません。解決策を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • myuki1232
  • ベストアンサー率57% (97/170)
回答No.2

1. CvCapture が宣言されているのは highgui.h の方なので、使うところで highgui.h を include しないといけません。cv.h では足りません。 2. 2つ目のエラーは多重定義エラーですから、変なものを include しているのでしょう。もう一度正確にヘッダファイルの内容を見せてくれれば、どう直せばいいかアドバイスできるかもしれません。

con014057
質問者

お礼

ご回答ありがとうございます。 cv.hとhighgui.hとsub_form.hのincludeをstdafx.hに記述することで,問題なく 動作させることができました。 OpenCVの問題ではなく,単なるC++/CLIの書き方の問題でした...

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

すみません。これだけでははっきりとした原因はわかりません。 ただ、気になる点はあります。 ・main_form.hの中に#include "sub_form.h"があって、sub_form.hの中に#include "main_form.h"があります。 おそらく、多重読み込みを防止するしくみは入っているでしょうからエラーにはならないのでしょうが、構造としておかしいです。 この場合だと、main_form.hとsub_form.hに分割した意味がありません。 共通で使うものだけ別ファイルにするとかがセオリーです。 例えば、common.hにして、 main_form.hの#include "sub_form.h"→#include "common.h" にするとか。 ・「CvCapture *capture1 = 0;」と書かれていますが、ヘッダファイルにこのような宣言を書くと、このヘッダをincludeしているソース全てにcapture1の実体が作られることになります。今は途中でエラーになっているのでわかりませんが、エラーが取れてリンクまで進むと、多重定義となってエラーになります。

con014057
質問者

お礼

ご回答ありがとうございます。 common.hを作成し,共通部分をそちらに記述してみました。 common.hの中に #include <cv.h> #include <highgui.h> と書くと,別のエラーになってしまいました。 どうも,sub_form.hにhighgui.hをインクルードするとエラーになるようです。 エラーが40個ほど出ているため全ては記述できませんが, C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\objidl.h(6110) : error C2872: 'IDataObject' : あいまいなシンボルです。 と同じ様なエラーが出てしまいます...

関連するQ&A