打印图像的方法
#include "env.h" #include "helper_cuda.h" #include <device_functions.h> #include "combo_device_tools.h"
typedef enum COMBO_DT_TYPE{
COMBO_DT_8C,
COMBO_DT_8U,
COMBO_DT_16S,
COMBO_DT_16U,
COMBO_DT_32S,
COMBO_DT_32U,
COMBO_DT_32F,
COMBO_DT_64F
}COMBO_DT_TYPE;
template<class T> static __device__ void print_data_device_t(uint8_t *data, int w, int h, int stride,int x, int y, int roi_w, int roi_h,int high_accuracy) { T* dataptr = (T*)data; for (int j = 0; j != roi_h; ++j) { for (int i = 0; i != roi_w; ++i) { int of = i+x + (j+y)*stride; if (high_accuracy) { printf("%.7f ", (float)dataptr[of]); } else { printf("%.2f ", (float)dataptr[of]); } } printf("\n"); } printf("\n"); } template<class T> static void print_data_host_t(uint8_t *data, int w, int h, int stride, int x, int y, int roi_w, int roi_h, int high_accuracy) { T* dataptr = (T*)data; for (int j = 0; j != roi_h; ++j) { for (int i = 0; i != roi_w; ++i) { int of = i + x + (j + y)*stride; if (high_accuracy) { printf("%.7f ", (float)(dataptr[of])); } else { printf("%.2f ", (float)(dataptr[of])); } } printf("\n"); } printf("\n"); } __global__ static void print_data_device(uint8_t *data, int w, int h, int stride,int x, int y, int roi_w, int roi_h,int high_accuracy, COMBO_DT_TYPE type) { void(*func)(uint8_t *data, int w, int h, int stride,int x, int y, int roi_w, int roi_h,int high_accuracy ); switch( type ){ case COMBO_DT_8C: func = print_data_device_t<int8_t>;break; case COMBO_DT_8U: func = print_data_device_t<uint8_t>;break; case COMBO_DT_16S: func = print_data_device_t<int16_t>;break; case COMBO_DT_16U: func = print_data_device_t<uint16_t>;break; case COMBO_DT_32S: func = print_data_device_t<int32_t>;break; case COMBO_DT_32U: func = print_data_device_t<uint32_t>;break; case COMBO_DT_32F: func = print_data_device_t<float>;break; case COMBO_DT_64F: func = print_data_device_t<double>;break; default: func = print_data_device_t<int8_t>;break; } func(data, w, h, stride, x, y, roi_w, roi_h, high_accuracy); } BEGIN_EXTERNAL_C void print_data_device(uint8_t *data,int w, int h, int stride, const char * str, int x, int y, int roi_w, int roi_h, int high_accuracy, COMBO_DT_TYPE type) { cudaThreadSynchronize(); if (!data) return; printf("%s :%p\n", str, data); print_data_device << <1, 1 >> >(data, w, h, stride, x, y, roi_w, roi_h, high_accuracy, type); cudaThreadSynchronize(); } void print_data_host(uint8_t *data, int w, int h, int stride, const char * str, int x, int y, int roi_w, int roi_h, int high_accuracy, COMBO_DT_TYPE type) { if (!data) return; printf("%s :%p\n", str, data); void(*func)(uint8_t *data, int w, int h, int stride, int x, int y, int roi_w, int roi_h, int high_accuracy); switch( type ){ case COMBO_DT_8C: func = print_data_host_t<int8_t>;break; case COMBO_DT_8U: func = print_data_host_t<uint8_t>;break; case COMBO_DT_16S: func = print_data_host_t<int16_t>;break; case COMBO_DT_16U: func = print_data_host_t<uint16_t>;break; case COMBO_DT_32S: func = print_data_host_t<int32_t>;break; case COMBO_DT_32U: func = print_data_host_t<uint32_t>;break; case COMBO_DT_32F: func = print_data_host_t<float>;break; case COMBO_DT_64F: func = print_data_host_t<double>;break; default: func = print_data_host_t<int8_t>;break; } func(data, w, h, stride, x, y, roi_w, roi_h, high_accuracy); } void print_mat_device(const float * data, int w, int h, int stride, const char * str, int x, int y, int roi_w, int roi_h, int high_accuracy) { print_data_device((uint8_t*)data, w, h, stride, str, x, y, roi_w, roi_h, high_accuracy, COMBO_DT_32F); } END_EXTERNAL_C
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】