kinect v2で音声方向を扱うためのプログラミングを行ったのですが、LNK2019のエラーが出てしまい、先に進めなくなってしまいました。
###発生している問題・エラーメッセージ
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー LNK2019 未解決の外部シンボル "void __cdecl cv::line(class cv::Mat &,class cv::Point_<int>,class cv::Point_<int>,class cv::Scalar_<double> const &,int,int,int)" (?line@cv@@YAXAAVMat@1@V?$Point_@H@1@1ABV?$Scalar_@N@1@HHH@Z) が関数 "private: void __thiscall KinectApp::draw(void)" (?draw@KinectApp@@AAEXXZ) で参照されました。 kinect C:\Users\Daiki Tanaka\Documents\Visual Studio 2015\Projects\kinect\kinect\base.obj 1 エラー 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@@YAXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV_InputArray@1@@Z) が関数 "private: void __thiscall KinectApp::draw(void)" (?draw@KinectApp@@AAEXXZ) で参照されました。 kinect C:\Users\Daiki Tanaka\Documents\Visual Studio 2015\Projects\kinect\kinect\base.obj 1 エラー LNK2019 未解決の外部シンボル "void __cdecl cv::fastFree(void *)" (?fastFree@cv@@YAXPAX@Z) が関数 "public: __thiscall cv::Mat::~Mat(void)" (??1Mat@cv@@QAE@XZ) で参照されました。 kinect C:\Users\Daiki Tanaka\Documents\Visual Studio 2015\Projects\kinect\kinect\base.obj 1 エラー LNK2019 未解決の外部シンボル "void __cdecl cv::error(class cv::Exception const &)" (?error@cv@@YAXABVException@1@@Z) が関数 "public: __thiscall cv::Mat::Mat(int,int,int,void *,unsigned int)" (??0Mat@cv@@QAE@HHHPAXI@Z) で参照されました。 kinect C:\Users\Daiki Tanaka\Documents\Visual Studio 2015\Projects\kinect\kinect\base.obj 1 エラー LNK2019 未解決の外部シンボル "public: __thiscall cv::_InputArray::_InputArray(class cv::Mat const &)" (??0_InputArray@cv@@QAE@ABVMat@1@@Z) が関数 "private: void __thiscall KinectApp::draw(void)" (?draw@KinectApp@@AAEXXZ) で参照されました。 kinect C:\Users\Daiki Tanaka\Documents\Visual Studio 2015\Projects\kinect\kinect\base.obj 1 エラー LNK2019 未解決の外部シンボル "public: __thiscall 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@@QAE@HABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@00H@Z) が関数 "public: __thiscall cv::Mat::Mat(int,int,int,void *,unsigned int)" (??0Mat@cv@@QAE@HHHPAXI@Z) で参照されました。 kinect C:\Users\Daiki Tanaka\Documents\Visual Studio 2015\Projects\kinect\kinect\base.obj 1 エラー LNK2019 未解決の外部シンボル "public: void __thiscall cv::Mat::deallocate(void)" (?deallocate@Mat@cv@@QAEXXZ) が関数 "public: void __thiscall cv::Mat::release(void)" (?release@Mat@cv@@QAEXXZ) で参照されました。 kinect C:\Users\Daiki Tanaka\Documents\Visual Studio 2015\Projects\kinect\kinect\base.obj 1 エラー LNK2019 未解決の外部シンボル "public: void __thiscall cv::Mat::copySize(class cv::Mat const &)" (?copySize@Mat@cv@@QAEXABV12@@Z) が関数 "public: __thiscall cv::Mat::Mat(class cv::Mat const &)" (??0Mat@cv@@QAE@ABV01@@Z) で参照されました。 kinect C:\Users\Daiki Tanaka\Documents\Visual Studio 2015\Projects\kinect\kinect\base.obj 1 エラー LNK2019 未解決の外部シンボル "public: virtual __thiscall cv::Exception::~Exception(void)" (??1Exception@cv@@UAE@XZ) が関数 "public: __thiscall cv::Mat::Mat(int,int,int,void *,unsigned int)" (??0Mat@cv@@QAE@HHHPAXI@Z) で参照されました。 kinect C:\Users\Daiki Tanaka\Documents\Visual Studio 2015\Projects\kinect\kinect\base.obj 1 エラー LNK2019 未解決の外部シンボル "public: static class cv::MatExpr __cdecl cv::Mat::zeros(int,int,int)" (?zeros@Mat@cv@@SA?AVMatExpr@2@HHH@Z) が関数 "private: void __thiscall KinectApp::draw(void)" (?draw@KinectApp@@AAEXXZ) で参照されました。 kinect C:\Users\Daiki Tanaka\Documents\Visual Studio 2015\Projects\kinect\kinect\base.obj 1 エラー LNK2019 未解決の外部シンボル "int __cdecl cv::_interlockedExchangeAdd(int *,int)" (?_interlockedExchangeAdd@cv@@YAHPAHH@Z) が関数 "public: __thiscall cv::Mat::Mat(class cv::Mat const &)" (??0Mat@cv@@QAE@ABV01@@Z) で参照されました。 kinect C:\Users\Daiki Tanaka\Documents\Visual Studio 2015\Projects\kinect\kinect\base.obj 1 エラー LNK2019 未解決の外部シンボル "int __cdecl cv::waitKey(int)" (?waitKey@cv@@YAHH@Z) が関数 "public: void __thiscall KinectApp::run(void)" (?run@KinectApp@@QAEXXZ) で参照されました。 kinect C:\Users\Daiki Tanaka\Documents\Visual Studio 2015\Projects\kinect\kinect\base.obj 1
###該当のソースコード
#include <iostream> #include <sstream> #include<Kinect.h> #include<opencv2\opencv.hpp>//opencv #include<atlbase.h>//opencv #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 KinectApp { private: CComPtr<IKinectSensor>kinect = nullptr; CComPtr<IAudioBeamFrameReader> audioBeamFrameReader = nullptr; float beamAngle; float beamAngleConfidence; //IKinectSensor* kinect = nullptr; IColorFrameReader* colorFrameReader = nullptr; std::vector<BYTE> colorBuffer; int colorWidth; int colorHeight; unsigned int colorBytesPerPixel; WAITABLE_HANDLE waitableHandle = 0; bool isAvailable = false; public: 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(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); //オーディオを開く CComPtr<IAudioSource> audioSource; ERROR_CHECK(kinect->get_AudioSource(&audioSource)); ERROR_CHECK(audioSource->OpenReader(&audioBeamFrameReader)); } void updateAudioFrame() { CComPtr<IAudioBeamFrameList> audioBeamFrameList; auto ret = audioBeamFrameReader->AcquireLatestBeamFrames(&audioBeamFrameList); if (ret != S_OK) { return; } //ビームフレームを取得する UINT beamCount = 0; ERROR_CHECK(audioBeamFrameList->get_BeamCount(&beamCount)); for (int i = 0; i < beamCount; i++) { CComPtr<IAudioBeamFrame> audioBeamFrame; ERROR_CHECK(audioBeamFrameList->OpenAudioBeamFrame(i, &audioBeamFrame)); //サブフレームを取得する UINT subFrameCount = 0; ERROR_CHECK(audioBeamFrame->get_SubFrameCount(&subFrameCount)); for (int j = 0; j < subFrameCount; j++) { CComPtr<IAudioBeamSubFrame> audioBeamSubFrame; ERROR_CHECK(audioBeamFrame->GetSubFrame(j, &audioBeamSubFrame)); //角度及び角度の信頼性を取得する ERROR_CHECK(audioBeamSubFrame->get_BeamAngle(&beamAngle)); ERROR_CHECK(audioBeamSubFrame->get_BeamAngleConfidence(&beamAngleConfidence)); } } } 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; } //if (ret == S_OK) { // BGRAの形式でデータを取得する ERROR_CHECK(colorFrame->CopyConvertedFrameDataToArray( colorBuffer.size(), &colorBuffer[0], ColorImageFormat::ColorImageFormat_Bgra)); // スマートポインタを使ってない場合は、自分でフレームを解放する // colorFrame->Release(); // } } void draw() { drawColorFrame(); cv::Mat image = cv::Mat::zeros(480, 640, CV_8UC4); //ラジアンから度に変換する auto angle = beamAngle * 180 / 3.1416; //線を回転させる(逆回転させる) auto alpha = 3.1416 / -angle; int offsetX = 320; int offsetY = 240; auto XZ = 0 * cos(alpha) - offsetY * sin(alpha); auto YZ = 0 * sin(alpha) + offsetY * cos(alpha); //回転させた線を描画する cv::line(image, cv::Point(offsetX, 0), cv::Point(offsetX + XZ, YZ), cv::Scalar(255, 255, 255), 10); cv::imshow("AudioBeamAngle", image); } void drawColorFrame() { // カラーデータを表示する cv::Mat colorImage(colorHeight, colorWidth, CV_8UC4, &colorBuffer[0]); cv::imshow("Color Image", colorImage); } }; void main() { try { KinectApp app; app.initialize(); app.run(); } catch (std::exception& ex) { std::cout << ex.what() << std::endl; } }
###試したこと
プログラミングしている環境は、visualstudio2015で行っています。構成プロパティのC/C++の追加のインクルードディレクトリに、$(KINECTSDK20_DIR)\incを、構成プロパティ|リンカー|追加のライブラリディレクトリに$(KINECTSDK20_DIR)\lib\x86を、構成プロパティ|リンカー|入力|追加の依存ファイルにKINECT20.libは追加済みです。
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/04 07:46
2017/08/04 09:21
2017/08/09 01:29
2017/08/09 02:01
2017/08/09 02:21
2017/08/09 02:23
2017/08/09 05:31