質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

MinGW

MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

Q&A

解決済

2回答

4808閲覧

GPUを用いたプログラムをvisual studioで行いたいのですがエラーがでます。

carnage0216

総合スコア194

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

MinGW

MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

0グッド

0クリップ

投稿2018/03/27 06:09

編集2018/03/29 16:37

<環境>

  • Windows10 64bit
  • visual studio 2015
  • cuda9.1(opencvのgpuモジュールの為にインストールしました。)
  • opencv2.4.6

GPU高速画像処理という本を参考にコンパイルしようとしているのですが構文に関してのエラーがでます。
参考書に付属されているCDROMに入っていたプログラムをそのままコピペして貼り付け、ヘッダファイルに関してのエラーもないように見えるのでエラーの原因は構文ということはなんとなくわかるのですが、
プログラムが古いせいでエラーが出ているのかもしれないとも思っています。
初版が2013年のものなのでエラーが出てしまうのも仕方ないのですがせっかく買ったのでエラーを解決したいと思います。ただ、答えを教えられても私の勉強にならないのでヒントやアドバイスなどを頂ければと思います。

コンパイルしようとしたプログラムはこちらです。GPUのプログラムでありますが拡張子はcuではなく参考書ではcppと書いてありましたので、cuではなくcppとしました。
またデバッグではなくリリースで、かつx64でコンパイルしました

// // dispGrayscale [動画ファイル名] // // (c)Copyright Spacesoft corp., 2013 rights reserved. // Hiro KITAYAMA //-------------------------------------------------------------------------- #include <opencv2/opencv.hpp> #include <opencv2/gpu/gpu.hpp> #include <ocvlibs.h> using namespace cv; //-------------------------------------------------------------------------- //main int main(int argc, char* argv[]) { try { int wait = 1; int numOfGpu = gpu::getCudaEnabledDeviceCount(); if (numOfGpu <= 0) throw ("no Gpu available."); VideoCapture capture; if (argc == 2) { capture = VideoCapture(argv[1]); wait = 33; } else capture = VideoCapture(0); const char* wName = "dst"; Mat src, dst; gpu::GpuMat gpuSrc, gpuDst; namedWindow(wName, CV_WINDOW_AUTOSIZE); while (true) { capture >> src; if (src.empty()) break; gpuSrc.upload(src); gpu::cvtColor(gpuSrc, gpuDst, COLOR_RGB2GRAY); gpuDst.download(dst); imshow(wName, dst); if (waitKey(wait) >= 0) break; } } catch (const char* str) { std::cout << str << std::endl; } catch (const cv::Exception* ex) { std::cout << "Error: " << ex->what() << std::endl; } return 0; }

ヘッダファイルocvlibs.hは本に付属された特有のもののようなのでこちらに載せます。

//-------------------------------------------------------------------------- #ifdef _DEBUG //Debugモードの場合 #pragma comment(lib,"opencv_calib3d246d.lib") #pragma comment(lib,"opencv_core246d.lib") #pragma comment(lib,"opencv_contrib246d.lib") #pragma comment(lib,"opencv_features2d246d.lib") #pragma comment(lib,"opencv_flann246d.lib") #pragma comment(lib,"opencv_gpu246d.lib") #pragma comment(lib,"opencv_haartraining_engined.lib") #pragma comment(lib,"opencv_highgui246d.lib") #pragma comment(lib,"opencv_imgproc246d.lib") #pragma comment(lib,"opencv_legacy246d.lib") #pragma comment(lib,"opencv_ml246d.lib") #pragma comment(lib,"opencv_objdetect246d.lib") #pragma comment(lib,"opencv_ts246d.lib") #pragma comment(lib,"opencv_video246d.lib") #else //Releaseモードの場合 #pragma comment(lib,"opencv_calib3d246.lib") #pragma comment(lib,"opencv_core246.lib") #pragma comment(lib,"opencv_contrib246.lib") #pragma comment(lib,"opencv_features2d246.lib") #pragma comment(lib,"opencv_flann246.lib") #pragma comment(lib,"opencv_gpu246.lib") #pragma comment(lib,"opencv_haartraining_engine.lib") #pragma comment(lib,"opencv_highgui246.lib") #pragma comment(lib,"opencv_imgproc246.lib") #pragma comment(lib,"opencv_legacy246.lib") #pragma comment(lib,"opencv_ml246.lib") #pragma comment(lib,"opencv_objdetect246.lib") #pragma comment(lib,"opencv_ts246.lib") #pragma comment(lib,"opencv_video246.lib") #endif

visual studioでのエラーです。

https://pastebin.com/bsWfhkJC

余談ではありますがコマンドプロンプトの方でnvccを用いて同じように行ったところほぼ同じエラーが出ました。
コマンドプロンプトでnvccのコマンドでのエラーはこちらです。

https://pastebin.com/T9A8w9Ur

編集内容
nvccを使っていましたが私の勘違いで使う必要はなかったです。プログラムの拡張子がcppなので
GCCとMinGWを使ってできるかと考え行ったのですが、https://pastebin.com/Lgf2L4E2のようなエラーが出てしまい何が何だかといった状態です。visual studioでは実行ファイルは得られましたが、実行するとエラーが出てしまうのでまだ解決できていません。

編集 3/30
あの後ちゃんとした実行ファイルを出力しようともう一度最初からビルドを試したのですが、全くうまくいかず困り果てています。警告はすべて消えたのですが、構文エラーが出てきてしまい、何が問題なのかさっぱりわかりません。文字数の影響で別のサイトにエラーを書かせていただきました。お手数をおかけしますがどうかよろしくお願いいたします。

https://pastebin.com/FhdUMCaD

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2018/03/27 07:01 編集

OpenCVのバージョンは? 書籍にあるとおりにやった? OpenCVビルドできた? # 不確定要素が多くて原因が絞れないとミタ
dodox86

2018/03/27 06:59

先の質問にも言えますが、本質問に特有の情報を別サイトに書き込むのは極力避けた方が良いように思います。他の閲覧者さんに不便を強いますし、極端な話、将来、そのサイトが終わったら、質問の情報が欠落し、情報としての価値が薄れることになります。
carnage0216

2018/03/27 07:03

ごめんなさい。長かったため別のサイトを利用しました。
carnage0216

2018/03/27 07:04

opencvのビルドは出来ました。
episteme

2018/03/27 07:09

OpenCVの設定でWITH_CUDA:ONでビルドできたのね? ...だったらこんなエラー出るとは思えんのだが...
carnage0216

2018/03/27 07:22

もう一度、確認します。この場でして良い質問かはわからないのですが、コンパイルするためにcmakeなどでビルドする意味は何なのでしょうか?
episteme

2018/03/27 07:24 編集

↑なに訊いてるの? GPUに対応したOpenCVが欲しいならビルドせんわけにはいかんのとちゃうの?
carnage0216

2018/03/27 07:26

ビルドをする必要性が理解できていませんでした。調べます。
episteme

2018/03/27 07:28 編集

でもビルドしたし、ビルドできたのね? ...「調べます」って何を?
carnage0216

2018/03/27 07:30

ビルドは出来ましたが、「なぜ」ビルドしなくてはいけないのかを理解していなかったのです。理解も出来ずにただビルドしていただけなのが嫌だったのです。
carnage0216

2018/03/27 07:31

ビルドする必要性とビルドする事で何が得られるのか、ビルドしないで行う事出来るのかを調べたくなりました。
episteme

2018/03/27 07:34

で、このコードをコンパイルし実行する目的はなんですか? GPU-computing(CUDA)の勉強ができるコードじゃないのに。
Zuishin

2018/03/27 08:48

色々省いて簡単に説明すると、ソースを機械語に翻訳(コンパイル)してそれをリンクし、リソースを埋め込んで実行可能ファイルを作る一連の作業がビルドです。ビルドしなければ実行可能ファイルは無いので実行できません。家を建てる時には設計図を書いて材料を集めて加工してと様々な作業を経ます。設計図を書く作業がプログラミングならそれを読んで指示するのがコンパイル、それらも含めて家を建てる作業全てがビルドです。家は建てなきゃ住めません。C はビルドしなきゃ実行できません。
guest

回答2

0

ベストアンサー

GPUだのCUDAだのは守備範囲外なので回答できませんが、少なくともソースをUnicodeでよこせ、と言っているのですからUnicodeで保存し直してコンパイルしてみてはいかがでしょうか。

なんか、例えるなら教習所に通いながらF1のドライビングテクニックについて聞いて回っている、というような感じが。まず、路上に出るだけの基本的な知識・技能を身につけてからの方がよいのでは、と思いますが...
(って、もう散々言われてましたっけ)

投稿2018/03/27 12:33

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

carnage0216

2018/03/27 14:21

どうもありがとうございます。 Unicodeで保存し、コンパイルしたところ「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1\bin/../include\float.h(57): fatal error C1021: プリプロセッサ コマンド 'include_next' が無効です。」とだけエラーが出てきました。 float.hの中身がこちらです。 長いのでこちらに載せました。 https://pastebin.com/B7uamTNp
yumetodo

2018/03/27 22:40

お示しのfloat.hはmingw gcc向けのもののようですが、なんでそんなものがincludeされているんでしょうか?float.hはC標準ライブラリのヘッダでMSVCも持っています。なのでそんなところのfloat.hが読み込まれること自体なにかおかしいです
carnage0216

2018/03/28 09:37

あの後、試行錯誤を重ねて実行ファイルを作ることができました。しかし、実行しようとすると「アプリケーションを正しく起動できませんでした(0xc000007b)」と出てきます。 参考にした本のOSはWindows8です。私のはWindows10です。他にも64bitは同じですが、OPENCVのバージョンが違ったりします。今更ながら、本の環境と全く同じにしないと正しく実行できるものが得られないのでしょうか?だとしたらOSの時点で大きく違うので残念ながら本は参考にできないです。
YomogiKOBO

2018/03/28 12:36 編集

「動かないから参考にできない」では問題の糸口をつかめません。 デバッグは行ったのでしょうか。提示ソースでは”コマンドライン”引数に動画ファイルを指定するような事が書いていますけど 。 どこまで実行デバッグ&トレースできたのでしょうか。。
episteme

2018/03/28 23:16

↑コマンドライン引数を与えなければデフォルト動作するので、Web-cameraが生きてればOKのハズ。 で、GpuMat使わずcv::Matなら動作するか否かは確認されたのかしら?
guest

0

あなたの提示なされた文字列はどうみてもビルドにかかるエラーメッセージではないように見えますが。

投稿2018/03/27 07:13

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

carnage0216

2018/03/27 07:20

もう一度、前のデータを消さないでOpenCVの設定でWITH_CUDA:ONでビルドできたか確認してみます。 どうか、お待ち下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問