当前位置: 首页 > news >正文

202408830使用python3给BGR3的裸图加上BMP图的文件头

202408830使用python3给BGR3的裸图加上文件头
2024/8/30 20:20


缘起,获取SONY索尼的8530的机芯的4K的BGR3的裸图。可以使用7-yuv打开了。
如果直接可以给这张YUV图加上BMP格式的文件头,就可以直接使用标准的图像处理软件/ACDSee5.0打开了!
这样就会给调试过程中带来【极大的】方便!

公司不方便找到4K显示器,于是用家里的电脑截屏了一张BMP的4K/3840x2160分辨率的BMP图。

画图应用程序的原始/默认分辨率是你的电脑的主显示器的分辨率。
比如我用的笔记本电脑是1080p/1k,也就是1920x1080了!


好久没有碰C/C++了,直接使用python3来完成这项工作了。
首先,使用WIN11自带的画图工具生成一张4K分辨率的BMP图,然后使用python3读取前54个字节。
之后,与BGR3格式的裸图进行组装即可得到正常的4K分辨率的8530的机芯图。


python3的参考源码:
D:\4K>
D:\4K>python
Python 3.11.4 (tags/v3.11.4:d2340ef, Jun  7 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> with open('test_0.yuv', 'rb') as source_file, open('4K.bmp', 'rb') as temp_file, open('target.bmp', 'wb') as target_file:
...     data = temp_file.read(54)
...     target_file.write(data)
...     data = source_file.read()
...     target_file.write(data)
...
54
24883200
>>>


# 打开源文件和目标文件
with open('test_0.yuv', 'rb') as source_file, open('4K.bmp', 'rb') as temp_file, open('target.bmp', 'wb') as target_file:
    # 读取源文件内容【BMP文件头】
    //data = temp_file.read()
    data = temp_file.read(54)
    # 将内容写入目标文件
    target_file.write(data)
    # 读取源文件内容【BGR3的裸图】
    data = source_file.read()
    # 将内容写入目标文件
    target_file.write(data)


唯一的小小的遗憾:生成的图是倒立的!
百度:BMP图 坐标系

很容易知道BGR3图的坐标系原点在左上角,BMP图的坐标系原点在左下角。
这样你组装后的图片就正好是倒立的!


参开资料:
https://blog.csdn.net/wowocpp/article/details/80805534
windows 坐标系 与 BMP 像素的映射关系


百度:Python读取二进制文件


!!!!
https://www.jb51.net/python/313993top.htm
Python读写二进制文件的示例详解【不能拷贝】
https://blog.csdn.net/m0_59236602/article/details/135714899
Python编程中如何读写二进制文件?
三、实际应用示例
2.复制二进制文件
有时候,我们需要将一个二进制文件复制到另一个文件中。下面是一个复制二进制文件的示例代码:

# 打开源文件和目标文件
with open('source.bin', 'rb') as source_file, open('target.bin', 'wb') as target_file:
    # 读取源文件内容
    data = source_file.read()
    # 将内容写入目标文件
    target_file.write(data)


https://blog.51cto.com/u_14844/11329687
python打开二进制dat文件 python 处理二进制文件 


https://blog.51cto.com/u_16175494/7637992
python读取2进制文件


https://blog.csdn.net/weixin_44609920/article/details/130163005
5.7:Python如何读取二进制文件?


百度:python打印16进制数
python文件之二进制文件的读写
python 二进制读取 前55个字节

!!!!
https://blog.51cto.com/u_16213385/7658233
python 读取二进制文件 部分字节

使用Python读取部分字节
在Python中,我们可以使用open()函数来打开一个二进制文件,并使用read()方法来读取文件的内容。默认情况下,read()方法会一次性读取整个文件的内容。但是我们可以通过指定读取的字节数来读取文件的部分内容。

下面是一个简单的示例代码,演示了如何读取二进制文件的部分字节:

with open('file.bin', 'rb') as f:
    # 读取前100个字节
    data = f.read(100)
    print(data)


百度:PYTHON格式化输出f


https://blog.csdn.net/pumpkin84514/article/details/140628581
python——格式化输出


https://www.cnblogs.com/fat39/p/7159881.html
python基础_格式化输出(%用法和format用法)


百度:python 循环
https://www.jb51.net/article/45864.htm
Python中for循环详解

>>> for i in range(5):             (1)
...     print i
0
1
2
3
4

D:\4K>python
Python 3.11.4 (tags/v3.11.4:d2340ef, Jun  7 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> with open('4k.bmp', 'rb') as source_file:
...     data = source_file.read(54)
...     print(data)

...
b'BM6\xb0{\x01\x00\x00\x00\x006\x00\x00\x00(\x00\x00\x00\x00\x0f\x00\x00p\x08\x00\x00\x01\x00\x18\x00\x00\x00\x00\x00\x00\xb0{\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
>>> print(data[0])
66
>>> print('0x%02d', data[0])
0x%02d 66
>>> print('0x%02d'% data[0])
0x66

>>> for i in range(54):
...     print('0x%02x, '% data[i])

...
0x42,
0x4d,
0x36,
0xb0,
0x7b,
0x01,
0x00,
0x00,
0x00,
0x00,
0x36,
0x00,
0x00,
0x00,
0x28,
0x00,
0x00,
0x00,
0x00,
0x0f,
0x00,
0x00,
0x70,
0x08,
0x00,
0x00,
0x01,
0x00,
0x18,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0xb0,
0x7b,
0x01,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
>>> exit()


http://www.mrgr.cn/news/15896.html

相关文章:

  • 第 8 章 数据的家——MySQL的数据目录
  • 【Shell】在 Linux 中,如何查看服务器上僵尸进程的数量
  • DNN学习平台(GoogleNet、SSD、FastRCNN、Yolov3)
  • 视觉Mamba综述——Visual Mamba: A Survey and New Outlooks论文总结
  • 介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
  • 【C++ 面试 - 内存管理】每日 3 题(十)
  • 安嘉空间:智慧科技守护空间健康
  • 华为云征文|Flexus云服务器X,云上性能新飞跃,开启业务增长新纪元
  • 快速掌握GPTEngineer:用AI创建网页应用的实用教程
  • 使用多尺度C-LSTM进行单变量时间序列异常检测
  • 开源模型应用落地-qwen2-7b-instruct-LoRA微调合并-ms-swift-单机单卡-V100(十三)
  • 【面试经验】美团实习时mentor讲的面试技巧
  • Keil5 Debug模式Watch窗口添加的监控变量被自动清除
  • 算法day16(补第15天)|用递归方法求解:513.找树左下角的值
  • ★ 算法OJ题 ★ 力扣11 - 盛水最多的容器
  • SpringBoot SSM vue在线作业考试系统
  • vue子组件样式影响父组件
  • 使用 ip addr add 命令管理网络接口 IP 地址
  • 解题-写一个程序判断当前机器的大小端存储模式 #两种方法
  • SpringCloud乐尚代驾学习笔记:司机端登录(四)