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

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

ただいまの
回答率

90.34%

  • C++

    3748questions

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

  • Kinect

    95questions

    Kinect(キネクト)はマイクロソフトから発売されたジェスチャー・音声認識によって 操作ができるデバイスです。

(再)kinectからカラー画像の表示

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 183

noa_remiria

score 3

 前提・実現したいこと

再度の質問申し訳ありません。
Visial StudioでKinectから画像データを表示したいです。
コードは下記のサイトからお借りしました。
https://github.com/K4W2-Book/K4W2-Book/blob/master/C%2B%2B(Native)/01_Color/KinectV2-Color-01/KinectV2/main.cpp
■■な機能を実装中に以下のエラーメッセージが発生しました。

 発生している問題・エラーメッセージ

opencv_world320d.dllが見つかないため、コードの実行を続行できません。

 該当のソースコード

```C++

include<iostream>

include<sstream>

include<Kinect.h>

include<opencv2/opencv.hpp>

include<atlbase.h>

define ERROR_CHECK( ret )  \

    if ( (ret) != S_OK ) {    \         std::stringstream ss;    \         ss << "failed " #ret " " << std::hex << ret << std::endl;            \         throw std::runtime_error( ss.str().c_str() );            \     }

class KinectColor { private:     //Kinect SDK     CComPtr<IKinectSensor> kinect = nullptr;

    CComPtr<IColorFrameReader> colorFrameReader = nullptr;

    int colorWidth;     int colorHeight;     unsigned int colorBytesPerPixel;

    ColorImageFormat colorFormat = ColorImageFormat::ColorImageFormat_Bgra;

    //表示部分     std::vector<BYTE> colorBuffer;

public:

    ~KinectColor()     {         //Kinectの動作停止         if (kinect != nullptr) {             kinect->Close();         }     }

    //初期化     void intialize()     {         //デフォルトのkinectを取得する         ERROR_CHECK(::GetDefaultKinectSensor(&kinect));         ERROR_CHECK(kinect->Open());

        //カラーリーダーを取得する         CComPtr<IColorFrameSource> colorFrameSource;         ERROR_CHECK(kinect->get_ColorFrameSource(&colorFrameSource));         ERROR_CHECK(colorFrameSource->OpenReader(&colorFrameReader));

        //デフォルトのカラー画像サイズを取得する         CComPtr<IFrameDescription> defaultColorFrameDescription;         ERROR_CHECK(colorFrameSource->get_FrameDescription(&defaultColorFrameDescription));         ERROR_CHECK(defaultColorFrameDescription->get_Width(&colorWidth));         ERROR_CHECK(defaultColorFrameDescription->get_Height(&colorHeight));         ERROR_CHECK(defaultColorFrameDescription->get_BytesPerPixel(&colorBytesPerPixel));         std::cout << "default :" << colorWidth << "," << colorHeight << "," << colorBytesPerPixel << std::endl;

        //カラー画像のサイズを取得する         CComPtr<IFrameDescription> colorFrameDescription;         ERROR_CHECK(colorFrameSource->CreateFrameDescription(ColorImageFormat::ColorImageFormat_Bgra, &colorFrameDescription));         ERROR_CHECK(colorFrameDescription->get_Width(&colorWidth));         ERROR_CHECK(colorFrameDescription->get_Height(&colorHeight));         ERROR_CHECK(colorFrameDescription->get_BytesPerPixel(&colorBytesPerPixel));         std::cout << "create :" << colorWidth << "," << colorHeight << "," << colorBytesPerPixel << std::endl;

        //バッファー作成         colorBuffer.resize(colorWidth * colorHeight * colorBytesPerPixel);     }

    void run()     {         while (1) {             update();             draw();

            auto key = cv::waitKey(10);             if (key == 'q') {                 break;             }         }     }

private:

    //データの更新処理     void update()     {         updateColorFrame();     }

    //カラーフレーム更新     void updateColorFrame()     {         //フレームを更新する         CComPtr<IColorFrame> colorFrame;         auto ret = colorFrameReader->AcquireLatestFrame(&colorFrame);         if (FAILED(ret)) {             return;         }

        //指定の形式でデータを取得する         ERROR_CHECK(colorFrame->CopyConvertedFrameDataToArray(colorBuffer.size(), &colorBuffer[0], colorFormat));     }

    //データの表示処理     void draw()     {         drawColorFrame();     }

    //カラーデータ表示処理     void drawColorFrame()     {

if 0

        //カラーデータを表示する         cv::Mat colorImage(colorHeight, colorWidth, CV_8UC4, &colorBuffer[0]);         cv::imshow("Color Image", colorImage);

else

        cv::Mat colorImage(colorHeight, colorWidth, CV_8UC4, &colorBuffer[0]);         cv::Mat harfImage;         cv::resize(colorImage, harfImage, cv::Size(), 0.5, 0.5);         cv::imshow("Harf Image", harfImage);

endif

    } };

int main() {     try {         KinectColor color;         color.intialize();         color.run();     }     catch (std::exception& ex) {         std::cout << ex.what() << std::endl;     } }```

 試したこと

以前質問しました際と同様ですがopenCVのバージョンをNuGetパッケージの2.4から公式からDLして3.2バージョンに変更したり
C++の出力部分を以前成功したものと比べたりしましたが全く同一でした。
また、プロジェクト自体を3回ほど同じコード同じ設定で試してみたのですが上記のようなエラーメッセージが出てしまいました。
さらにopencvの再インストールや環境変数も変えたのですが同じエラーメッセージが出てしまいました

 補足情報(FW/ツールのバージョンなど)

Visial Studio2017 opencv3.2

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

環境変数を変えてみたらできました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • C++

    3748questions

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

  • Kinect

    95questions

    Kinect(キネクト)はマイクロソフトから発売されたジェスチャー・音声認識によって 操作ができるデバイスです。