kinect深度图转换为 HSI图和灰度图 代码
来源:互联网 发布:深圳程序员工资一般多少 编辑:程序博客网 时间:2024/05/18 00:36
// 编程中最没用的东西是源代码,最有用的东西是算法和数据结构#include "opencv2/core.hpp"#include "opencv2/imgproc.hpp"#include "opencv2/highgui.hpp"#include "MMAPFile.h"#include "CLog.h"#include "CLogManager.h"#include "io.h"#include "direct.h"#include "math.h"using namespace std;using namespace cv;#define KINECT_DEPTH_WIDTH 512#define KINECT_DEPTH_HEIGHT 424#define KINECT_COLOR_WIDTH 1920#define KINECT_COLOR_HEIGHT 1080#define KINECT_COLOR_720P_WIDTH 1280#define KINECT_COLOR_720P_HEIGHT 720#define KINECT_COLOR_1080P_WIDTH 1920#define KINECT_COLOR_1080P_HEIGHT 1080#define KINECT_BUFFER_SZIE 30LogManager* g_logmanager;CLog* g_log;typedef struct{ uchar R; uchar G; uchar B;}RgbType;typedef struct{ float H; float I; float S;}HsiType;const double PI = 3.1415926535897932;void log_init(){ if (_access("log", 0) == -1) { _mkdir("log"); } SYSTEMTIME systemTime; GetLocalTime(&systemTime); char LogFileString[100] = { 0 }; sprintf_s(LogFileString, "log\\DepthAlg_%02d_%02d_%02d_%02d_%02d.txt", systemTime.wMonth, systemTime.wDay, systemTime.wHour, systemTime.wMinute, systemTime.wSecond); g_logmanager->Clear(); g_log = g_logmanager->OpenLog(LogFileString); g_log->SetLogLevel(CLog::LL_INFORMATION); g_log->ClearLogFile();}void convertHSItoRGB(HsiType* hsi, RgbType* rgb){ double Doublepi = 2 * 3.1415926535897932; float B = 0.0f; float R = 0.0f; float G = 0.0f; if ((hsi->H >= 0.0f) && (hsi->H < Doublepi / 3)) { B = hsi->I*(1.0f - hsi->S); R = hsi->I*(1.0f + hsi->S*cos(hsi->H) / cos(Doublepi / 6 - hsi->H)); G = 3 * hsi->I - (R + B); } else if ((hsi->H >= Doublepi / 3) && (hsi->H < 2*Doublepi / 3)) { hsi->H = hsi->H - Doublepi / 3; R = hsi->I*(1.0f - hsi->S); G = hsi->I*(1.0f + hsi->S*cos(hsi->H) / cos(Doublepi / 6 - hsi->H)); B = 3 * hsi->I - (R + B); } else if ((hsi->H >= 2 * Doublepi / 3) && (hsi->H < Doublepi)) { hsi->H = hsi->H - 2 * Doublepi / 3; G = hsi->I*(1.0f - hsi->S); B = hsi->I*(1.0f + hsi->S*cos(hsi->H) / cos(Doublepi / 6 - hsi->H)); R = 3 * hsi->I - (R + B); } rgb->B = (uchar)(255.0f * B); rgb->R = (uchar)(255.0f * R); rgb->G = (uchar)(255.0f * G); return;}int main(){ log_init(); char str[100] = "meshfile_04_11_16_35_55_086.bin"; string filename(str); CMMAPFile* pCMMAPFile = new CMMAPFile(); unsigned long size_low = 0; unsigned long size_high = 0; size_low = pCMMAPFile->MMAP_GetFileSize(filename, &size_high); ushort* pDepth = (ushort*)pCMMAPFile->MMAP_CreateFile(filename, CMMAPFILE_OPEN_EXISTING, 0, size_low, size_high); Mat DepthImage(KINECT_DEPTH_HEIGHT, KINECT_DEPTH_WIDTH, CV_8UC3); Mat GaryImage(KINECT_DEPTH_HEIGHT, KINECT_DEPTH_WIDTH, CV_8UC3); uchar* ptr = (uchar*)DepthImage.data; uchar* garyptr = (uchar*)GaryImage.data; RgbType rgb; HsiType hsiColor; ushort depth; for (int i = 0; i < KINECT_DEPTH_HEIGHT; i++) { for (int j = 0; j < KINECT_DEPTH_WIDTH; j++) { //g_log->WriteLog(CLog::LL_INFORMATION, "pDepth[%d %d] %d", i, j, pDepth[i*KINECT_DEPTH_WIDTH + j]); depth = pDepth[i*KINECT_DEPTH_WIDTH + j]; if (depth > 10000) { depth = 10000; } if (depth < 1) { depth = 1; } hsiColor.H = 2 * PI * (float)(depth-1) / 9999; hsiColor.I = 1.0f; hsiColor.S = 1.0f; convertHSItoRGB(&hsiColor, &rgb); ptr[0] = rgb.B; ptr[1] = rgb.G; ptr[2] = rgb.R; ptr += 3; garyptr[0] = 255 * (depth - 1) / 9999; garyptr[1] = 255 * (depth - 1) / 9999; garyptr[2] = 255 * (depth - 1) / 9999; garyptr += 3; } } pCMMAPFile->MMAP_Release(); imshow("pic", DepthImage); imshow("pic2", GaryImage); waitKey(0); return 0;}
0 0
- kinect深度图转换为 HSI图和灰度图 代码
- 深度图像转换为灰度图
- [小代码]转换彩色图为灰度图
- 彩色图片转换为灰度图(方法)
- 将一幅图像转换为灰度图
- RGB图片转换为灰度图批处理
- Kinect深度图和彩图校准生成点云代码技术点总结
- 灰度图转换
- 灰度图转换 obj
- tiff灰度图转换bmp灰度图
- ros显示kinect v1彩色图和深度图问题
- Hello Android - Bitmap转换为黑白的灰度图和加圆角效果
- 关于Kinect深度图和彩色图像提取
- Kinect采集彩图和深度图并通过Socket传输
- 如何将真彩色图转换为各种灰度图
- 如何将真彩色图转换为各种灰度图
- C#源代码 彩色图转换为灰度图
- Android-将RGB彩色图转换为灰度图
- 美团 棋子翻转
- R语言︱list用法、批量读取、写出数据时的用法
- chorme浏览器最新版本跨域设置
- 设计模式六大原则(3):依赖倒置原则
- sharepoint 轻量化开发之自定义列表!
- kinect深度图转换为 HSI图和灰度图 代码
- 怎样在几何画板中查看课件制作过程
- nginx+tomcat+windows实现负载均衡
- 大学生安卓APP毕业设计开发
- 程序运行时间(15)
- 知乎 数据库 API
- 关于intent.getParcelableArrayListExtra()报NullPointerException总结
- 微信公众账号怎么注册
- SQLite VACUUM命令分析