opencv3.4.1和vs2017配置

本文详细介绍如何在Windows环境下从官网下载并安装OpenCV,包括配置环境变量、Visual Studio 2017环境下的详细配置步骤及测试示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官网下载opencv,双击之后会将文件提取出来,提取出来的文件放在一个合适的位置(选个好地方,不要乱改,环境的配置依赖于这个目录),我放在了D:\program下

配置环境变量:

右键此电脑-->属性-->高级系统配置-->环境变量-->系统变量-->path 中添加D:\program\opencv\build\x64\vc14\bin

我之前配的是D:\program\opencv\build\bin,结果会找不到库文件

配置vs2017:

打开visual studio 2017新建项目,opencv好像只有x64模式(只有x64文件夹),所以要把debug模式设置为x64

打开视图-->属性管理器,右键图中的条目,打开属性


在 VC++目录 下的 包含目录 中添加如下目录(依赖于你把文件放在哪了),这是系统寻找头文件的路径


在 链接器 -> 常规 -> 附加库目录 中加入以下值:这时系统寻找库文件的路径


在 链接器 -> 输入-> 附加依赖项 中加入以下值:这是要用到的库文件名(在上面那个库文件路径下)

这里需要注意的是,这个库文件名是和opencv的版本相关联的,最好到你的文件路径下看看是什么名字


测试执行:

#include "stdafx.h"
#include<iostream>  
#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp>  
using namespace cv;
int main(){
	Mat img = imread("pic.jpg");// 读入一张图片(游戏原画)  
	namedWindow("游戏原画");// 创建一个名为 "游戏原画"窗口  
	imshow("游戏原画", img);// 在窗口中显示游戏原画  
	waitKey(6000);// 等待6000 ms后窗口自动关闭  
}

这时那张图片,注意保存的名字


参考链接:

https://blog.youkuaiyun.com/sinat_36264666/article/details/73135823?ref=myread

<think>好的,我需要帮助用户找到使用OpenCV 3.4.1Visual Studio 2017Kinect 2.0实现人体实时三维坐标检测的C++代码。首先,我得了解这些工具如何协同工作。 Kinect 2.0本身有SDK,可以获取深度数据骨骼跟踪信息。用户可能需要通过Kinect SDK来访问这些数据。然后,OpenCV用来处理图像,比如将Kinect捕获的彩色或深度图像进行显示或进一步处理。Visual Studio 2017是开发环境,需要配置项目设置,包含KinectOpenCV的库。 接下来,我需要确定步骤。首先安装Kinect SDK 2.0配置OpenCV 3.4.1VS2017中的环境。然后,编写代码初始化Kinect,读取深度帧骨骼数据,用OpenCV显示图像,并计算三维坐标。 可能需要注意的地方包括正确链接Kinect的库文件,处理骨骼跟踪的数据结构,以及将深度数据转换为三维坐标的公式。Kinect的深度数据到三维坐标的转换可能需要使用相机参数,比如焦距中心点,这些可能需要从Kinect SDK获取。 用户可能需要示例代码的结构,比如如何初始化IKinectSensor,打开读取深度帧体帧,处理帧数据,使用OpenCV的Mat来存储显示图像,以及从骨骼关节获取位置数据并转换为三维坐标。 此外,还需要考虑实时性能,确保循环中高效处理数据,避免内存泄漏。可能还需要处理坐标转换的细节,比如Kinect的坐标系到世界坐标系的转换,或者如何将关节点的位置从相机空间转换到实际的三维空间。 最后,生成相关问题,帮助用户进一步理解或解决可能遇到的问题,比如性能优化、坐标转换细节或错误处理。</think>### 使用OpenCV 3.4.1VS2017与Kinect 2.0实现人体三维坐标检测 #### 1. 环境配置 1. **安装Kinect SDK 2.0** 下载并安装[Kinect for Windows SDK 2.0](https://learn.microsoft.com/zh-cn/previous-versions/windows/kinect/dn799271(v=ieb.10))[^1],确保Kinect 2.0已连接并识别。 2. **配置OpenCV 3.4.1** 在Visual Studio 2017配置OpenCV的包含路径库文件,例如: - 包含目录:`D:\opencv\build\include` - 库目录:`D:\opencv\build\x64\vc15\lib` - 链接库:`opencv_world341d.lib`(Debug模式) #### 2. 代码实现 ```cpp #include <Kinect.h> #include <opencv2/opencv.hpp> #include <iostream> // Kinect相关变量 IKinectSensor* pSensor = nullptr; IDepthFrameReader* pDepthReader = nullptr; IBodyFrameReader* pBodyReader = nullptr; // 初始化Kinect HRESULT initKinect() { if (FAILED(GetDefaultKinectSensor(&pSensor)) || !pSensor) return E_FAIL; if (FAILED(pSensor->Open())) return E_FAIL; // 打开深度帧源 IDepthFrameSource* pDepthSource = nullptr; pSensor->get_DepthFrameSource(&pDepthSource); pDepthSource->OpenReader(&pDepthReader); SafeRelease(pDepthSource); // 打开人体帧源 IBodyFrameSource* pBodySource = nullptr; pSensor->get_BodyFrameSource(&pBodySource); pBodySource->OpenReader(&pBodyReader); SafeRelease(pBodySource); return S_OK; } // 获取深度数据并转换为OpenCV Mat cv::Mat getDepthFrame() { IDepthFrame* pDepthFrame = nullptr; if (SUCCEEDED(pDepthReader->AcquireLatestFrame(&pDepthFrame))) { UINT16* pBuffer = nullptr; UINT nBufferSize = 0; pDepthFrame->AccessUnderlyingBuffer(&nBufferSize, &pBuffer); int width = 512, height = 424; // Kinect深度图分辨率 cv::Mat depthMat(height, width, CV_16UC1, pBuffer); return depthMat.clone(); } return cv::Mat(); } // 获取人体骨骼三维坐标 void getBodyCoordinates() { IBodyFrame* pBodyFrame = nullptr; if (SUCCEEDED(pBodyReader->AcquireLatestFrame(&pBodyFrame))) { IBody* ppBodies[BODY_COUNT] = {0}; pBodyFrame->GetAndRefreshBodyData(_countof(ppBodies), ppBodies); for (auto pBody : ppBodies) { BOOLEAN bTracked = false; pBody->get_IsTracked(&bTracked); if (bTracked) { Joint joints[JointType_Count]; pBody->GetJoints(_countof(joints), joints); // 获取脊柱关节的三维坐标(单位:米) CameraSpacePoint spine = joints[JointType_SpineMid].Position; std::cout << "三维坐标 (x,y,z): " << spine.X << ", " << spine.Y << ", " << spine.Z << std::endl; } } SafeRelease(pBodyFrame); } } int main() { if (FAILED(initKinect())) { std::cerr << "Kinect初始化失败" << std::endl; return -1; } cv::namedWindow("Depth"); while (true) { cv::Mat depthMat = getDepthFrame(); if (!depthMat.empty()) { // 转换为8UC1并显示 cv::Mat displayMat; depthMat.convertTo(displayMat, CV_8UC1, 255.0 / 8000); cv::imshow("Depth", displayMat); } getBodyCoordinates(); // 实时输出三维坐标 if (cv::waitKey(30) == 27) break; } SafeRelease(pDepthReader); SafeRelease(pBodyReader); SafeRelease(pSensor); return 0; } ``` #### 3. 关键点说明 1. **深度数据转换** Kinect深度图分辨率为$512 \times 424$,每个像素值为毫米级距离。通过`convertTo`将数据映射到$[0,255]$范围以便显示。 2. **三维坐标获取** `CameraSpacePoint`直接提供关节点的三维坐标(单位:米),例如`JointType_SpineMid`表示脊柱中部位置。 3. **实时性优化** 使用`AcquireLatestFrame`确保获取最新帧,避免帧堆积。 #### 4. 常见问题 - **Kinect SDK兼容性**:需使用VS2017的C++11以上标准编译[^2]。 - **OpenCV显示延迟**:若深度图显示卡顿,可减少图像缩放或改用多线程处理。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值