保存原始rgb8bit 数据到bmp文件

2023-11-18

就填充方式来说,跟24位位图基本是一样的,不同的是bitcolor 位设置的颜色位数要填充为8,而不是24.

百度了很久,目前只能是勉强能保存成图片,能正常打开,但目前还有未能理解的问题,列举如下,如果有知道的朋友,希望能得到您的慷慨解惑,感激不尽!

1、8bit 的bmp图如何控制颜色的显示,我尝试过对每个字节进行0或255的颜色替换,以期待生成黑白图,但实际替换颜色后的图片全是黑色的一片,根本看不到具体内容

2、猜想问题1,是不是需要在bmp文件头中加入调色板,以支持颜色的显示?如果需要的话,这个调色板信息该怎么加,我在百度上找了好久都没找到。

3、8bit 的rgb 数据要怎么才能转换成 24bit的BMP图呢,简单的颜色扩充吗?

图片文件

原始封装函数如下

int simplest_bgr8_to_bmp(uint8_t*pSrcBuffer, int32_t iBufferLen, int32_t width, int32_t height, uint8_t * pDestBuffer, int32_t* OutPutLength)
{
//结构体1字节对齐
#pragma pack(push)
#pragma pack(1)
	typedef struct
	{
		int32_t imageSize;
		int32_t blank;
		int32_t startPosition;
	}BmpHead;

	typedef struct
	{
		int32_t  Length;
		int32_t  width;
		int32_t  height;
		uint16_t  colorPlane;
		uint16_t  bitColor;
		int32_t  zipFormat;
		int32_t  realSize;
		int32_t  xPels;
		int32_t  yPels;
		int32_t  colorUse;
		int32_t  colorImportant;
	}InfoHead;
#pragma pack(pop)


	//int i = 0, j = 0;
	BmpHead m_BMPHeader = { 0, 0, 0 };

	InfoHead  m_BMPInfoHeader = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
	char bfType[2] = { 'B', 'M' };
	int header_size = sizeof(bfType) + sizeof(BmpHead) + sizeof(InfoHead);
	unsigned char *rgb24_buffer = pSrcBuffer;
	unsigned char *pDest = pDestBuffer;

	m_BMPHeader.imageSize = 1 * width*height + header_size;
	m_BMPHeader.startPosition = header_size;

	m_BMPInfoHeader.Length = sizeof(InfoHead);
	m_BMPInfoHeader.width = (width+3)/4 *4;    //这里不确定是否要给4字节对齐后的长度,但放进去似乎也没啥影响,希望后面有朋友看到后,能帮忙解惑

    //图像分辩率这块不知道怎么填,不知道是不是填图像宽高,但不填似乎也能正常打开图片

	//BMP storage pixel data in opposite direction of Y-axis (from bottom to top).
	m_BMPInfoHeader.height = -height;
	m_BMPInfoHeader.colorPlane = 1;
	m_BMPInfoHeader.bitColor = 1*8;
	m_BMPInfoHeader.realSize = 1 * width*height;

	memcpy(pDest, bfType, sizeof(bfType));
	pDest += sizeof(bfType);
	memcpy(pDest, &m_BMPHeader, sizeof(m_BMPHeader));
	pDest += sizeof(m_BMPHeader);
	memcpy(pDest, &m_BMPInfoHeader, sizeof(m_BMPInfoHeader));
	pDest += sizeof(m_BMPInfoHeader);

	*OutPutLength = 1 * width*height + sizeof(bfType) + sizeof(m_BMPHeader) + sizeof(m_BMPInfoHeader);

	//memcpy(pDest, rgb24_buffer, iBufferLen); 

/*注意,这里不能直接复制数据,因为有对齐要求(每行宽度要进行4字节对齐),只能一行一行来填充,
* 否则图像会扭曲。
*/

	int iLength = 0;
	int iOffSet = 0;
	for (int j = 0; j < height; j++)
	{
		memcpy(pDest + iLength, rgb24_buffer + iOffSet, width);
		iLength += m_BMPInfoHeader.width;
		iOffSet += width;
	}

	return 0;
}

接上面,增加了颜色表后,图片显示正常了,看来果然是颜色表的问题,附修改后的代码

int simplest_bgr8_to_bmp(uint8_t*pSrcBuffer, int32_t iBufferLen, int32_t width, int32_t height, uint8_t * pDestBuffer, int32_t* OutPutLength)
{
#pragma pack(push)
#pragma pack(1)
	typedef struct
	{
		int32_t imageSize;
		int32_t blank;
		int32_t startPosition;
	}BmpHead;

	typedef struct
	{
		int32_t  Length;
		int32_t  width;
		int32_t  height;
		uint16_t  colorPlane;
		uint16_t  bitColor;
		int32_t  zipFormat;
		int32_t  realSize;
		int32_t  xPels;
		int32_t  yPels;
		int32_t  colorUse;
		int32_t  colorImportant;
	}InfoHead;
#pragma pack(pop)

	const int icolor_table_size = 4 * 256;
	unsigned char * color_table = new unsigned char[icolor_table_size];

	unsigned char red[256] = { 0, 128, 0, 128, 0, 128, 0, 192, 192, 166, 64, 96, 128, 160, 192, 224, 0, 32, 64, 96,
		128, 160, 192, 224, 0, 32, 64, 96, 128, 160, 192, 224, 0, 32, 64, 96, 128, 160, 192, 224, 0, 32,
		64, 96, 128, 160, 192, 224, 0, 32, 64, 96, 128, 160, 192, 224, 0, 32, 64, 96, 128, 160, 192, 224,
		0, 32, 64, 96, 128, 160, 192, 224, 0, 32, 64, 96, 128, 160, 192, 224, 0, 32, 64, 96, 128, 160, 192,
		224, 0, 32, 64, 96, 128, 160, 192, 224, 0, 32, 64, 96, 128, 160, 192, 224, 0, 32, 64, 96, 128, 160,
		192, 224, 0, 32, 64, 96, 128, 160, 192, 224, 0, 32, 64, 96, 128, 160, 192, 224, 0, 32, 64, 96, 128,
		160, 192, 224, 0, 32, 64, 96, 128, 160, 192, 224, 0, 32, 64, 96, 128, 160, 192, 224, 0, 32, 64, 96,
		128, 160, 192, 224, 0, 32, 64, 96, 128, 160, 192, 224, 0, 32, 64, 96, 128, 160, 192, 224, 0, 32, 64,
		96, 128, 160, 192, 224, 0, 32, 64, 96, 128, 160, 192, 224, 0, 32, 64, 96, 128, 160, 192, 224, 0, 32,
		64, 96, 128, 160, 192, 224, 0, 32, 64, 96, 128, 160, 192, 224, 0, 32, 64, 96, 128, 160, 192, 224, 0,
		32, 64, 96, 128, 160, 192, 224, 0, 32, 64, 96, 128, 160, 192, 224, 0, 32, 64, 96, 128, 160, 255, 160,
		128, 255, 0, 255, 0, 255, 0, 255 };

	unsigned char green[256] = { 0, 0, 128, 128, 0, 0, 128, 192, 220, 202, 32, 32, 32, 32, 32, 32, 64, 64, 64, 64, 64,
		64, 64, 64, 96, 96, 96, 96, 96, 96, 96, 96, 128, 128, 128, 128, 128, 128, 128, 128, 160, 160, 160, 160,
		160, 160, 160, 160, 192, 192, 192, 192, 192, 192, 192, 192, 224, 224, 224, 224, 224, 224, 224, 224, 0,
		0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32, 64, 64, 64, 64, 64, 64, 64, 64, 96, 96, 96, 96, 96,
		96, 96, 96, 128, 128, 128, 128, 128, 128, 128, 128, 160, 160, 160, 160, 160, 160, 160, 160, 192, 192, 192,
		192, 192, 192, 192, 192, 224, 224, 224, 224, 224, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32,
		32, 32, 32, 32, 64, 64, 64, 64, 64, 64, 64, 64, 96, 96, 96, 96, 96, 96, 96, 96, 128, 128, 128, 128, 128,
		128, 128, 128, 160, 160, 160, 160, 160, 160, 160, 160, 192, 192, 192, 192, 192, 192, 192, 192, 224, 224,
		224, 224, 224, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32, 64, 64, 64, 64, 64,
		64, 64, 64, 96, 96, 96, 96, 96, 96, 96, 96, 128, 128, 128, 128, 128, 128, 128, 128, 160, 160, 160, 160,
		160, 160, 160, 160, 192, 192, 192, 192, 192, 192, 251, 160, 128, 0, 255, 255, 0, 0, 255, 255 };

	unsigned char blue[256] = { 0, 0, 0, 0, 128, 128, 128, 192, 192, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
		64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
		64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
		128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
		128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
		128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 192, 192, 192, 192, 192, 192, 192, 192, 192,
		192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
		192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
		192, 192, 192, 240, 164, 128, 0, 0, 0, 255, 255, 255, 255 };

	for (int i = 0; i < 256; i++)
	{
		color_table[0 + 4 * i] = red[i];
		color_table[1 + 4 * i] = green[i];
		color_table[2 + 4 * i] = blue[i];
		color_table[3 + 4 * i] = (unsigned char)(0x00);
	}

    //灰度图颜色表
	//for (int i = 0; i < 256; i++)
	//{
	//	color_table[0 + 4 * i] = (unsigned char)i;
	//	color_table[1 + 4 * i] = (unsigned char)i;
	//	color_table[2 + 4 * i] = (unsigned char)i;
	//	color_table[3 + 4 * i] = (unsigned char)(0xff);
	//}

	BmpHead m_BMPHeader = { 0, 0, 0 };

	InfoHead  m_BMPInfoHeader = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
	char bfType[2] = { 'B', 'M' };
	int header_size = sizeof(bfType) + sizeof(BmpHead) + sizeof(InfoHead) + icolor_table_size;
	unsigned char *rgb24_buffer = pSrcBuffer;
	unsigned char *pDest = pDestBuffer;

	m_BMPHeader.imageSize = 1 * width*height + header_size;
	m_BMPHeader.startPosition = header_size;

	m_BMPInfoHeader.Length = sizeof(InfoHead);
	m_BMPInfoHeader.width = (width+3)/4 *4;
	//BMP storage pixel data in opposite direction of Y-axis (from bottom to top).
	m_BMPInfoHeader.height = -height;
	m_BMPInfoHeader.colorPlane = 1;
	m_BMPInfoHeader.bitColor = 1*8;
	m_BMPInfoHeader.realSize = 1 * width*height;

	memcpy(pDest, bfType, sizeof(bfType));
	pDest += sizeof(bfType);
	memcpy(pDest, &m_BMPHeader, sizeof(m_BMPHeader));
	pDest += sizeof(m_BMPHeader);
	memcpy(pDest, &m_BMPInfoHeader, sizeof(m_BMPInfoHeader));
	pDest += sizeof(m_BMPInfoHeader);

	memcpy(pDest, color_table, icolor_table_size);
	pDest += icolor_table_size;

	*OutPutLength = 1 * width*height + sizeof(bfType) + sizeof(m_BMPHeader) + sizeof(m_BMPInfoHeader) + icolor_table_size;

	int iLength = 0;
	int iOffSet = 0;
	for (int j = 0; j < height; j++)
	{
		memcpy(pDest + iLength, rgb24_buffer + iOffSet, width);
		iLength += m_BMPInfoHeader.width;
		iOffSet += width;
	}

	delete[] color_table;
	color_table = NULL;

	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

保存原始rgb8bit 数据到bmp文件 的相关文章

  • 图像的二值化分割,otsu类间方差法

    二值化图像指图像中的每个像素只取两个离散的值之一 用数学公式表示为 公式中 f x y 表示一幅数字图像 X Y表示该图像中某像素的坐标值 T为 二值化的阈值 表示经过阈值运算后的二值化图像 这里0和1仅仅是一个抽象表示 并非实际像素值 它
  • MATLAB小技巧(33)arima时间序列

    MATLAB小技巧 33 arima时间序列 前言 一 MATLAB仿真 二 仿真结果 三 小结 前言 MATLAB进行图像处理相关的学习是非常友好的 可以从零开始 对基础的图像处理都已经有了封装好的许多可直接调用的函数 这个系列文章的话主
  • Conditional Prompt Learning for Vision-Language Models

    本文是对CoOp方法提出的改进 CoOp由论文Learning to Prompt for Vision Language Models提出 CoOp针对CLIP模型做了改进 将人工设计的提示修改为了可学习的参数 具体来说就是 CoOp不再
  • 使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓

    使用Python绘制粽子消消乐 素描图 优化版 正常 漫画 写实风格 词云图 字符画图及提取轮廓 1 效果图 2 源码 2 1 素描图源码 2 2 优化版 制作不同风格的素描图 正常 漫画 写实风格 https blog csdn net
  • python批量处理

    python opencv图像二值化批量处理 from skimage import data dir io transform color filters import numpy as np import cv2 def convert
  • 图像处理_Ostu算法(大律法、最大类间方差法)

    一 算法简述 Otsu算法是一种用于二值化最佳阈值的选取方法 基本原理是根据阈值T将图像中的像素点分为C1和C2两类 不断的调整阈值T之后若此时两类之间存在最大的类间方差 那么此阈值即是最佳阈值 二 算法理论 1 基础公式 1 2 3
  • (图像变换)Python-opencv,(批处理笛卡尔坐标系,也就是平时咱们看到的正常图片)二维彩色图像转化为极坐标系下的图像

    这个其实代码量不大 但对于我这个啥也编不出来的废柴来说我觉得真的好不容易 历经两天的痛苦折磨 终于完成了 下面进入正题 昨天我找了一天代码 然后挑挑拣拣也就找到一篇还是c 的图像极坐标化处理 代码如下 include
  • 保姆级使用PyTorch训练与评估自己的ConvNeXt网络教程

    文章目录 前言 0 环境搭建 快速开始 1 数据集制作 1 1 标签文件制作 1 2 数据集划分 1 3 数据集信息文件制作 2 修改参数文件 3 训练 4 评估 5 其他教程 前言 项目地址 https github com Fafa D
  • 深度特征融合---高低层(多尺度)特征融合

    目录 概述 基本概念 典型方法概述 相关工作 多尺度模型设计 Deep Feature Fusion for VHR 高分辨率图像 Remote Sensing Scene Classification DCA特征融合方法 基于神经网络的目
  • PR-RL:Portrait Relighting via Deep Reinforcement Learning

    文章目录 Title PR RL Portrait Relighting via Deep Reinforcement Learning 1 Article 1 1 Abstract and Introduction 1 2 Conclus
  • 无监督低照度图像增强网络ZeroDCE和SCI介绍

    目录 简介 Zero DCE 算法介绍 模型代码 无监督loss介绍 小结 Self Calibrated Illumination SCI 模型介绍 无监督loss介绍 小结 总结 简介 当前有较多深度学习的方法来做图像效果增强 但多数都
  • pil_openvcv_scikit-image_tensorflow四种读图方式对比

    文章目录 1 四种不同的库读取jpg图显示 2 评估所读图片的差异 3 简单说明有差异原因 4 同样的流程对png图片进行处理 5 png图片转jpg 5 1 使用PIL进行转换 5 2 使用Opencv进行转换 5 3 使用Tensorf
  • 基于TensorFlow2实现的宠物识别系统(爬虫、模型训练和调优、模型部署)

    目录 开发环境 0 项目准备 1 数据集准备 2 数据预处理 3 构建模型 4 模型训练及验证 5 模型部署 6 项目地址 开发环境 作者 嘟粥yyds 时间 2023年8月25日 集成开发工具 PyCharm Professional 2
  • Halcon直线检测

    1 Halcon最常用的直线检测算子 add metrology object line measure 利用Halcon封装好的模型不仅可以检测直线 还可以检测圆 椭圆 矩形等 下面介绍下其余的直线检测的算子 需要配合 skeleton
  • 图像处理——我理解的傅里叶变换

    1 傅里叶变换的理解 傅里叶变换的相关数学公式目前还没有搞懂 先不整那个东西 我们主要是研究傅里叶变换的一些思想和应用 这个思想起源于牛顿研究那个三棱镜 白光透过棱镜之后会被分解为七种颜色的光 这些光叠加又能形成白光 所以说可以把一种事物分
  • 图像特征提取技术

    目 录 前 言 基于颜色的特征提取 1 颜色空间 2 直方图以及特征提取 基于纹理的特征提取 1 灰度共生矩阵 2 tamura纹理 基于深度神经网络的图像处理 前 言 图像特征提取属于图像分析的范畴 是数字图像处理的高级阶段 本文将从理论
  • Python图像处理:批量添加水印的优雅实现与进阶技巧

    1 简介 在日常图像处理中 为图片添加水印是一项常见任务 有多种方法和工具可供选择 而今天我们将专注于使用Python语言结合PIL库批量添加水印 需要注意的是 所选用的图片格式不应为JPG或JPEG 因为这两种格式的图片不支持透明度设置
  • ETC纹理压缩

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门
  • 【图像配准】

    非配对配准 Non rigid registration 和配对配准 Rigid registration 是医学图像配准中常用的两种方法 它们有着不同的含义和应用 非配对配准 Non rigid registration 非配对配准是指将
  • Matlab图像处理系列——图像复原之噪声模型仿真

    微信公众号上线 搜索公众号 小灰灰的FPGA 关注可获取相关源码 定期更新有关FPGA的项目以及开源项目源码 包括但不限于各类检测芯片驱动 低速接口驱动 高速接口驱动 数据信号处理 图像处理以及AXI总线等 本节目录 一 图像复原的模型 二

随机推荐

  • AVFoundation 框架小结

    AVFoundation 小结 概述 AVFoundation 是 Objective C 中创建及编辑视听媒体文件的几个框架之一 其提供了检查 创建 编辑或重新编码媒体文件的接口 也使得从设备获取的视频实时数据可操纵 但是 通常情况 简单
  • 在js中修改html、body的样式

    一 原始定义 先在css中定义 body html 宽高为300px body html width 300px height 300px 二 js操作 以修改宽度为例 获取body html节点style 主要是这里html 一开始不清楚
  • Esp8266(NodeMcu)接入新大陆物联网平台并且上传温湿度

    Esp8266 NodeMcu 接入新大陆物联网 1 平台注册和产品创建 2 代码协议部分 2 1 连接请求协议 2 2 数据上报部分协议 3 完整代码部分 3 1 效果图 使用Esp8266接入新大陆物联网平台 这几天找了一下物联网平台
  • R 四姑娘山每日客流量爬虫 时间序列建模 ARIMA 指数平滑 TBATS拟合与预测

    一 数据来源 数据来自四姑娘山景区首页新闻的每日客流量发布处 利用python爬虫读取2015年9月29号到2020年6月8日的每日客流量和对应的日期 import urllib request from bs4 import Beauti
  • 前端 图片下载

    图片下载是项目开发过程中经常提到的需求点 本文对以往用过 见过的图片下载方法进行一个汇总 如果后面有遇到 会继续进行补充 一 如果后台直接给的图片下载地址 URL 如后台给的图片下载地址为 http hrmanage test edtsof
  • Android-CMakeLists.txt 链接第三方库(动态或者静态库)到自己的生成库中

    最近在做关于NDK开发的项目 编译方式通过cmake 如何将第三方动态链接库连接到自己生成的动态库中 按照以下步骤 1 首先看目录结构 首先将第三方库复制到jniLibs下 并创建对应的CUP平台目录 2 CMakeLists txt 方式
  • [转载]稳健语音特征和音频场景识别方法研究

    音频应用相关 http max book118 com html 2014 0508 8133338 shtm
  • 斯坦福大学自然语言处理第三课“最小编辑距离(Minimum Edit Distance)”

    一 课程介绍 斯坦福大学于2012年3月在Coursera启动了在线自然语言处理课程 由NLP领域大牛Dan Jurafsky 和 Chirs Manning教授授课 https class coursera org nlp 以下是本课程的
  • vim:批量化注释及删除注释

    1 批量化注释 首先按Esc进入到命令模式 注意左下角变为NORMAL 按住 Ctrl v 进入到视图模式 注意左下角变为 V BLOCK 再通过 h 左 j 下 k 上 l 右 选中区域 ps 按住 shift g 即可选中当前行及其下所
  • 随笔之---maven的知识

    1 maven metadata xml 这个文件是干嘛的 2 setting 中 是啥 表示所有依赖仓库的获取 走 这里 例如 任何仓库的请求 都被转到 下面的地址 如果 不是 是central则关于 中央仓库的请求会转到 下面的地址
  • 【服务器磁盘挂载步骤】

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 服务器磁盘挂载步骤 一 步骤 一 步骤 做了三块盘 2个raid0 一个raid5 具体步骤如下 1 查看下磁盘信息的两种方法 lsblk fdisk l 2 磁盘分区 su
  • 【Qt】QSlider样式定制

    一 背景 QSlider空间是Qt官方的控制控件 在项目开发中 很多地方都会使用到这个控件作为滑动块 我们可以使用样式表来定制QSlider的显示样式 从而满足多种开发需求 一个QSlider包括以下三个部分 1 滑动过的槽 2 滑块 3
  • 阶段性目标规划

    1 2022 2023的目标 1 1 考证 1 软考 嵌入式系统工程师中级 2 架构师设计 1 2 研究产出 时间节点 2021 11 论文的修改与实验 操作系统 2021 12 Emd 与TQWT 算法的 选题与研究 与实验论文撰写 1
  • 安装git,解决"git 不是内部或外部命令,也不是可运行的程序"问题

    若是为解决 git 不是内部或外部命令 也不是可运行的程序 问题 在文末 点击此处 可快速到达 官网链接 https git scm com download win Tips 官网下载的速度忒慢 我是右键复制了链接地址 然后好在迅雷上下载
  • md5加密小工具制作(js版)

    废话不多说 上图上代码 注 该demo样式采用bootstrap框架的css样式做的 页面布局代码
  • linux程序下C语言代写,代写C语言 代做C程序 C++ assembler(QQ:2365427650&http://www.daixiec.com/)...

    The aim of this assignment is to write a two pass assembler for an extended SIMPLE instruction set Then write and test p
  • Unity协程和线程的区别

    先简要说下结论 协同程序 coroutine 与多线程情况下的线程比较类似 有自己的堆栈 自己的局部变量 有自己的指令指针 IP instruction pointer 但与其它协同程序共享全局变量等很多信息 协程 协同程序 同一时间只能执
  • YOLOv3使用笔记——Kmeans聚类计算anchor boxes

    anchor boxes用来预测bounding box faster rcnn中用128 128 256 256 512 512 分三个尺度变换1 1 1 2 2 1 共计9个anchor来预测框 每个anchor预测2000个框左右 使
  • 磁盘性能测试工具DiskSpd

    一 DiskSpd工具介绍 https github com microsoft diskspd releases 工具下载 https github com Microsoft diskspd 源码 https github com Mi
  • 保存原始rgb8bit 数据到bmp文件

    就填充方式来说 跟24位位图基本是一样的 不同的是bitcolor 位设置的颜色位数要填充为8 而不是24 百度了很久 目前只能是勉强能保存成图片 能正常打开 但目前还有未能理解的问题 列举如下 如果有知道的朋友 希望能得到您的慷慨解惑 感