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

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

ただいまの
回答率

90.52%

  • C++

    3443questions

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

  • Kinect

    85questions

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

Kinect Depth画像のみの表示

受付中

回答 1

投稿

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

noa_remiria

score 1

 前提・実現したいこと

下記のサンプルコードをいじってポインターを消して、目標として深度画像のみを表示させたいです。
(https://github.com/K4W2-Book/K4W2-Book/blob/master/C%2B%2B(Native)/02_Depth/KinectV2-Depth-01/KinectV2/main.cpp)

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

1>main.obj : error LNK2019: 未解決の外部シンボル "public: __cdecl cv::Exception::Exception(int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int)" (??0Exception@cv@@QEAA@HAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@00H@Z) が関数 "public: __cdecl cv::Mat::Mat(int,int,int,void *,unsigned __int64)" (??0Mat@cv@@QEAA@HHHPEAX_K@Z) で参照されました。
1>main.obj : error LNK2019: 未解決の外部シンボル "public: __cdecl cv::_InputArray::_InputArray(class cv::Mat const &)" (??0_InputArray@cv@@QEAA@AEBVMat@1@@Z) が関数 "private: void __cdecl KinectDepth::drawDepthFrame(void)" (?drawDepthFrame@KinectDepth@@AEAAXXZ) で参照されました。
1>main.obj : error LNK2019: 未解決の外部シンボル "int __cdecl cv::_interlockedExchangeAdd(int *,int)" (?_interlockedExchangeAdd@cv@@YAHPEAHH@Z) が関数 "public: void __cdecl cv::Mat::release(void)" (?release@Mat@cv@@QEAAXXZ) で参照されました。
1>main.obj : error LNK2019: 未解決の外部シンボル "void __cdecl cv::imshow(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class cv::_InputArray const &)" (?imshow@cv@@YAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBV_InputArray@1@@Z) が関数 "private: void __cdecl KinectDepth::drawDepthFrame(void)" (?drawDepthFrame@KinectDepth@@AEAAXXZ) で参照されました。

 該当のソースコード

#include <iostream>
#include <sstream>

#include <Kinect.h>
#include <opencv2\opencv.hpp>

#include <atlbase.h>

// 次のように使います
// ERROR_CHECK( ::GetDefaultKinectSensor( &kinect ) );
// 書籍での解説のためにマクロにしています。実際には展開した形で使うことを検討してください。
#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 KinectDepth
{
private:

    // Kinect SDK
    CComPtr<IKinectSensor> kinect = nullptr;

    CComPtr<IDepthFrameReader> depthFrameReader = nullptr;

    // 表示部分
    int depthWidth;
    int depthHeight;


    std::vector<UINT16> depthBuffer;


public:

    ~KinectDepth()
    {
        // Kinectの動作を終了する
        if (kinect != nullptr) {
            kinect->Close();
        }
    }

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

        // Depthリーダーを取得する
        CComPtr<IDepthFrameSource> depthFrameSource;
        ERROR_CHECK(kinect->get_DepthFrameSource(&depthFrameSource));
        ERROR_CHECK(depthFrameSource->OpenReader(&depthFrameReader));

        // Depth画像のサイズを取得する
        CComPtr<IFrameDescription> depthFrameDescription;
        ERROR_CHECK(depthFrameSource->get_FrameDescription(
            &depthFrameDescription));
        ERROR_CHECK(depthFrameDescription->get_Width(&depthWidth));
        ERROR_CHECK(depthFrameDescription->get_Height(&depthHeight));
        std::cout << "create :" << depthWidth << "," << depthHeight << std::endl;

        // バッファーを作成する
        depthBuffer.resize(depthWidth * depthHeight);
    }


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

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

private:

    // データの更新処理
    void update()
    {
        updateDepthFrame();
    }
    //デプスフレーム更新
    void updateDepthFrame()
    {
        // Depthフレームを取得する
        CComPtr<IDepthFrame> depthFrame;
        auto ret = depthFrameReader->AcquireLatestFrame(&depthFrame);
        if (ret = S_OK) {
            return;
        }

        // データを取得する
        ERROR_CHECK(depthFrame->CopyFrameDataToArray(depthBuffer.size(), &depthBuffer[0]));
    }

    void draw()
    {
        drawDepthFrame();
    }

    void drawDepthFrame()
    {
        // Depthデータを表示する
        cv::Mat depthImage(depthHeight, depthWidth, CV_8UC1, &depthBuffer[0]);
        cv::imshow("Depth Image", depthImage);
    }
};

int main()
{
    try {
        KinectDepth app;
        app.initialize();
        app.run();
    }
    catch (std::exception& ex) {
        std::cout << ex.what() << std::endl;
    }

 試したこと

追加ライブラリにopencv3.4.1とKinect sdkが入っていることを確認したりUINTをBYTEに変換したり、環境変数の設定もしましたが上記の未解決シンボルのエラーが出てしまいました。

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

VisialStudio 2017 ,opencv3.4.1

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

0

エラー自体がリンクのエラーなのでライブラリーのパスがちゃんと通っているかを確認されていただきたい。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/07/09 12:35

    返信遅れて申し訳ありません。

    VC++ディレクトリのライブラリディレクトリには【%opencv3.4.1%\build\x64\vc15\lib】のopencv3.4.1のライブラリを
    リンカーの追加ライブラリディレクトリには【%opencv3.4.1%\build\x64\vc15\lib】と
    【%Microsoft SDKs%Kinect\v2.0_1409\Lib\x64】のkinect SDKとopencv3.4.1のライブラリをつなげております。
    数回確認しましたがスペルミスはありませんでした。

    キャンセル

  • 2018/07/09 13:59

    VC++の追加のライブラリーの部分にopencvのライブラリーは追加されました?
    最後のエラーを例に。
    ’imshow()'がリンク出来ていないので。

    キャンセル

  • 2018/07/09 14:43

    VC++の追加のライブラリは、
    構成プロパティ→VC++ディレクトリ→全般→ライブラリ ディレクトリ
    のことでしょうか?

    キャンセル

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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

  • C++

    3443questions

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

  • Kinect

    85questions

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