【更新情報】2014年4月3日 VS2008関連の解説を削除し、VS2013関連の記述を追加しました。
【更新情報】2014年4月20日 最新版2.4.8に対応しました。VS2013関連の記述を修正しました。3.の記述を簡略化しました。
【更新情報】2014年5月22日 最新版2.4.9に対応しました。他のサンプルコードを使うための記述を追加しました。
【更新情報】2014年6月2日 一部のstrikeをコメントアウトしました。また5.でVS再起動の記述を追加しました。サンプルコードを変更しました。
///////////////////////////////////////////
Visual Studio 2017 + x64 + OpenCV 3.2.0 の記述を新ブログに書きました。参考にしてください。 (2017年4月13日)
質問受け付けも新ブログへ
http://phst.hateblo.jp/entry/2016/11/30/081749
///////////////////////////////////////////
http://whoopsidaisies.hatenablog.com/entry/2013/12/03/174709
x64でプログラムを作成したい人は、以下の解説通りにすることをおすすめします。
Windows7、Windows8、Windows8.1環境で、OpenCVをVisual Studioで始める方法の解説です。最も簡単に構築できる方法を試行錯誤して到達したやり方を記述しています。簡単に始めたい人、早く始めたい人、初心者向けの解説ですのでご注意ください。
ファイル名・フォルダ構成・プロジェクト名は本来自由に決めることができますが、ここでは説明を簡略化し初心者にもわかりやすくするために固定にします。
Microsoft Visual Studio 2010、2012、2013のいずれかがインストールされていることが前提です。Visual Studio(VS)をインストールしていない人は先にVSのインストールを行ってください。Expressバージョンでも問題ありませんが、当環境ではUltimateバージョンでテストを行っています。
ここで行う作業は以下の通りです。
- OpenCVライブラリのダウンロード
- OpenCVライブラリの展開
- 静的リンクライブラリの設定
- 動的リンクライブラリの設定
- VisualStudioの設定
- サンプルプログラムの作成と起動
- 他のサンプルコードを使う
1.OpenCVライブラリのダウンロード
http://opencv.org/downloads.htmlVERSION2.4.9の「OpenCV for Windows」と書いてあるリンクをクリックしてください
初めての人はVERSION2.4.9で試されることを強く勧めます。
sourceforge.netのサイトへ飛ばされ、しばらくするとダウンロードが開始されます。
2.OpenCVライブラリの展開
ダウンロードしたOpenCV-2.4.9.exeを展開します。.exeを実行すると自己展開が始まるので、Extract to:を「C:\」にして実行してください。約4GBのディスク容量を使います。
展開に成功すれば、「C:\opencv」ができ「C:\opencv\build\include\opencv2」をみると「opencv.hpp」と「opencv_modules.hpp」と複数のフォルダができています。
次の3.はここで作業を行います。
3.静的リンクライブラリの設定(リンカ用ヘッダー作成)
OneDriveからバージョンに合った「opencv_lib.hpp」をダウンロードして、「C:\opencv\build\include\opencv2」のフォルダに置きます。4.動的リンクライブラリの設定(実行ファイルの場所を指定)
スタートメニューを開き、「システム」と検索し「システム」を開きます(システム***は沢山ありますが、「システム」を選びます。)。システムの詳細設定を開きます。詳細設定から環境変数を選び、システム環境変数から変数が「Path」のものを選び編集を選択します。
最後に「;」が入っていればその後ろに次の文字列をペーストします。
「;」が入っていなければ「;」を入れてその後ろにペーストします。
この作業はシステムの設定に関わる作業なので、慎重に行ってください。
ペーストする文字列はVS2010 か VS2012 か VS2013 かで分岐します。32bit、64bitはOSのバージョンではなく、プログラムの構成時のプラットフォームです。一般的にVSを立ち上げた時にはx86プラットフォームで動くので、32bitの場合で良いでしょう。
32bit(x86):通常 | 64bit(x64) | |
VS2010 | C:\opencv\build\x86\vc10\bin | C:\opencv\build\x64\vc10\bin |
VS2012 | C:\opencv\build\x86\vc11\bin | C:\opencv\build\x64\vc11\bin |
VS2013 | C:\opencv\build\x86\vc12\bin | C:\opencv\build\x64\vc12\bin |
5.VisualStudioの設定
Visual Studioをすでに起動している場合は、一度終了して起動します。これで4.の設定がVisual Studioに反映されます。ファイル→新規作成→Visual C++→全般→空のプロジェクト
を選択し、プロジェクト名は適当に決めます。今回は「OpenCV_Test」とします。
プロジェクト→プロパティを選択します。
構成プロパティ→VC++ディレクトリを選択し、インクルードディレクトリの右の▼をクリックし、編集を選択し、「C:\opencv\build\include」を追加します。
さらにライブラリディレクトリに同様に次の文字列を追加します。
32bit(x86):通常 | 64bit(x64) | |
VS2010 | C:\opencv\build\x86\vc10\lib | C:\opencv\build\x64\vc10\lib |
VS2012 | C:\opencv\build\x86\vc11\lib | C:\opencv\build\x64\vc11\lib |
VS2013 | C:\opencv\build\x86\vc12\lib | C:\opencv\build\x64\vc12\lib |
6.サンプルプログラムの作成と起動
OpenCVがつかえる状態になったことを確認するために、サンプルプログラムを動かしてみます。ソースファイルで追加、新しい項目、C++ファイル(.cpp)で名前「main.cpp」で追加し、
//インクルードファイル指定を記述します。ビルドを行い、デバッグからデバッグなしで開始します。小さなウインドウが出てくると成功です。
#include <opencv2/opencv.hpp>
//静的リンクライブラリの指定
#include <opencv2/opencv_lib.hpp> //NuGetの場合は必要ない
//名前空間の指定
using namespace cv;
int main()
{
//width220, height150の画像を作成
Mat src = Mat::zeros(150, 220, CV_8UC3);
//赤色で画像にHello Worldを描く
putText(src, "Hello World", Point(5, 50), FONT_HERSHEY_SIMPLEX, 1, Scalar(0, 0, 200), 2, CV_AA);
//緑色で画像に線を描く
line(src, Point(190, 25), Point(190, 45), Scalar(0, 200, 0), 3);
//要素を直接操作し画像に点を描く
for (int x = 188; x < 192; x++)
for (int y = 53; y < 57; y++) //y座標
for (int i = 0; i < 2; i++) //i < 3にするとBGRすべての要素を200にする
src.at<uchar>(Point(x * 3 + i, y)) = saturate_cast<uchar>(200);
//画像を表示
imshow("", src);
//ウインドウの表示時間(0はキーが押されるまで閉じない)
waitKey(0);
return 0;
}
7.他のサンプルコードを使う
たとえば、opencv.jpのサイトにはサンプルコードがたくさんあります。しかし、一部のコードはそのまま使うことはできません。次のように変更する必要があります。#include <cv.h>これがある場合は以下に変更してください。
#include <highgui.h>
#include <opencv2/opencv.hpp>
#include <opencv2/opencv_lib.hpp>
余談ですが、当ブログではオブジェクト指向の観点から、cvから始まる関数(cvNamedWindowとかcvShowImageとか)やIplImage構造体を用いた古いコードの利用は推奨していません。これらはOpenCV 1.0で使われていたコードであり、初心者とメモリに優しくないからです。(抽象的表現でごめんなさい)
名前空間を使った最新のコードの場合も、次の1行をmainが書いてあるファイルの1行目に追加してください。
#include <opencv2/opencv_lib.hpp>
解説は以上です。うまく行きましたか?トラブルが起きたら下のコメント欄で質問してください。うまく行ったときもコメントしてくれると嬉しいです。
OpenCV を Visual Studio で使う方法の解説
http://physics-station.blogspot.jp/2013/03/opencv-visual-studio_5.html
4のフォルダはどのフォルダを指しているのでしょうか?opencv2で大丈夫ですか?
返信削除はい、その通りです。
削除windows7の64ビットでVS2010の設定をしています。
返信削除ビルドしたところopencv_calib3d244d.libを開くことができません。とでたのですがどこを間違えてしまったのでしょうか?
.libは「C:\opencv\build\x64\vc10\lib」に入っているはずですが、
削除opencvの11/14現在の最新版では、末尾が「247.lib」または「247d.lib」になっているかと思います。
数字を変更して、「opencv_lib.hpp」の中身と、実体を一致すれば動くかと思います。
最新版に対応していなくて申し訳ありません。
ありがとうございます。2.4.4を入れなおしてやってみたら動きました。
削除丁寧な返答感謝です
「'opencv_haartraining_engined.lib' を開くことができません。」というエラーが出たのですが、どうすればよいでしょうか。
返信削除よろしくお願いします。
とりあえずopencv_lib.hppからopencv_haartraining_engined.libに関する行をコメントアウトしてみたらエラーがなくなりました!
削除上の方と同じように「'opencv_calib3d247d.lib' を開くことができません。」が出ました。
返信削除数字は、247で一致させているはずなのですが、どうしてでしょうか。
よろしくお願いします。
記事を、最新のバージョンである2.4.7に記述を対応しました。
削除3.静的リンクライブラリの設定(リンカ用ヘッダー作成)
をやり直してもらえば、使えるようになります。
当方の環境でテストをして動いていますが、もし記述ミスがあれば教えてください
記事ありがとうございます。
返信削除二点ほどお伺いしたいことがあるのですが
① error C1083:includeファイルが開けません。'opencv2/opencv_lib.hpp': No such file or directory
②Intellisense: ソースファイルが開けません"opencv2/opencv_lib.hpp"
VS2012expressにてエラーを吐いてしまうのですが何が原因でしょうか。
「C:\opencv\build\include\opencv2\opencv_lib.hpp」
削除このファイルが存在しないことが原因だと思われます。
ビルドすると
返信削除1>LINK : fatal error LNK1104: ファイル 'opencv_calib3d247d.lib' を開くことができません。
が表示されます。
静的リンクライブラリの設定
をやり直してみてもうまくいきません。
他に原因があるのでしょうか。
誤解を与える表記があったのと、誤記があったので訂正しました。
削除\libまでが書くべきパラメータです。
また、設定したパス(たとえば「C:\opencv\build\x86\vc11\lib」など)に「opencv_calib3d247d.lib」というファイルが存在するかどうかを確認してみてください。
・VS2010 32bit の場合
C:\opencv\build\x86\vc10\lib
・VS2012 32bit の場合
C:\opencv\build\x86\vc11\lib
・VS2010 64bit の場合
C:\opencv\build\x64\vc10\lib
・VS2012 64bit の場合
C:\opencv\build\x64\vc11\lib
2.4.8で、hppとパスを修正しても
返信削除LNK1104: ファイル 'opencv_calib3d248d.lib' を開くことができません。
とでてしまうのは、やはりパスの設定が原因かと、小一時間悩んでます。
2.4.8では確認をしていません。ファイルの構成が変わっていると考えられます。
削除暫くこのブログを更新できないので、2.4.7で試してもらえませんでしょうか?
http://imagesensing.seesaa.net/article/200532994.html
削除を参考にすればできるようになりましたよ。
書き忘れましたが、x64のパソコンでもx86に変更すればいけるみたいです。
削除すみませんが、ビルドを成功しました、デバッグしたら「コンピューターにopencv_core247d.dllがないため、プログラムを開始できません
返信削除。」 でも、C:\opencv\build\x64\vc11\binのファイルを開いたら、opencv_core247d.dll がありますげど。どうすればいいかわからなくなりました。
Visual Studio 2013 ですが
削除.dllがVS2013に対応していないため起こる問題だと思われます。
削除Visual Studio 2013への対応を記述しました。記述から抜粋します。
VS2013 の場合
まず、構成プロパティ→全般→プラットフォームツールセットを選択し、右の▼をクリックし、「Visual Studio 2012 (v110)」を選択し、右下の適用をクリックしてください。
この設定をすると、「インクルードディレクトリ」と「ライブラリディレクトリ」の設定がリセットされてしまうので、それぞれもう一度行ってください。
できました。わたしは外国人ですが、管理人さんの説明はとても理解しやすいです。どうもありがとうございました。O(∩_∩)O、
削除error LNK1112: モジュールのコンピューターの種類'x64'は対象コンピューターの種類'x86' opencv_core248d.lib と競合しています。というエラーが表示されてしまいます。解決策を教えていただきたいです。
返信削除32bitでコンパイルすることができました。ありがとうございます。ライブラリディレクトリでは、x86とx64両方追加すると、コンピューターの種類'x64'は対象コンピューターの種類'x86' opencv_core248d.lib と競合します。x86だけではテストが成功しました。ちなみに、x64でも使いたい場合どのように設定すればよろしいですか?
返信削除ビルドできるかどうかと、プログラムを実行できるかどうかで分かれます
削除ビルドだけしたいのであれば、構成マネージャからプラットフォームで新規作成をしてx64を追加し、「5.VisualStudioの設定」をやり直します。
プログラムを動かしたい場合は、「4.動的リンクライブラリの設定」を、Visual Studioの起動前に書き換える必要があります。
ただし、このブログで紹介する方法でやるための方法なので、もっと別の回避策はあります。
入れてみて、このサイトにあるサンプルは動いたのですが、OpenCVの本に書いてあるサンプルが動きません。#include や#include や#include などに赤線がひかれてソースファイルが開けないと出ます。これは、OpenCVの導入をミスっているのでしょうか?全くの初心者なので的外れの質問をしているかもしれません、申し訳ないです。
返信削除コードを見ないと、原因がわかりません。コードを書いてもらえますか?
削除int main()以降で結構です。
プレビューで確認してませんで、icludeの後が表示されてませんでしたすいません。cv.h cxcore.h highgui.hとかなんですが、
削除int main(int argc, char **argv) {
char windowNameSource[] = "Source"; // 元画像を表示するウィンドウの名前
char windowNameDestination[] = "Destination"; // 変換後の画像を表示するウィンドウの名前
// 画像を読み込む
IplImage *sourceImage = cvLoadImage("image/lena.jpg", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
if (sourceImage == NULL){
// 画像が見つからなかった場合
printf("画像が見つかりません\n");
return -1;
}
// 画像を生成する
IplImage *destinationImage = cvCreateImage(cvSize((int)(sourceImage->width * SCALE_X), (int)(sourceImage->height * SCALE_Y)), IPL_DEPTH_8U, 3); // 変換後の画像用IplImage
// 画像の大きさを変換する
cvResize(sourceImage, destinationImage, CV_INTER_LINEAR);
// ウィンドウを生成する
cvNamedWindow(windowNameSource, CV_WINDOW_AUTOSIZE);
cvNamedWindow(windowNameDestination, CV_WINDOW_AUTOSIZE);
// 画像を表示する
cvShowImage(windowNameSource, sourceImage);
cvShowImage(windowNameDestination, destinationImage);
// キー入力を待つ
cvWaitKey(0);
// 画像を保存する
cvSaveImage("image/destination.bmp", destinationImage);
// メモリを解放する
cvReleaseImage(&sourceImage);
cvReleaseImage(&destinationImage);
// ウィンドウを破棄する
cvDestroyWindow(windowNameSource);
cvDestroyWindow(windowNameDestination);
return 0;
}
こちらの環境でテストしたところ、このブログのサンプルプログラムのmainの部分を変更しただけでほぼビルドできました。
削除ほぼ、というのはSCALE_XとSCALE_Yがmainの外で#defineなどで設定されているはずで、それを設定しただけです。
#include は、cv.h cxcore.h highgui.hなども含んでいるので、cv.h等を一つ一つ書く必要はありません。
//インクルードファイル指定
削除#include
//静的リンクライブラリの指定
#include
//名前空間の指定
using namespace cv;
上の文をサンプルを入れるときに上書きして消してしまっていました。
解決しました。どうもありがとうございました。
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
返信削除*************************************************************************/
#ifndef OPENCV_FLANN_LOGGER_H
#define OPENCV_FLANN_LOGGER_H
#include
#include
#include "defines.h"
namespace cvflann
{
class Logger
{
Logger() : stream(stdout), logLevel(FLANN_LOG_WARN) {}
~Logger()
{
if ((stream!=NULL)&&(stream!=stdout)) {
fclose(stream);
}
}
static Logger& instance()
{
static Logger logger;
return logger;
}
void _setDestination(const char* name)
{
errno_t error;
if (name==NULL) {
stream = stdout;
}
else {
stream = fopen(name, "w");
if (stream == NULL) {
stream = stdout;
}
}
}
int _log(int level, const char* fmt, va_list arglist)
{
if (level > logLevel ) return -1;
int ret = vfprintf(stream, fmt, arglist);
return ret;
}
public:
/**
* Sets the logging level. All messages with lower priority will be ignored.
* @param level Logging level
*/
static void setLevel(int level) { instance().logLevel = level; }
/**
* Sets the logging destination
* @param name Filename or NULL for console
*/
static void setDestination(const char* name) { instance()._setDestination(name); }
/**
* Print log message
* @param level Log level
* @param fmt Message format
* @return
*/
static int log(int level, const char* fmt, ...)
{
va_list arglist;
va_start(arglist, fmt);
int ret = instance()._log(level,fmt,arglist);
va_end(arglist);
return ret;
}
#define LOG_METHOD(NAME,LEVEL) \
static int NAME(const char* fmt, ...) \
{ \
va_list ap; \
va_start(ap, fmt); \
int ret = instance()._log(LEVEL, fmt, ap); \
va_end(ap); \
return ret; \
}
LOG_METHOD(fatal, FLANN_LOG_FATAL)
LOG_METHOD(error, FLANN_LOG_ERROR)
LOG_METHOD(warn, FLANN_LOG_WARN)
LOG_METHOD(info, FLANN_LOG_INFO)
private:
FILE* stream;
int logLevel;
};
}
#endif //OPENCV_FLANN_LOGGER_H
エラー 1 error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\opencv\build\include\opencv2\flann\logger.h 67 1 OpenCV_Test
これは何をすればいいのですか?
環境の何かが違うのかなと思います。そのエラーは見たことがないので、確かなことは言えません。
削除このブログの通りにやりましたか?
導入はできたのですが、ほかのプログラムはうまくいきません。
削除管理人さんのプログラムはうまいくんですが・・・
コードを見ないと何が原因下わかりません
削除プログラムのmainの部分を書いてくれるとコメントできます。
(著作権的に問題がなければ書いてください)
エラー 1 error C4996: が出たという人へ
削除http://whoopsidaisies.hatenablog.com/entry/2013/12/03/174709に記述がありました。
#define _CRT_SECURE_NO_DEPRECATE を追加するといいそうです
int main(int argc, char** argv){
返信削除int key; // キー入力用の変数
CvCapture *capture; // カメラキャプチャ用の構造体
IplImage *frameImage; // キャプチャ画像用IplImage
char windowNameCapture[] = "Capture"; // キャプチャした画像を表示するウィンドウの名前
// カメラを初期化する
if ((capture = cvCreateCameraCapture(-1)) == NULL) {
// カメラが見つからなかった場合
printf("カメラが見つかりません\n");
return -1;
}
// ウィンドウを生成する
cvNamedWindow(windowNameCapture, CV_WINDOW_AUTOSIZE);
// メインループ
while (1) {
// カメラからの入力画像1フレームをframeImageに格納する
frameImage = cvQueryFrame(capture);
// 画像を表示する
cvShowImage(windowNameCapture, frameImage);
// 'q'キーが入力されたらループを抜ける
key = cvWaitKey(1);
if (key == 'q') {
break;
}
}
// キャプチャを解放する
cvReleaseCapture(&capture);
// ウィンドウを破棄する
cvDestroyWindow(windowNameCapture);
return 0;
これです
少し前の人のコードもそうでしたが、
返信削除こちらの環境でテストしたところ、このブログのサンプルプログラムのmainの部分を変更しただけでビルドはできました。
あとは、USBカメラをさしてPCに認識させておけば、動くはずです。
#include から始まる2行を忘れないでください。ここ重要です。
ありがとうございました!
削除たびたびすみません。
削除動いたことには動いたんですが、キャプチャ画像が灰色になって何も映りません。
他のパソコンでは映るのでカメラの故障ではないと思うんですが・・・
申し訳ないのですが、その症状に対する知見がありません。
削除ここ最近OpenCV 1.0のコードに対する質問が続きましたので、解説に「他のサンプルプログラムを使う」追加しました。
返信削除コメントしてくれた人ありがとう。
こちらの説明通りに設定し,サンプルのコンパイル・実行はできました.
返信削除しかし,自分で作成したコードを実行したら「opencv_core249d.dllがないため、プログラムを開始できません。」といった内容の警告が.
しかしC:\opencv\build\x86\vc10\binにファイルは存在していますしこちらの説明通りにPathも通してあるはずなのですが・・・・
当方,VC10です.
コマンドプロンプトを起動して、「where opencv_core249d.dll」と打つと、「C:\opencv\build\x86\vc10\bin\opencv_core249d.dll」と出くるか、
削除「path」と打つと、文字列の中に「C:\opencv\build\x86\vc10\bin」が含まれているか、確認をしてみてください。
なお、VSを起動したままpathを通しても、設定は反映されないので、この点も注意してください。
どうやらVSを起動したままpathを弄っていたようで無事解決しました.
削除初歩的な質問に答えていただきありがとうございました.
わかりやすい説明でよかったです、無事環境導入出来ました。ありがとうございます。
返信削除こちらこそ、最後まで読んでくれてありがとう、コメント残してくれてありがとう
削除Windows7 64bit Visual Studio2010で開発しています。
返信削除VC++の「Windows フォームアプリケーション」に静的リンクライブラリとして
OpenCVを設定したところコンパイルは出来るのですが、
「'System.TypeInitializationException' のハンドルされていない例外が 不明なモジュールです。 で発生しました。
追加情報: '<Module>' のタイプ初期化子が例外をスローしました。」
というエラーが発生してEXEが起動しません。
何が原因でしょうか?
ちなみにプラットフォームは「32bit(x86)」でコンパイルは「Debug」で行うとエラーが発生せずただ起動しない。
「Release」で行うと上記のようなエラーが出てきます。
原因がわかりましたらご教授ください。お願いします。
現象は再現出来ましたが、原因は今のところわかりません。
削除clr関連かと思うのですが。
ありがとうございます。
削除とりあえず、OpenCVをクラスライブラリで作成して
そのDLLを取り込むことで使用できそうなので
そのようにしていきます。
記事がすごくわかりやすかったので
また参考にさせていただきます。
記事ありがとうございます。非常にわかりやすかったですが、一点質問があります。
返信削除デバッグしたら「コンピューターにopencv_core249d.dllがないため、プログラムを開始できません。」 でも、C:\opencv\build\x64\vc12\binのファイルを開いたら、opencv_core249d.dll に存在しています。
私は、VS2013 の場合なので先日他の質問者に答えられていたように
まず、構成プロパティ→全般→プラットフォームツールセットを選択したのですが、右の▼をクリックしても「Visual Studio 2012 (v110)」を選択肢がでてきません。どうしたらよいのでしょうか?
vc12というのはVisual Studio 2013(v120)のことなので、Visual Studio 2012を選択する必要はありません。
削除4.動的リンクライブラリの設定(実行ファイルの場所を指定)
を行った後に、Visual Studioは再起動しなくてはなりません。Visual Studioを再起動しても同様の症状が出ればお知らせください。
ありがとうございます。
削除動的リンクライブラリの設定を行ってからVisual Studioの再起動を行うことで、問題が解決できました。
同じ問題でひっかっかってました。
削除参考になりました。ありがとうございます。
visual studio 2013で開発をしております。導入や環境設定は一通りできており、いくつかのプログラムを実行してみたらうまくいっておりました。
返信削除しかし、画像のフリップ画像を作るコードをビルドするとおかしなことになります。
opencv_core.249.libなどを含め6つほどソースコード上に記述してあるのですが,リンクエラーでLNK1104がでてしまいます。以下、詳しいエラー出力です。
1>------ ビルド開始: プロジェクト:03Flip, 構成:Debug Win32 ------
1> Flip.cpp
1>LINK : fatal error LNK1104: ファイル 'opencv_core243d.lib' を開くことができません。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
なぜエラーでは243.libを開こうとしているのでしょうか?当然243はわたくしのPC上にはありません。
ソースコードをくまなく見てはみたもののそれらしき部分をみつけることはできなかったです。
ソースコードをのせることはできないのですがこのような現象が起こる理由は何でしょうか?
ちなみに今回、パスの設定等はなんども見返し、指定している場所もしっかり249があるlibファイルを指定しております。
そのため、コード上にファイル名を#pragmaで記述しております。
わかりにくい文章の上、コードもないので大変お答えしづらいかとは思いますが、お手数ですがご意見をお聞かせください。
ソースコードがないので想像でお答えするしかありませんが、
削除ほかのサイトから流用したプログラムのヘッダーを含めたどこかに、243.libを開こうとしているC#pragmaが設定されているか、
ないしは、Visual Studioのプロジェクト自体を流用した場合は、プロパティのリンカーの入力のところに「追加の依存ファイル」が設定されており、
そこで243の設定が書かれているかのいずれかではないかと推測します。
プロジェクトは最初から自分で作り、ソースファイルとヘッダファイル、リソースファイルを流用しております。
削除GUIを作り、コマンドプロンプトでexeファイルを実行してフォームで画像を読み込み反転させるというプログラムです。
考えられるとしたら主となるソースコードかとおもったのですが、最初の#pragma onceと#includeのあとに
デバックモードとリリースモード別に#pragmaで249を呼び出しているのでそこではなさそうです。
追加の依存ファイルに関しても確認したところ空欄で設定されていないのでそこも問題なさそうです。
となると、考えられるとしたらどこに問題があるでしょうか?
ソースコードを見ないことにはこれ以上はわからないかと思います。申し訳ございません。
削除One Driveが開けません
返信削除We can't show you that page
Our server is having a problem. We're working to fix it as soon as we can, so try again in a few minutes.
とでます
うまくいきました!ありがとうございます^^
返信削除visual studio 2010 c++/cli で作成されている既存のプロジェクトに
返信削除新たに子フォームを追加して、その中でOpenCVを使用したいのですが、
各種設定後、ビルドを行うとOpenCVのincludeの中でエラーが発生してしまいます。
エラー 5 error C2059: 構文エラー : '定数' C:\opencv249\build\include\opencv2\core\types_c.h 1003
ちなみに、includeとnamespaceの定義を親フォームで定義すると、
ビルドは通るのですが、実行で親フォームが表示されません。
※ここに至る前には既存のソース内で使用していたSystemやSystem::Drawingで定義されている、
StringやPoint型が重複してしまい
System::StringやSystem::Drawing::Pointに変更しております。
*************以下抜粋
//インクルードファイル指定
#include
//静的リンクライブラリの指定
#include
namespace 既存のプロジェクト名 {
using namespace cv;
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
public ref class 子フォームクラス : public System::Windows::Forms::Form
{
public:
c++/cli でopencvは直接動かせないと思います。ラップすれば出来ると思いますが。
削除「名前は名前空間名である必要があります」とエラーが出ます.解決策を教えてください.
削除そのエラーには遭遇したことないので、『「名前は名前空間名である必要があります」とエラー』という情報だけでは原因を類推できません。
削除OpenCVをダウンロードして展開したフォルダは正しいか、VisualStudioにインクルードファイルとライブラリファイルは正しく設定されているか、VisualStudioのプロジェクトはC++の全般の空のプロジェクトから作成したかなどを確認してみてください。
名前空間の件で先ほど書き込みをしたものですが,実行できました.ありがとうございました.
返信削除展開したフォルダが正しくありませんでした.早々にご回答いただきありがとうございました.コピペでフォルダ移しても,展開操作とは違うみたいです.
返信削除こちらの記事のおかげでうまくOpenCVを入れることができました。ありがとうございます!
返信削除コメントを残してくれてありがとう。
削除OpenCVを使えるようになって良かったです。
こんばんは「指定したファイルが見つかりません」となってしまいます。
返信削除どうすればいいでしょうか?
visial studio 2013です。
上の方と同じなのかもしれませんが、visial studio 2013で開発しており
返信削除「error LNK1104: ファイル 'opencv_calib3d249d.lib' を開くことができません。」
と出てしまいます。
どこかで間違えているのでしょうか?
5.VisualStudioの設定
削除で設定したフォルダに、表示のあるopencv_calib3d249d.libなどがあるかどうかチェックしてみてください。
Hello World!
削除どうにか、表示できました。
ありがとうございました。
LINK : fatal error LNK1104: ファイル 'kernel32.lib' を開くことができません。
返信削除と出たのですがどこで間違えたのでしょうか?
5.VisualStudioの設定の「ライブラリディレクトリ」の設定で「親またはプロジェクトの規定値から継承」のチェックが外れているとその現象が起きることが有ります。チェックを入れて動かしてみてください。
削除ありがとうございました。
削除main.cppを作成する際のフォルダ指定はどこが望ましいのでしょうか?
返信削除自分で指定してしまったら、デバックを開始しても「指定されたファイルが見つかりません」とメッセージボックスが表示されてしまいます。
Visual Studio上で、ソースファイルで追加、新しい項目、C++ファイル(.cpp)で名前「main.cpp」で追加してください。
削除エクスプローラー上で作成したり、場所は変えたりしないでください。
「OpenCV_Test」を作成する際のフォルダはどこでもいいのでしょうか?
削除基本的にどこでもかまいません。デフォルトでは
削除C:\Users\(ユーザー名)\Documents\Visual Studio (VSバージョン)\Projects
この下に作成されるかと思います。
どうもありがとうございます。
削除続けてお聞きしたいのですが・・・前の質問にある「error LINK1104: ファイル'opencv_calib3d249d.lib'を開くことができません。」とエラー画面がでます。
5.のフォルダに「opencv_calib3d249d.lib」はありました。
なぜ動かないのでしょうか?
windows8 VS10です。
Hello Worldでました、ありがとうございます^^
返信削除現在Android向けにアプリ開発を行ているのですが、この方法でOpenCVを導入した場合アプリにしたときにも動作しますでしょうか?
返信削除ほぼ書いてある通りに導入したのですが、VS2013で「コンピュータにopencv_core249d.dllがないのでプログラムが開始できません」とエラーが出ます。vc12のbinファイルにはちゃんと入っていました。原因が分かるならよろしくお願いします。
返信削除「4.動的リンクライブラリの設定」この設定が正しくないか、設定後にVisual Studioを再起動していないかのどちらかだと思います。
削除Program Filesに入れてたんですが、環境変数のPathの所がProgramFilesと、スペースを抜かしていました。
削除そこを修正したら動きました。本当にありがとうございます。
すいません初心者です。
返信削除書いてあるとおりにやりましたが、
includeファイルが開けません、
~が定義されていません
など17個エラーが出てしまいました・・
原因わかりますでしょうか?
格闘した結果
削除error LNK1104: ファイル 'opencv_calib3d249d.lib' を開くことができません。
のみになりました。
しかし他の質問者のところにもありますが
ファイルはしっかり存在しています。なぜでしょうか??
「5.VisualStudioの設定」このどこかで間違っている可能性が高いです。
削除こんにちは。
返信削除このサイトの手順を参考にさせてもらい、開発環境構築して、プログラムを組んでいる者です。分かりやすく解説して下さり、非常に助かってます。
サイトの手順通りサンプルプログラムを動かすことはできました。VS2010,Opencv2.4.9を使用しています。
プログラム上で三角関数を使用する為に、
#include "math.h"
を記述し、sin()関数を使用したのですが、以下のようなエラーが発生しました。
「IntelliSense: オーバーロードされた関数 "sin" の複数のインスタンスが引数リストと一致します」
「error C2668: 'sin' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照)」
エラーの解決方法を幾つか調べたのですが、良い答えが見つからず困っています。
何が原因か分かりますでしょうか?
また、このサイトのサンプルプログラムの様に#includeの部分を、別の何かに置き換えて記述しなければならないのでしょうか?
もし、お分かりでしたら、ご回答よろしくお願いします。
誠に勝手ながら解決しました。お騒がせしました。
返信削除#include ではなく #include であったことと、
sin()関数で使用できる変数の型と代入が間違っていました。
ありがとうございました。
OpenCVとVS2013の設定に苦戦していましたが、こちらのページを参考にさせて頂いて設定を行ったところ、問題が解決しました。丁寧な説明でとてもわかりやすかったです。助かりました。ありがとうございます。
返信削除参考にさせていただきました。
返信削除分かりやすく丁寧な解説のおかげで問題なく動かすことができました。
ありがとうございます。
opencvの導入で非常に困っています。私はopencv-2.4.11を入れたので、3の静的リンクライブラリの数字の部分はしっかりと2411に直して手順どうりにやってみました。しかし、VSでビルドして(こちらは正常修了)、その後デバッグなしで実行すると次のエラーが出ました。対処法を教えていただけるとありがたいです。
返信削除「プログラム C:\Users\Owner\Documents\Visual Studio 2013\Projects\OpenCV_Test\Debug\OpenCV_Test.exe を開始できません。
指定されたファイルが見つかりません。]
opencvの導入は正しくできているようです。
削除一度VSを再起動して、リビルドして、それでもダメなら
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14115408009
この投稿が役に立つのではないかと思います。
お返事ありがとうございます。提示していただいたURLにとんでいろいろ調べてみました。
削除まず、私の環境ではプログラムが実行されるとOpenCV_Test.exeというexeが出てくるようでした。
それがDebugというファイルに出力されると書いてあった(マクロで表示してありました)ので、そのファイルを
探してみました。しかし、見つからずそもそもexeファイルが出力されていないから実行できないのではないかと
思いました。
exeが吐き出されない原因として何かアドバイスいただけないでしょうか。
二、三日導入に手こずっていてギブアップ寸前です。
プロジェクトのプロパティの構成プロパティの全般の設定はどうなっていますか。そこでexeを作る設定になっていない場合はexeは作られません。
削除確認しました。ターゲットの拡張子が.exeになっていたので、exeファイルを出力する設定になっていると思います。
削除だけど、出力先マクロで指定されているフォルダを調べてもexeはなく、フォルダのどの階層を調べても見つけられない状況です。
出力ディレクトリ、中間ディレクトリ、ターゲット名、ターゲットの拡張子のそれぞれの項目は何と書かれていますか?
削除調べてみました。
返信削除出力ディレクトリマクロ表示 $(SolutionDir)$(Configuration)\
出力ディレクトリ参照表示 C:\Users\Owner\Documents\Visual Studio 2013\Projects\OpenCV_Test\OpenCV_Test
中間ディレクトリマクロ表示 $(Configuration)\
中間ディレクトリ参照表示 C:\Users\Owner\Documents\Visual Studio 2013\Projects\OpenCV_Test\OpenCV_Test
ターゲット名マクロ表示 $(ProjectName)
ターゲット名 OpenCV_Test
ターゲットの拡張子 .exe
です。ご迷惑おかけします。
特に問題ないようですね。
削除ビルドをすると以下のようにログが「出力」タブに出力されるはずですが、ちゃんと出力されていますか? 下の例は64bit Releaseの様子です
1>------ ビルド開始: プロジェクト:OpenCV_Test, 構成:Release x64 ------
(省略)
1> ライブラリ C:\Users\Owner\Documents\Visual Studio 2013\Projects\OpenCV_Test\OpenCV_Test\OpenCV_Test.lib と
オブジェクト C:\Users\Owner\Documents\Visual Studio 2013\Projects\OpenCV_Test\OpenCV_Test\OpenCV_Test.exp を作成中
1> コード生成しています。
1> コード生成が終了しました。
1> OpenCV_Test.vcxproj -> C:\Users\Owner\Documents\Visual Studio 2013\Projects\OpenCV_Test\OpenCV_Test\OpenCV_Test.exe
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========
画面の下の方の「出力」ってなってるところですよね?
削除ビルドを実行すると以下の表示しか出ません。
1>------ すべてのリビルド開始: プロジェクト:OpenCV_Test, 構成:Debug Win32 ------
========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ==========
これが問題なのでしょうか??
触っていて気付いたのですが、VSの構成マネージャーのアクティブソリューションプラットフォームはいじらなくても大丈夫ですか?
削除もともとWin32になっていたので、x64にしたり、x86にしたりしてみたのですが。
x64 x86は関係ないですね。ソリューションエクスプローラーに作成されたプロジェクトがあると思います。そのソースファイルというところに「main.cpp」はありますか? ここになにもない場合、出力された状態が再現します。何か有りビルドが正しくされると以下のように表示されます。
削除(ファイル名は読み替えてください)
1>------ すべてのリビルド開始: プロジェクト:Project1, 構成:Release Win32 ------
1> Source.cpp
1> コード生成しています。
1> コード生成が終了しました。
1> Project1.vcxproj -> c:\users\name\documents\visual studio 2013\Projects\Project1\Release\Project1.exe
========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ==========
何度もすいません。
削除c:\users\name\documents\visual studio 2013\Projects\OpenCV_Testの中にmain.cppをつくり、ビルドを行うと
========== すべてビルド: 1 正常終了、0 失敗、0 スキップ ========
となり、exeが出力された旨が表示されません。
やはり、何かしらの原因でexeが出力されていないようです。
現在、他の方法も試しつつ何か解決案を模索中です。
>OpenCV_Testの中にmain.cppをつくり
削除つくるだけではそのファイルはビルドに使われません。Visual Studio内のソースファイルに追加してください。
やっと実行できました!!!本当にありがとうございます。
削除どうやら原因はプロジェクトを作成した後のファイルを作る手順にあったようです。
私の場合、「新しいプロジェクト」でプロジェクトを作った後、「新しいファイル」でファイル作成をしていました。
そのため、ソリューションエクスプローラーのソースファイルの部分に、自作のソースファイルが入ってなかったみたいです。
ソリューションエクスプローラーのソースファイルの上でクリックして、ファイルの追加を行うと、自作のmain.cppが反映されて
無事にコンパイル、実行できました。いろいろアドバイスいただきありがとうございました。
OpenCV v2.4.9 VS2010 expressにて環境構築を行なっていた際に、
返信削除試行錯誤があったためコメントさせていただきます。
手順通りに設定し、ビルドを実行すると「opencv_calib3d249.lib」が見つからないとのエラーがでますが
ライブラリディレクトリ(C:\opencv\build\x86\vc10\lib等)には、該当ファイルは無く
「opencv_hoge2411.lib」が入っていました。
これに対する解決策として
>3.静的リンクライブラリの設定(リンカ用ヘッダー作成)
でDLした「opencv_lib.hpp」内には、opencv_hoge249d.libが参照されるよう記載されていましたので、
これを249から2411に変更すれば、無事ビルドが通りました。
サンプルコード以外に試していませんが、参考になれば幸いです。
VS2013 + OpenCV 2.4.10で、x64でビルドして動作しました。opencv_lib.hpp内の249を2410に置換するだけで問題ありませんでした。貴重な情報、本当にありがとうございます。
返信削除OpenCV v2.4.9とVS2013を用いて, 上記の所定の設定を行ったのですが…
返信削除「error LNK1104: ファイル 'opencv_calib3d249d.lib' を開くことができません。」
と出てしまい困っています.
ファイル名を検索すると「opencv_calib3d249d.lib」存在しているのですが…
ビルドを行なうと,「アプリケーションを正しく起動できませんでした」とのダイアログがでます.
返信削除出力結果を見ると
'Win32Project3.exe' (Win32): 'C:\Windows\SysWOW64\msvcp120d.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'Win32Project3.exe' (Win32): 'C:\Windows\SysWOW64\msvcr120d.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
プログラム '[1648] Win32Project3.exe' はコード -1073741701 (0xc000007b) で終了しました。
となっています.
その現象は再現したことないので何とも言えませんが、opencvを使わないソースコードでビルドできることを確認してみてください。opencvに関わるエラーでないと思われます。
削除error LNK1104: ファイル 'kernel32.lib' を開くことができません。 と出てしまい、「親またはプロジェクトの規定値から継承」チェックを入れても動かないのですが、どうしたらよいでしょうか?
返信削除> 5.VisualStudioの設定の「ライブラリディレクトリ」の設定で「親またはプロジェクトの規定値から継承」のチェックが外れているとその現象が起きることが有ります。
削除を正しく行ったうえでまだ動かないのですね? ライブラリ ディレクトリを開いた時の継承の値には何と書かれていますか?
私の環境(Visual Studio 2010)では、$(WindowsSdkDir)libが含まれており、
マクロでWindowsSdkDirを検索するとC:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A で、その下のlibフォルダにKernel32.Libが入っていました。
参考にしてみてください。
$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);C:\opencv\build\x86\vc12\lib;$(LibraryPath)
削除以上の文がライブラリディレクトリに書かれています。
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0Aの下にlibフォルダが存在しないで、
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1Aの方にlibフォルダがあります。これの場合どうしたらいいのでしょうか?
$(VC_LibraryPath_x86)
削除$(WindowsSDK_LibraryPath_x86)
すいません。継承の値は上のようになっていました。
$(VC_LibraryPath_x86)
削除$(WindowsSDK_LibraryPath_x86)
この名前をマクロから探して、フォルダの中にkernel32.libがあるか確認してみてください。
ないのなら、各種コンポーネントのインストールに失敗している可能性があります。
私のPCにはWindowsSDKというファイルが見当たらず、変わりにMicrosoft SDKsというファイルがあるのですが、これは関係ないのでしょうか?
削除プロジェクト>「●●のプロパティ」>構成プロパティ>「リンカー」>全般>「追加のライブラリディレクトリ」にC:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64;を加えて実行したところ、「error LNK1158: 'rc.exe' を実行できません。」表示されてしまいました。
返信削除C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64
削除はx64用だと思われます。x86用のライブラリを追加してみてください。
丁寧な解説ありがとうございました。解決できました!
削除手順のとうりにできたつもりだったのですがサンプルを実行すると下のようなエラーが出てしまいます。どこを直せばいいでしょうか?
返信削除1>d:\プロジェクト\opencv_test\main.cpp(2): fatal error C1083: include ファイルを開けません。'opencv2/opencv.hpp': No such file or directory
> 構成プロパティ→VC++ディレクトリを選択し、インクルードディレクトリの右の▼をクリックし、編集を選択し、「C:\opencv\build\include」を追加します。
削除この一文をちゃんと設定したか確認し、ここで設定したフォルダ(独自に設定したならそこ)にopencv2があり、かつその中にopencv.hppがあるか確認して下さい。Dのディスクにopencvを入れたなら、C:をD:にする必要があるとか、そういうところを。
「 >LINK : fatal error LNK1104: ファイル 'opencv_calib3d249d.lib' を開くことができません 」
返信削除というエラーで詰まっていたのですが、解決しました。
恥ずかしい、醜い、雑魚いミスです。
C:\opencv\build\x86\vc10\lib に 「opencv_calib3d249d.lib」 は確かに存在します。
なのにこのエラーが出たということはパスが間違っているのだろうと思い
「5 Visual Studio の設定」 を見直しました。原因はここでした。
C:\opencv\build\include
C:\opencv\build\x86\vc10\lib
をともに 【インクルードディレクトリ】 に設定していました。
記事を読み飛ばしていたためにミスをしてしまいました。
C:\opencv\build\x86\vc10\lib
は 【ライブラリディレクトリ】 に設定しましょう。
これで解決しました。
同じようなエラーを発生してらっしゃる方を見かけたので
ここに記させていただきました。
このようなへなちょこなミスをしてしまった方の
参考になれば幸いです。
長文失礼しました。
Windows Server2012 ,VisualStudio 2013 Express for Desktop , OpenCV2.4.8 (Cmakeを使ったインストール) という環境で、32bitから64bitにプロジェクトを変更することに悩んでいましたが、お陰様で無事動かすことが出来ました。
返信削除他のページを参考にし64ビット用のプロジェクトはできあがったのですが、32ビットライブラリを実行時にリンクしてしまいうまくいかずに悩んでいました。
このページの 4. に書かれている64ビット用パスをPath変数の最後に追加することで旨く動くようになりました。 32bit用パスはそのまま残してあります有ります(他のプロジェクトのため)。
有り難うございました。
パスの問題はいつでもつきまといますね。
削除動いて良かったです。
opencv1.1で作成したプログラムをopencv2.4.9で動かそうとしたところ、error LNK1104: ファイル 'cv.lib' を開くことができません。
返信削除と表示されました。これはバージョンアップしたことで表記の仕方が変更したのでしょうか?
どこかに #pragma comment(lib,cv.lib)って書いていませんか?
削除ないしはプロジェクトのリンカにcv.libと書いていませんか?
それを消して、ここに書いている通りすれば今までどおりのコードが使えるはずです
返信ありがとうございます。
削除#pragma comment(lib,"cv.lib")
#pragma comment(lib,"cxcore.lib")
#pragma comment(lib,"highgui.lib")
この3つが使用しているのですが、最後のプログラムを消すとエラーが発生してしまいます。
加え#include
#include
#include
#include
#include
#include
この不要なものはありますか?
コメントが途切れていてすいません。
削除言われた通りに実行したところ
cxcore.libが開くことができません
highgui.libが開くことができません
とエラーが発生しました。
上記のエラーは前回と同じ処理をしたところ
LNK2019 未解決の外部シンボルのエラーが発生しました。
これの解決策を教えてください。
opencv1.1系のコードが2系で動くかをちゃんと確認せずに返信していました。私は1.1系を一度も扱ったことがないので起こりうる問題と解決を持ち合わせていません。申し訳ないです。
削除ちなみに、未解決の外部シンボルのエラーは.libファイルがないためです。よくあるエラーです。
質問失礼いたします。
返信削除https://github.com/SatoshiRobatoFujimoto/KinectFusionV2
↑のプログラムを動かそうとしているのですが、error C1190: マネージ ターゲット コードには '/clr' が必要です。とエラーが発生します。
共通言語ランタイムサポートは(/clr)に設定しています。
解決策を教えてください。
OpenCVとは関係ないところの問題かと思われます。
削除時間があるときに試すので、少々お待ちください。解決したらまた投稿いただければ幸いです。
NuGetを使ってVisual Studio 2013にopencv2.4.10をインストールしたのですが、ビルドすると
返信削除LNK1181: 入力ファイル 'opencv_core.lib' を開けません。
と表示されました。
packages\OpenCV.2.4.10\build\native\lib\Win32\v120\Releaseの直下にはopencv_core2410.libがありますが、
opencv_core.libは見つかりません。opencv_core.libは一体どこにあるのでしょうか?
「リンカー」>全般>「追加のライブラリディレクトリ」でopencv_core2410.libのあるファイルを指定してもエラーが消えません。
どうか解決策を教えてください。
NuGetからインストールしたのですね。
削除私がインストールしたNuGet上のOpenCVだと、このブログのサンプルコードの、#include opencv2/opencv_lib.hpp の行を削除したコードを実行するだけで動きました。1から5までの手順は必要ありませんでした。
libの名前にはバージョン名が書いてあるのが普通なので、opencv_core.libは存在しないと思います。
一度、新しいプロジェクトを作って、1から5までの手順を飛ばして、NuGetからOpenCVをインストールして、サンプルコードを実行してみてください。
こんにちは、Physics Stationの管理人です。
返信削除このブログのメンテナンスは行われていませんので、今後ははてなブログで作っている新ブログで質問を受け付けます。
今まで通り、可能な限り答えていきますので、新ブログもよろしくお願いします。