RGB转Bayer,一个小数点引发的血案

前几天写了一个RGB数据转Bayer格式的函数,经过测试功能正常。后来把这个函数用到一个数据库构建中,结果数据库出来的结果一直是一张黑图,追查了好几个小时,总算把这只虫子找出来了,原来是一个整数后面的小数点作祟。

原始功能正常的函数如下:


def rgb2raw(img):B = img[:, :, 0]G = img[:, :, 1]R = img[:, :, 2]raw = np.zeros_like(B)Row, Col = raw.shaperaw[0:Row:2, 0:Col:2] = R[0:Row:2, 0:Col:2]raw[0:Row:2, 1:Col:2] = G[0:Row:2, 1:Col:2]raw[1:Row:2, 0:Col:2] = G[1:Row:2, 0:Col:2]raw[1:Row:2, 1:Col:2] = B[1:Row:2, 1:Col:2]raw = raw * 65535.0 / 255.0raw = raw.astype(np.uint16)return raw

集成到数据库中出现异常的函数如下:


def rgb2raw(img, bitdepth=16):B = img[:, :, 0]G = img[:, :, 1]R = img[:, :, 2]raw = np.zeros_like(B)Row, Col = raw.shaperaw[0:Row:2, 0:Col:2] = R[0:Row:2, 0:Col:2]raw[0:Row:2, 1:Col:2] = G[0:Row:2, 1:Col:2]raw[1:Row:2, 0:Col:2] = G[1:Row:2, 0:Col:2]raw[1:Row:2, 1:Col:2] = B[1:Row:2, 1:Col:2]raw = raw * (2**bitdepth-1) / 255.0raw = raw.astype(np.uint16)return raw

由于考虑到可能需要覆盖不同比特位宽的raw域,因此,在集成到数据库中的时候,加了一个bitdepth的参数,就是这一参数,导致了后面所有的错误。

让我们试着输出raw = raw * 65535.0 / 255.0的结果:

可以看到,转换成raw域后,数据都是0~65535之间的整数。

让我们再来看看 raw = raw * 65535 / 255.0的结果:

输出数据都变成了256,显然是不对的。

将原来的实现方式替换到数据库中,问题解决。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/178517.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL2——喵喵期末不挂科

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…

【数据结构】树与二叉树(十一):二叉树的层次遍历(算法LevelOrder)

文章目录 5.2.1 二叉树二叉树性质引理5.1:二叉树中层数为i的结点至多有 2 i 2^i 2i个,其中 i ≥ 0 i \geq 0 i≥0。引理5.2:高度为k的二叉树中至多有 2 k 1 − 1 2^{k1}-1 2k1−1个结点,其中 k ≥ 0 k \geq 0 k≥0。引理5.3&…

物联网AI MicroPython学习之语法 GPIO输入输出模块

学物联网,来万物简单IoT物联网!! GPIO 介绍 模块功能: GPIO通用输入输出。 接口说明 GPIO - 构建GPIO对象 函数原型:Pin(port, dir , pull)参数说明: 参数类型必选参数?说明portintY对应开发板的引脚号…

热烈庆祝瑞森半导体成立10周年

瑞森半导体10年芯路,衷心感谢全球合作伙伴、 客户、员工、朋友的帮助与支持。 弹指一挥间,瑞森半导体已在功率半导体行业奋勇前行了十年。3650个白天与黑夜,瑞森半导体在风雨兼程中砥砺前行,在倾情奉献中不负初心。十年里有太多的…

Spring Boot MyBatis Plus 配置数据源详解

文章目录 1. 引入 MyBatis Plus 依赖2. 数据源配置3. MyBatis Plus 配置4. 动态数据源配置(多数据源)5. 小结 🎉欢迎来到架构设计专栏~Spring Boot MyBatis Plus 配置数据源详解 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页&…

智慧工地综合管理平台-项目开发管理规范

目的 本规范制定旨在规范项目的开发流程,提高软件开发质量和效率,降低开发成本和风险。该规范包括但不限于以下几个方面: 项目管理 包括项目计划、需求分析、设计、开发、测试、发布等环节,以及项目进度、质量和风险管理等方面项目计划管理:制定项目计划,包括确定项目目…

Wireshark抓包工具配置以及MQTT抓包分析

1、Wireshark抓包工具使用 打开Wireshark选择,需要抓取的物理网卡,添加过滤设置。 单击“捕获”,选择选项,输入需要捕获的IP地址和端口号。 如: ip host 10.60.4.45 and tcp port 1883 ip host 10.60.4.45 and http p…

阿里影业S1财报解读:优质内容叠加整合效益,转动增长飞轮

从《消失的她》到《长安三万里》再到《孤注一掷》,市场对阿里影业半年报好成绩已有所预期。 11月13日,阿里影业发布2023/24半年度业绩。根据财报,报告期内(4月1日至9月30日),阿里影业实现收入人民币26.16亿…

JavaEE进阶学习:Spring 的创建和使用

Spring 就是⼀个包含了众多工具方法的 IoC 容器。既然是容器那么它就具备两个最基本的功能: 将对象存储到容器(Spring)中从容器中将对象取出来 接下来使用 Maven 方式来创建一个 Spring 项目,创建 Spring 项目和 Servlet 类似&a…

Oracle(2-2)Oracle Net Architecture

文章目录 一、基础知识1、Oracle Net Connections Oracle网络连接2、C/S Application Connection C/S应用程序连接3、OSI Communication Layers OSI通信层4、Oracle Protocol Support Oracle协议支持5、B/S Application Connections B/S应用程序连接6、TwoTypes JDBC Drivers 两…

基于 React 的 HT for Web ,由厦门图扑团队开发和维护 - 用于 2D/3D 图形渲染和交互

本心、输入输出、结果 文章目录 基于 React 的 HT for Web ,由厦门图扑团队开发和维护 - 用于 2D/3D 图形渲染和交互前言什么是 HT for WebHT for Web 的特点如何使用 HT for Web相关链接弘扬爱国精神 基于 React 的 HT for Web ,由厦门图扑团队开发和维…

优维产品最佳实践第14期:让重要告警能有序跟进,最终根治

监控系统的首要任务是利用特定指标来反映系统内部的健康状态,当指标异常时,会触发告警。对于简单告警的处理,基于告警轨迹可清晰记录和观察告警的状态变化过程。 然而,对于一个复杂告警的处理,可能需要多角色多部门协…