プロが教えるわが家の防犯対策術!

Visual Studio2015 C++で書いています
#include <iostream>
#include <sstream>

//NuiApi.hの前にWindows.hをインクルードする
#include <Windows.h>
#include <NuiApi.h>

#include<opencv2/opencv.hpp>

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

const NUI_IMAGE_RESOLUTION CAMERA_RESOLUTION = NUI_IMAGE_RESOLUTION_640x480;

class KinectSample
{
private:

INuiSensor* kinect;
HANDLE imageStreamHandle;

DWORD width;
DWORD height;

public:

KinectSample()
{

}

~KinectSample()
{
//終了処理
if (kinect != 0) {
kinect->NuiShutdown();
kinect->Release();
}
}

void initialize()
{
createInstance();

//Kinectの設定を初期化する
ERROR_CHECK(kinect->NuiInitialize(NUI_INITIALIZE_FLAG_USES_COLOR));

//RGBカメラを初期化する
ERROR_CHECK(kinect->NuiImageStreamOpen(NUI_IMAGE_TYPE_COLOR,CAMERA_RESOLUTION, 0, 2, 0, &imageStreamHandle));

//指定した解像度の画面サイズを取得する
::NuiImageResolutionToSize(CAMERA_RESOLUTION, width, height);
}

void run()
{
cv::Mat image;

//メインループ
while (1) {
drawRgbImage(image);

//画面を表示する
cv::imshow("Kinect Sample", image);

//終了のためのキー入力チェック兼、表示のためにウェイト
int key = cv::waitKey(10);
if (key == 'q') {
break;
}
}
}

private:

void createInstance()
{
//接続されているKinectの数を取得する
int count = 0;
ERROR_CHECK(::NuiGetSensorCount(&count));
if (count == 0) {
throw std::runtime_error("Kinectを接続してください");
}

//最初のKinectのインスタンスを作成する
ERROR_CHECK(::NuiCreateSensorByIndex(0, &kinect));

//Kinectの状態を取得する
HRESULT status = kinect->NuiStatus();
if (status != S_OK) {
throw std::runtime_error("Kinectが利用可能ではありません");
}
}

void drawRgbImage(cv::Mat& image)
{
//RGBカメラのフレームデータを取得する
NUI_IMAGE_FRAME imageFrame = { 0 };
ERROR_CHECK(kinect->NuiImageStreamGetNextFrame(imageStreamHandle, INFINITE, &imageFrame));

//画像データを取得する
NUI_LOCKED_RECT colorData;
imageFrame.pFrameTexture->LockRect(0, &colorData, 0, 0);

//フレームデータを開放する
ERROR_CHECK(kinect->NuiImageStreamReleaseFrame(imageStreamHandle, &imageFrame));
}
};

void main()
{
try {
KinectSample kinect;
kinect.initialize();
kinect.run();
}
catch (std::exception& ex) {
std::cout << ex.what() << std::endl;
}
}
error LNK2019: 未解決の外部シンボル "private: char * __cdecl cv::String::allocate(unsigned __int64)" (?allocate@String@cv@@AEAAPEAD_K@Z) が関数 "public: __cdecl cv::String::String(char const *)" (??0String@cv@@QEAA@PEBD@Z) で参照されました。
error LNK2019: 未解決の外部シンボル "private: void __cdecl cv::String::deallocate(void)" (?deallocate@String@cv@@AEAAXXZ) が関数 "public: __cdecl cv::String::~String(void)" (??1String@cv@@QEAA@XZ) で参照されました。
error LNK2019: 未解決の外部シンボル "void __cdecl cv::imshow(class cv::String const &,class cv::_InputArray const &)" (?imshow@cv@@YAXAEBVString@1@AEBV_InputArray@1@@Z) が関数 "public: void __cdecl KinectSample::run(void)" (?run@KinectSample@@QEAAXXZ) で参照されました。
fatal error LNK1120: 3 件の未解決の外部参照

コンパイルしようとすると上記のようなエラーが出ます

A 回答 (1件)

しかるべきライブラリをリンクするように指定していますか?

    • good
    • 0
この回答へのお礼

ありがとうございます。何とかコンパイルは出来ました

お礼日時:2016/08/31 15:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!