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

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

ただいまの
回答率

90.23%

C++ KinectV2 atlbase.hがインクルードできない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 3,115

tiroru

score 5

前提・実現したいこと

初めて質問します。よろしくお願いします。
C++、visual studio express 2013 for Windows Desktopで書籍『KINECT for Windows SDK プログラミング V2センサー対応版(中村薫、秀和システム)』を参考にしながら、kinectの以下のプログラムを動かそうとしているのですが、
「#include <atlbase.h>」
の部分でエラーが出てしまいます。
調べてみるとatlbase.hを使うにはATLが必要らしく、そのATLはWDKの中に含まれているということが分かりました。
しかし、express版ではWDKをサポートしておらず自前で環境構築しなくてはならなくてこの操作が分かりません。具体的には、WDK 10をインストールしてみたのですがこの後はどうしたらよいのでしょうか?そもそもWDK 10をインストールするので合っているのでしょうか?
ちなみに書籍ではkinectを動作させるひな形プログラムとして紹介されています。

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

エラー    4    error C1083: include ファイルを開けません。'atlbase.h':No such file or directory    c:\users\hirayama\documents\visual studio 2013\projects\pra_kinect1\pra_kinect1\main.cpp    5    1    pra_kinect1
    5    IntelliSense: ソース ファイルを開けません "atlbase.h"    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    5    1    pra_kinect1
    6    IntelliSense: 識別子 "KinectApp" が定義されていません    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    17    3    pra_kinect1
    7    IntelliSense: 識別子 "kinect" が定義されていません    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    30    2    pra_kinect1
    8    IntelliSense: 識別子 "CComPtr" が定義されていません    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    34    2    pra_kinect1
    9    IntelliSense: 型名は使用できません    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    34    10    pra_kinect1
    10    IntelliSense: 識別子 "colorFrameSource" が定義されていません    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    34    29    pra_kinect1
    11    IntelliSense: 識別子 "colorFrameReader" が定義されていません    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    36    2    pra_kinect1
    12    IntelliSense: 型名は使用できません    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    39    10    pra_kinect1
    13    IntelliSense: 識別子 "colorFrameDescription" が定義されていません    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    39    29    pra_kinect1
    14    IntelliSense: 識別子 "colorFormat" が定義されていません    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    40    2    pra_kinect1
    15    IntelliSense: 識別子 "colorWidth" が定義されていません    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    42    2    pra_kinect1
    16    IntelliSense: 識別子 "colorHeight" が定義されていません    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    43    2    pra_kinect1
    17    IntelliSense: 識別子 "colorBytesPerPixel" が定義されていません    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    44    2    pra_kinect1
    18    IntelliSense: 識別子 "colorBuffer" が定義されていません    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    51    2    pra_kinect1
    19    IntelliSense: 識別子 "CComPtr" が定義されていません    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    75    2    pra_kinect1
    20    IntelliSense: 型名は使用できません    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    75    10    pra_kinect1
    21    IntelliSense: 識別子 "colorFrame" が定義されていません    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    75    23    pra_kinect1
    22    IntelliSense: 識別子 "colorFrameReader" が定義されていません    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    76    13    pra_kinect1
    23    IntelliSense: 識別子 "colorBuffer" が定義されていません    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    82    2    pra_kinect1
    24    IntelliSense: 識別子 "colorHeight" が定義されていません    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    96    21    pra_kinect1
    25    IntelliSense: 識別子 "colorWidth" が定義されていません    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    96    34    pra_kinect1
    26    IntelliSense: 識別子 "colorBuffer" が定義されていません    c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp    96    56    pra_kinect1
警告    1    warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。    c:\opencv3.1.0\build\include\opencv2\core\mat.hpp    1965    1    pra_kinect1
警告    2    warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。    c:\opencv3.1.0\build\include\opencv2\core\persistence.hpp    1    1    pra_kinect1
警告    3    warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。    c:\opencv3.1.0\build\include\opencv2\core\utility.hpp    1    1    pra_kinect1

該当のソースコード

#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() );              \
        }

void main()
{
    try {
        KinectApp app;
        app.initialize();
        app.run();
    }

    catch (std::exception& ex) {
        std::cout << ex.what() << std::endl;
    }
}

void initialize()
{
    //デフォルトの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> colorFrameDescription;
    ERROR_CHECK(colorFrameSource->CreateFrameDescription(
        colorFormat, &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;
        }
    }
}

void update()
{
    updateColorFrame();
}

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

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

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

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

試したこと

https://developer.microsoft.com/en-us/windows/hardware/windows-driver-kit
で「Install Windows Driver Kit (WDK) 10」をクリックしてインストールしました。
また、警告「Unicode形式で保存してください」に対しては[ファイル]-[保存オプションの詳細設定]-[エンコード]で[Unicode(UTF-8 シグネチャ付き) - コードページ 65001]を選択してビルドしましたが警告は消えませんでした。

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

C++
Visual Studio Express 2013 for Windows Desktop
Windows 10 Pro
64ビットos

Win32コンソールアプリケーション
Kinect for Windows SDK v2.0
opencv3.1.0

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • naomi3

    2016/10/15 14:59

    ファイルatlbase.h存在するディレクトリのパスをインクルード ディレクトリに追加していますか?

    キャンセル

  • tiroru

    2016/10/16 17:35

    おそらくしていません。atlbase.hがどこにあるのか分からないです。僕の質問自体をatlbase.hがどこにあるのか、どう手に入れるのかという質問に置き換えるべきだったかもしれないです。現在の[追加のインクルードディレクトリ]は[全ての構成]を選択した状態でC:\opencv3.1.0\build\includeと$(KINECTSDK20_DIR)\incです。

    キャンセル

回答 1

check解決した方法

0

解決できなかったので、
visual studio 2013 professionalを使用することになりました。
ご一緒に悩んでくださった方ありがとうございました。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

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