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

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

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

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

Kinect

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

Q&A

解決済

1回答

2084閲覧

kinectからカラー画像の取得

noa_remiria

総合スコア11

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

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

Kinect

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

0グッド

0クリップ

投稿2018/07/03 08:27

前提・実現したいこと

kinectを使ったカラー画像の取得するためにサンプルコードを動かしたい。
下記のサンプルコード使用しました。
https://github.com/K4W2-Book/K4W2-Book/blob/master/C%2B%2B(Native)/01_Color/KinectV2-Color-01/KinectV2/main.cpp)

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

1>c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(208): note: 'fopen' の宣言を確認してください C4996 . Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. kinect color d:\vsc++2017\opencv\build\include\opencv2\flann\logger.h

該当のソースコード

C++

1#include <iostream> 2#include <sstream> 3#include <map> 4 5#include <Kinect.h> 6#include <opencv2\opencv.hpp> 7 8#include <atlbase.h> 9 10// 次のように使います 11// ERROR_CHECK( ::GetDefaultKinectSensor( &kinect ) ); 12// 書籍での解説のためにマクロにしています。実際には展開した形で使うことを検討してください。 13#define ERROR_CHECK( ret ) \ 14 if ( (ret) != S_OK ) { \ 15 std::stringstream ss; \ 16 ss << "failed " #ret " " << std::hex << ret << std::endl; \ 17 throw std::runtime_error( ss.str().c_str() ); \ 18 } 19 20class KinectApp 21{ 22private: 23 24 // Kinect SDK 25 CComPtr<IKinectSensor> kinect = nullptr; 26 27 CComPtr<IColorFrameReader> colorFrameReader = nullptr; 28 29 int colorWidth; 30 int colorHeight; 31 unsigned int colorBytesPerPixel; 32 33 ColorImageFormat colorFormat = ColorImageFormat::ColorImageFormat_Bgra; 34 35 // 表示部分 36 std::vector<BYTE> colorBuffer; 37 38public: 39 40 ~KinectApp() 41 { 42 // Kinectの動作を終了する 43 if (kinect != nullptr) { 44 kinect->Close(); 45 } 46 } 47 48 // 初期化 49 void initialize() 50 { 51 // デフォルトのKinectを取得する 52 ERROR_CHECK(::GetDefaultKinectSensor(&kinect)); 53 ERROR_CHECK(kinect->Open()); 54 55 // カラーリーダーを取得する 56 CComPtr<IColorFrameSource> colorFrameSource; 57 ERROR_CHECK(kinect->get_ColorFrameSource(&colorFrameSource)); 58 ERROR_CHECK(colorFrameSource->OpenReader(&colorFrameReader)); 59 60 // デフォルトのカラー画像のサイズを取得する 61 CComPtr<IFrameDescription> defaultColorFrameDescription; 62 ERROR_CHECK(colorFrameSource->get_FrameDescription(&defaultColorFrameDescription)); 63 ERROR_CHECK(defaultColorFrameDescription->get_Width(&colorWidth)); 64 ERROR_CHECK(defaultColorFrameDescription->get_Height(&colorHeight)); 65 ERROR_CHECK(defaultColorFrameDescription->get_BytesPerPixel(&colorBytesPerPixel)); 66 std::cout << "default : " << colorWidth << ", " << colorHeight << ", " << colorBytesPerPixel << std::endl; 67 68 // カラー画像のサイズを取得する 69 CComPtr<IFrameDescription> colorFrameDescription; 70 ERROR_CHECK(colorFrameSource->CreateFrameDescription( 71 colorFormat, &colorFrameDescription)); 72 ERROR_CHECK(colorFrameDescription->get_Width(&colorWidth)); 73 ERROR_CHECK(colorFrameDescription->get_Height(&colorHeight)); 74 ERROR_CHECK(colorFrameDescription->get_BytesPerPixel(&colorBytesPerPixel)); 75 std::cout << "create : " << colorWidth << ", " << colorHeight << ", " << colorBytesPerPixel << std::endl; 76 77 // バッファーを作成する 78 colorBuffer.resize(colorWidth * colorHeight * colorBytesPerPixel); 79 } 80 81 void run() 82 { 83 while (1) { 84 update(); 85 draw(); 86 87 auto key = cv::waitKey(10); 88 if (key == 'q') { 89 break; 90 } 91 } 92 } 93 94private: 95 96 // データの更新処理 97 void update() 98 { 99 updateColorFrame(); 100 } 101 102 // カラーフレームの更新 103 void updateColorFrame() 104 { 105 // フレームを取得する 106 CComPtr<IColorFrame> colorFrame; 107 auto ret = colorFrameReader->AcquireLatestFrame(&colorFrame); 108 if (FAILED(ret)) { 109 return; 110 } 111 112 // 指定の形式でデータを取得する 113 ERROR_CHECK(colorFrame->CopyConvertedFrameDataToArray( 114 colorBuffer.size(), &colorBuffer[0], colorFormat)); 115 } 116 117 // データの表示処理 118 void draw() 119 { 120 drawColorFrame(); 121 } 122 123 // カラーデータの表示処理 124 void drawColorFrame() 125 { 126#if 0 127 // カラーデータを表示する 128 cv::Mat colorImage(colorHeight, colorWidth, CV_8UC4, &colorBuffer[0]); 129 cv::imshow("Color Image", colorImage); 130#else 131 cv::Mat colorImage(colorHeight, colorWidth, CV_8UC4, &colorBuffer[0]); 132 cv::Mat harfImage; 133 cv::resize(colorImage, harfImage, cv::Size(), 0.5, 0.5); 134 cv::imshow("Harf Image", harfImage); 135#endif 136 } 137}; 138 139void main() 140{ 141 try { 142 KinectApp app; 143 app.initialize(); 144 app.run(); 145 } 146 catch (std::exception& ex) { 147 std::cout << ex.what() << std::endl; 148 } 149};

試したこと

パッケージに問題があると思いopencvをNuGetのパッケージの2.4.11をopencvの公式サイトから最新の3.4.1に変えたり、x84からx64に変えて
試してみたのですが、exeファイルが作成されず決まって上記のようなエラーメッセージが出てしまいます。

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

Visual Studio 2017 ,opencv3.4.1 , kinect V2 for Windows , kinect SDK v2.0_1409

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Visual Studio(以下VSと略す) の警告です。
回避方法は
①#pragma warning(disable:4996)
もしくは
②#define _CRT_SECURE_NO_WARNINGS
を#include <stdio.h>の前に書く。
それかVSのプロジェクトのメニューで
①「プロジェクト」→「(プロジェクト名)のプロパティ」
②構成の部分を「全ての構成」にして
③「構成プロパティ」→「C/C++」→「詳細」→「指定の警告を無効にする」で"4669”を指定。

投稿2018/07/03 12:22

MasahikoHirata

総合スコア3747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

noa_remiria

2018/07/04 03:10

ありがとうございました。4669のエラーメッセージが表示され無くなりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問