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

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

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

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

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

Q&A

2回答

11198閲覧

Opencvのサンプルコードが動かない

asfag

総合スコア11

OpenCV

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

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

0グッド

0クリップ

投稿2016/07/26 15:53

http://kivantium.hateblo.jp/entry/20120822/p1
こちらにあるサイトのソースコードをコンパイルしたのですが、kinectに移りません。
何が原因なのかわかる方がいらっしゃいましたらアドバイスをお願いします。
ソースファイルに上記のコードを、Labeling.hをヘッダファイルに書きました。
以下が出力に出る表示です。
'balltest.exe' (Win32): 'C:\Users\ishikawa\Documents\Visual Studio 2013\Projects\balltest\x64\Release\balltest.exe' が読み込まれました。シンボルが読み込まれました。
'balltest.exe' (Win32): 'C:\Windows\System32\ntdll.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\kernel32.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\KernelBase.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\msvcr120.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\msvcp120.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\software\opencv300\opencv\build\x64\vc12\bin\opencv_world300.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\user32.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\gdi32.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\ole32.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\combase.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\msvcrt.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\rpcrt4.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\bcryptprimitives.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\sechost.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\oleaut32.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\comdlg32.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\SHCore.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\shlwapi.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\shell32.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_5.82.10586.0_none_396e892957c7fb25\comctl32.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\cfgmgr32.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\advapi32.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\windows.storage.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\kernel.appcore.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\powrprof.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\profapi.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\FirewallAPI.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\netapi32.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\davhlpr.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\msvfw32.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\avifil32.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\avicap32.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\winmm.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\msacm32.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\winmmbase.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\winmmbase.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\winmmbase.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\winmmbase.dll' がアンロードされました
'balltest.exe' (Win32): 'C:\Windows\System32\winmmbase.dll' がアンロードされました
'balltest.exe' (Win32): 'C:\Windows\System32\imm32.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\fwbase.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\uxtheme.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\clbcatq.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\devenum.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\setupapi.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\ntmarta.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\devobj.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\wintrust.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\msasn1.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\crypt32.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\msdmo.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
'balltest.exe' (Win32): 'C:\Windows\System32\devenum.dll' がアンロードされました
First-chance exception at 0x00007FFF9B6E1F28 in balltest.exe: Microsoft C++ exception: cv::Exception at memory location 0x0000002E25FDF1F0.
スレッド 0xf44 はコード 0 (0x0) で終了しました。
スレッド 0xf38 はコード 0 (0x0) で終了しました。
スレッド 0xf40 はコード 0 (0x0) で終了しました。
プログラム '[3416] balltest.exe' はコード 0 (0x0) で終了しました。
イメージ説明
よろしくお願いします。

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

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

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

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

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

Chironian

2016/07/26 16:06

OpenCVの人は少ないですし、kinect持っている人は更に少ないから回答できる人がいないだけと思いますよ。私もその一人です。見てはいるのですが手も足も出そうにないので回答できないのですよ。ところで、2重投稿はさけた方が良いですよ。
guest

回答2

0

原因はおそらく以下の三つです。

・kinectがPCに接続されてない
・Kinect v2を使っている
・Kinect以外のカメラデバイスを取得してしまっている

Kinect v2を使っている場合、下記の通りプログラムを修正してください。

//int x, y; int x = 1920; int y = 1080; short *dst; LabelingBS labeling; RegionInfoBS *ri; dst = new short[x * y]; imgThreshold_R = cvCreateImage(cvSize(x, y), IPL_DEPTH_8U, 1); imgThreshold_G = cvCreateImage(cvSize(x, y), IPL_DEPTH_8U, 1); imgThreshold_B = cvCreateImage(cvSize(x, y), IPL_DEPTH_8U, 1); imgResult = cvCreateImage(cvSize(x, y), IPL_DEPTH_8U, 1); imgTmp = cvCreateImage(cvSize(x, y), IPL_DEPTH_8U, 1); imgR = cvCreateImage(cvSize(x, y), IPL_DEPTH_8U, 1); //Red imgG = cvCreateImage(cvSize(x, y), IPL_DEPTH_8U, 1); //Green imgB = cvCreateImage(cvSize(x, y), IPL_DEPTH_8U, 1); //Blue

Kinectのバージョンにより、解像度が異なり、プログラムでの指定の解像度と異なり、何のログもなしにクラッシュします。

Kinectごとの仕様はこちらに記載されています。
https://www.buildinsider.net/small/kinectv2cpp/01

それでもクラッシュする場合、

VideoCapture capture(0);

の後に

if (!capture.isOpened()) { printf("デバイスがみつけれなかった\n"); return -1; }

とプログラムを書くと、とりあえずカメラデバイスを認識したか判別できます。

kinectをPCに接続しているのに、「デバイスがみつけれなかった」と出た場合は、kinectの認識がそもそも失敗しているので、そこから原因を探る必要があります。

「デバイスがみつけれなかった」も出ず、解像度設定もちゃんとしているにも関わらずクラッシュする場合は、PCに元からついてるカメラを認識してしまっている可能性があり、そのデバイスの解像度で研鑽するものですからクラッシュします。

VideoCapture capture(1);

という風にデバイス番号を変えてみると、認識するかもしれません。

プログラムに精通している方は、

https://github.com/opencv/opencv

こちらにライブラリ化されてないソースがありますので、どのように動作しているか確認できます。

#include <iostream> #include <opencv2/opencv.hpp> #include <cstdio> #include "Labeling.h" using namespace cv; using namespace std; //ブレークポイントで調べたところ、cvSplit関数でクラッシュしてたのが分かったので、OpenCVの生コードをコピペして中でどのように動作してるのか調べてみた CV_IMPL void cvSplit(const void* srcarr, void* dstarr0, void* dstarr1, void* dstarr2, void* dstarr3) { void* dptrs[] = { dstarr0, dstarr1, dstarr2, dstarr3 }; cv::Mat src = cv::cvarrToMat(srcarr); int i, j, nz = 0; for (i = 0; i < 4; i++) { //nz += dptrs[i] != 0; if (dptrs[i] != 0) { nz += 1; } } CV_Assert(nz > 0); std::vector<cv::Mat> dvec(nz); std::vector<int> pairs(nz * 2); for (i = j = 0; i < 4; i++) { if (dptrs[i] != 0) { dvec[j] = cv::cvarrToMat(dptrs[i]); CV_Assert(dvec[j].size() == src.size());//ここで強制終了してた。 CV_Assert(dvec[j].depth() == src.depth()); CV_Assert(dvec[j].channels() == 1); CV_Assert(i < src.channels()); pairs[j * 2] = i; pairs[j * 2 + 1] = j; j++; } } if (nz == src.channels()) { cv::split(src, dvec); } else { cv::mixChannels(&src, 1, &dvec[0], nz, &pairs[0], nz); } } int num; int main() { try { //VideoCapture capture(0);//デバイスを開く VideoCapture capture; //Kinectもカメラもないから適当な動画を開いてみた capture.open("C:/opencv-master/samples/data/Megamind.avi"); // 動画ファイルが開けたか調べる if (!capture.isOpened()) { printf("デバイスがみつけれなかった\n"); return -1; } Mat RGBMap, Cloud, valid; IplImage ipl_RGB; IplImage *imgR, *imgG = 0, *imgB; IplImage *imgThreshold_R, *imgThreshold_G, *imgThreshold_B, *imgResult, *imgTmp, *RGB_image; //Megamind.aviの解像度 int x = 720; int y = 528; short *dst; LabelingBS labeling; RegionInfoBS *ri; dst = new short[x * y]; imgThreshold_R = cvCreateImage(cvSize(x, y), IPL_DEPTH_8U, 1); imgThreshold_G = cvCreateImage(cvSize(x, y), IPL_DEPTH_8U, 1); imgThreshold_B = cvCreateImage(cvSize(x, y), IPL_DEPTH_8U, 1); imgResult = cvCreateImage(cvSize(x, y), IPL_DEPTH_8U, 1); imgTmp = cvCreateImage(cvSize(x, y), IPL_DEPTH_8U, 1); imgR = cvCreateImage(cvSize(x, y), IPL_DEPTH_8U, 1); //Red imgG = cvCreateImage(cvSize(x, y), IPL_DEPTH_8U, 1); //Green imgB = cvCreateImage(cvSize(x, y), IPL_DEPTH_8U, 1); //Blue while (1) { // データの更新を待つ capture.grab(); //////////////////////////////////////////////////////////// // RGBを取得して表示 capture.retrieve(RGBMap, CV_CAP_OPENNI_BGR_IMAGE); ipl_RGB = RGBMap; RGB_image = &ipl_RGB; cvSplit(RGB_image, imgB, imgG, imgR, NULL);//コピペした関数が呼ばれる ////////////////////////////////////////////////////////////

~PDB ファイルを開けないか、ファイルが見つかりません。
というメッセージは、あまり関係ないメッセージですので、気にしなくてもいいです。

気になる場合は、

http://tomokop.hatenablog.com/entry/20131125/1385391709

こちらのサイトの通りにすれば修正できると思います。

投稿2018/08/28 03:25

NyataoChan

総合スコア8

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

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

0

balltest.exe' (Win32): 'C:\Windows\System32\ntdll.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。

このメッセージから、お使いのWindowsは、32ビット版だと思われます。
(64ビット版では、 C:\Windows\SysWOW64\にあるDLLが読み込まれるはずですから。)

'balltest.exe' (Win32): 'C:\Users\ishikawa\Documents\Visual Studio 2013\Projects\balltest\x64\Release\balltest.exe' が読み込まれました。シンボルが読み込まれました。

一方、"balltest.exe"というファイルのパスに"x64"が含まれている事から、balltest.exeは64ビット版windows用のアプリケーションであろうと推測されます。

64ビット版windows用アプリを32ビット版のWindowsで実行することはできません。
これがエラーの原因ではないかと思われます。

Opencvは、32ビット版windows向けと64ビット版windows向けの両方が提供されていますから、32ビット版windows向けのものを試されては如何でしょうか。

投稿2016/07/27 02:10

coco_bauer

総合スコア6915

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問