###前提・実現したいこと
初めて質問します。よろしくお願いします。
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を動作させるひな形プログラムとして紹介されています。
###発生している問題・エラーメッセ
C++
1エラー 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 2 5 IntelliSense: ソース ファイルを開けません "atlbase.h" c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 5 1 pra_kinect1 3 6 IntelliSense: 識別子 "KinectApp" が定義されていません c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 17 3 pra_kinect1 4 7 IntelliSense: 識別子 "kinect" が定義されていません c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 30 2 pra_kinect1 5 8 IntelliSense: 識別子 "CComPtr" が定義されていません c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 34 2 pra_kinect1 6 9 IntelliSense: 型名は使用できません c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 34 10 pra_kinect1 7 10 IntelliSense: 識別子 "colorFrameSource" が定義されていません c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 34 29 pra_kinect1 8 11 IntelliSense: 識別子 "colorFrameReader" が定義されていません c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 36 2 pra_kinect1 9 12 IntelliSense: 型名は使用できません c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 39 10 pra_kinect1 10 13 IntelliSense: 識別子 "colorFrameDescription" が定義されていません c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 39 29 pra_kinect1 11 14 IntelliSense: 識別子 "colorFormat" が定義されていません c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 40 2 pra_kinect1 12 15 IntelliSense: 識別子 "colorWidth" が定義されていません c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 42 2 pra_kinect1 13 16 IntelliSense: 識別子 "colorHeight" が定義されていません c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 43 2 pra_kinect1 14 17 IntelliSense: 識別子 "colorBytesPerPixel" が定義されていません c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 44 2 pra_kinect1 15 18 IntelliSense: 識別子 "colorBuffer" が定義されていません c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 51 2 pra_kinect1 16 19 IntelliSense: 識別子 "CComPtr" が定義されていません c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 75 2 pra_kinect1 17 20 IntelliSense: 型名は使用できません c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 75 10 pra_kinect1 18 21 IntelliSense: 識別子 "colorFrame" が定義されていません c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 75 23 pra_kinect1 19 22 IntelliSense: 識別子 "colorFrameReader" が定義されていません c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 76 13 pra_kinect1 20 23 IntelliSense: 識別子 "colorBuffer" が定義されていません c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 82 2 pra_kinect1 21 24 IntelliSense: 識別子 "colorHeight" が定義されていません c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 96 21 pra_kinect1 22 25 IntelliSense: 識別子 "colorWidth" が定義されていません c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 96 34 pra_kinect1 23 26 IntelliSense: 識別子 "colorBuffer" が定義されていません c:\Users\hirayama\Documents\Visual Studio 2013\Projects\pra_kinect1\pra_kinect1\main.cpp 96 56 pra_kinect1 24警告 1 warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 c:\opencv3.1.0\build\include\opencv2\core\mat.hpp 1965 1 pra_kinect1 25警告 2 warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 c:\opencv3.1.0\build\include\opencv2\core\persistence.hpp 1 1 pra_kinect1 26警告 3 warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 c:\opencv3.1.0\build\include\opencv2\core\utility.hpp 1 1 pra_kinect1 27
###該当のソースコード
C++
1#include <iostream> 2#include <sstream> 3#include <Kinect.h> 4#include <opencv2\opencv.hpp> 5#include <atlbase.h> 6 7#define ERROR_CHECK( ret ) \ 8 if ( (ret) != S_OK ) { \ 9 std::stringstream ss; \ 10 ss << "failed " #ret " " << std::hex << ret << std::endl; \ 11 throw std::runtime_error( ss.str().c_str() ); \ 12 } 13 14void main() 15{ 16 try { 17 KinectApp app; 18 app.initialize(); 19 app.run(); 20 } 21 22 catch (std::exception& ex) { 23 std::cout << ex.what() << std::endl; 24 } 25} 26 27void initialize() 28{ 29 //デフォルトのKinectを取得する 30 ERROR_CHECK(::GetDefaultKinectSensor(&kinect)); 31 ERROR_CHECK(kinect->Open()); 32 33 //カラーリーダーを取得する 34 CComPtr<IColorFrameSource> colorFrameSource; 35 ERROR_CHECK(kinect->get_ColorFrameSource(&colorFrameSource)); 36 ERROR_CHECK(colorFrameSource->OpenReader(&colorFrameReader)); 37 38 //カラー画像のサイズを取得する 39 CComPtr<IFrameDescription> colorFrameDescription; 40 ERROR_CHECK(colorFrameSource->CreateFrameDescription( 41 colorFormat, &colorFrameDescription)); 42 ERROR_CHECK(colorFrameDescription->get_Width(&colorWidth)); 43 ERROR_CHECK(colorFrameDescription->get_Height(&colorHeight)); 44 ERROR_CHECK(colorFrameDescription->get_BytesPerPixel( 45 &colorBytesPerPixel)); 46 std::cout << "create : " << colorWidth << ", " << 47 colorHeight << ", " << 48 colorBytesPerPixel << std::endl; 49 50 //バッファーを作成する 51 colorBuffer.resize(colorWidth * colorHeight * colorBytesPerPixel); 52} 53 54void run() 55{ 56 while (1) { 57 update(); 58 draw(); 59 60 auto key = cv::waitKey(10); 61 if (key == 'q') { 62 break; 63 } 64 } 65} 66 67void update() 68{ 69 updateColorFrame(); 70} 71 72void updateColorFrame() 73{ 74 //フレームを取得する 75 CComPtr<IColorFrame> colorFrame; 76 auto ret = colorFrameReader->AcquireLatestFrame(&colorFrame); 77 if (FAILED(ret)) { 78 return; 79 } 80 81 //BGRAの形式でデータを取得する 82 ERROR_CHECK(colorFrame->CopyConvertedFrameDataToArray( 83 colorBuffer.size(), &colorBuffer[0], ColorImageFormat_Bgra)); 84} 85 86//データの表示処理 87void draw() 88{ 89 drawColorFrame(); 90} 91 92//カラーデータの表示処理 93void drawColorFrame() 94{ 95 //カラーデータを表示する 96 cv::Mat colorImage(colorHeight, colorWidth, CV_8UC4, &colorBuffer[0]); 97 cv::imshow("Color Image", colorImage); 98}
###試したこと
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
回答1件
あなたの回答
tips
プレビュー