python 手机相机传感器信息计算

news2024/9/23 3:34:01

传感器信息计算

输入传感器尺寸以上已红米12pro+为例

在这里插入图片描述
输入传感器尺寸 1/1.4英寸 = 0.7142857
输入像素2亿 = 200000000

得到以下结果
和宣传中的传感器信息一致
在这里插入图片描述

附源码

import sympy

class CMosInfo(object):
    """传感器信息计算"""

    def __init__(self):
        self.inch = 1 # 传感器英寸
        self.pixel = 200000000  # 像素点2亿分辨率
        self.heightProportion = 3  # 手机传感器尺寸默认高度比例 默认3
        self.widthPortion = 4  # 宽度比例 默认 4

    def main(self):
        while True:
            self.inch = 0
            equipment_type=input("请输入1或者2(1手机,2相机)")
            if equipment_type == '1':
                self.heightProportion = 3  # 手机传感器尺寸默认高度比例 默认3
                self.widthPortion = 4  # 宽度比例 默认 4
                self.get_coms_info()
            elif equipment_type == '2':
                while True:
                    hf=input("请输入相机类型:(1.全画幅,2.半画幅,3.中画幅,4.M43)")
                    if hf == '1':
                        self.heightProportion = 3  # 手机传感器尺寸默认高度比例 默认3
                        self.widthPortion = 4  # 宽度比例 默认 4
                        self.inch = 2.67
                        break
                    elif hf == '2':
                        self.heightProportion = 2  # 手机传感器尺寸默认高度比例 默认3
                        self.widthPortion = 3  # 宽度比例 默认 4
                        self.inch = 1.7
                        break
                    elif hf == '3':
                        print("仔仔大哥哥没写")
                    elif hf == '4':
                        self.heightProportion = 3  # 手机传感器尺寸默认高度比例 默认3
                        self.widthPortion = 4  # 宽度比例 默认 4
                        self.inch = 1.33
                        break
                    else:
                        print('请重新输入相机类型')
                self.get_coms_info()
            else:
                print("未输入正确类型")

    def get_coms_info(self):
        """手机默认传感器尺寸3:4"""
        if self.inch == 0:
            self.inch=float(input("请输入传感器尺寸(英寸)"))
        self.pixel=input("请输入像素")
        self.count()

    def hypotenuseCm(self):
        cmos = sympy.Symbol('cmos')  # cmos 英寸
        f_cm = (cmos * 2.54).evalf(subs={cmos: self.inch})  # 斜边长度英寸转换厘米
        return f_cm

    def compute_height_and_width(self,f_cm):
        """
            # 计算传感器的长度和宽度
            # 返回元组 宽度和高度 w h
            """
        x = sympy.Symbol('x', positive=True)  # 宽度 正数
        y = sympy.Symbol('y', positive=True)  # 高度 正数
        f1 = x * x + y * y - f_cm * f_cm
        f2 = x * self.heightProportion - y * self.widthPortion
        v = sympy.solve([f1, f2], [x, y])
        return (v[0])

    def photosensitive(self, pixel, width, height):
        """
        传入像素,宽度和高度
        返回单像素尺寸 平方微米um
        """
        # 厘米转换为微米*10000
        width = width * 10000
        height = height * 10000
        f1 = (width * height)/int(pixel)/1.4142 # 除于根号2得到正方形斜边长度

        return f1

    def pixel_height_and_width(self,pixel, heightProportion, widthPortion):
        """
        # 计算图片分辨率
        """
        pixel_x = sympy.Symbol('pixel_x', positive=True)  # 像素点x
        pixel_y = sympy.Symbol('pixel_y', positive=True)  # 像素点y
        f1 = (pixel_x * pixel_y) - int(pixel)
        f2 = (pixel_x * heightProportion) - (pixel_y * widthPortion)
        v = sympy.solve([f1, f2], [pixel_x, pixel_y])
        return (int((v[0])[0]), int((v[0])[1]))

    def count(self):
        """计算"""
        f_cm=self.hypotenuseCm()
        width_and_height = self.compute_height_and_width(f_cm)
        print(f'传感器宽度cm:{width_and_height[0]}cm')
        print(f'传感器高度cm:{width_and_height[1]}cm')
        Single_pixel_area = self.photosensitive(self.pixel, width=width_and_height[0], height=width_and_height[1])
        print(f'单像素感光面积:{Single_pixel_area}um')
        pixel_x_y = self.pixel_height_and_width(self.pixel, self.heightProportion, self.widthPortion)
        print(f'最大分辨率:{pixel_x_y[0]}*{pixel_x_y[1]}')

CMI=CMosInfo()
CMI.main()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C 程序设计教程(19)—— 数组和指针(二):字符数组与字符串

C 程序设计教程(19)—— 数组和指针(二):字符数组与字符串 该专栏主要介绍 C 语言的基本语法,作为《程序设计语言》课程的课件与参考资料,用于《程序设计语言》课程的教学,供入门级用…

word实用操作:几个关于录入和排版的小妙招

对于职场人来说,工作中使用Word早已成了习惯。而如何提高Word的技术,那简直是职场人一生都需要研究探索的课题。因此,今天小编将为大家分享几个实用的Word小技巧,这些技巧貌似不起眼,但是学会后,可以大大提…

如何查linux服务器的带宽占用?哪些进程占用带宽?

前言操作系统: Linux操作环境: Centos7 / ubuntulinux查看服务器带宽具体方法   一、使用speedtest-cli命令查看下载和上传最大流量值因为命令是python的,所以需要先下载一个python,用pip下载次命令;123yum -y insta…

七个 Vue 项目用得上的 JavaScript 库分享

文章目录前言一、vueuse二、vue-js-modal三、vue-wait四、good-table五、vue-notification六、tree select七、egjs-infinite grid总结前言 借助开源库加速 Vue 项目的开发进度是现代前端开发比较常见的方式,平常收集一些 JavaScript 库介绍,在遇到需要的…

上古神兵,先天至宝,Win11平台安装和配置NeoVim0.8.2编辑器搭建Python3开发环境(2023最新攻略)

毫无疑问,我们生活在编辑器的最好年代,Vim是仅在Vi之下的神级编辑器,而脱胎于Vim的NeoVim则是这个时代最好的编辑器,没有之一。异步支持、更好的内存管理、更快的渲染速度、更多的编辑命令,是大神Thiago de Arruda对开…

第九层(5):STL之stack

文章目录前情回顾stack概念stack容器需要注意的地方stack类内的构造函数stack类内的赋值操作stack类内的插入stack类内的删除stack类内的访问stack类内的大小操作下一座石碑🎉welcome🎉 ✒️博主介绍:一名大一的智能制造专业学生,…

Knowledge-based-BERT(三)

多种预训练任务解决NLP处理SMILES的多种弊端,代码:Knowledge-based-BERT,原文:Knowledge-based BERT: a method to extract molecular features like computational chemists,代码解析继续downstream_task。模型框架如…

HTML中的div和span标签

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>HTML中的div和span标签</title> </head> <body> <!-- 1、div和span是什么&#xff1f;有什么用…

【linux】文件操作(IO)详述

文件操作一、引入二、系统调用接口2.1 open与close2.2 write2.3 read三、文件描述符3.1 分配规则四、重定向4.1 输出重定向4.2 追加重定向4.3 输入重定向4.4 独立性五、缓冲区5.1 缓冲区刷新策略5.2 缓冲区位置5.3 现象解释六、文件系统6.1 文件系统分区6.1.1 分区图6.1.2 介绍…

实时推荐业务介绍 grpc接口对接

5.1 实时推荐业务介绍 学习目标 目标 无应用 无 5.1.1 实时推荐逻辑 逻辑流程 1、后端发送推荐请求&#xff0c;实时推荐系统拿到请求参数 grpc对接2、根据用户进行ABTest分流 ABTest实验中心&#xff0c;用于进行分流任务&#xff0c;方便测试调整不同的模型上线3、推荐中心…

k8s之部署有状态应用

写在前面 本文一起看下k8s对于有状态应用部署提供的解决方案。 1&#xff1a;有状态应用和无状态应用 如果是一个应用每次重启时依赖环境都能和第一次启动时的完全一致&#xff0c;则就可以称这类应用是无状态应用用&#xff0c;反之&#xff0c;就是有状态应用&#xff0c;如…

自动写代码的AI工具,已经支持 VsCode 插件安装使用

自动写代码的AI工具&#xff0c;已经支持 VsCode 插件安装使用&#xff0c;它的功能并不是「代码补全」&#xff0c;而是「代码生成」。 之前有个比较火的 GitHub Copilot&#xff0c;但是这是商业产品&#xff0c;并且没有开源&#xff0c;现在又被告了。 GitHub Copilot 面…

SQLSERVER 事务日志的 LSN 到底是什么?

一&#xff1a;背景 1. 讲故事 大家都知道数据库应用程序 它天生需要围绕着数据文件打转&#xff0c;诸如包含数据的 .mdf&#xff0c;事务日志的 .ldf&#xff0c;很多时候深入了解这两类文件的合成原理&#xff0c;差不多对数据库就能理解一半了&#xff0c;关于 .mdf 的合…

代码随想录--二叉树章节总结 Part II

代码随想录–二叉树章节总结 Part II 1.Leetcode222 求完全二叉树结点的个数 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达…

Python机器学习:特征变换

&#x1f315; 特征变换 特征变换主要就是针对一个特征&#xff0c;使用合适的方法&#xff0c;对数据的分布、尺度等进行变换&#xff0c;以满足建模时对数据的需求。 特征变换可分为数据的数据的无量纲化处理和数据特征变换。 &#x1f317; 数据的无量纲化处理 常用处理…

22.0:Codejock Suite Pro for ActiveX COM:Crack

从 Visual Basic 5.0 和 6.0 开始一直到当前版本的 Visual Studio 的大多数 ActiveX 容器。与 Visual Studio 无缝集成并包含我们所有 ActiveX COM 产品的评估版本。评估版不提供 OCX 文件的 Unicode 版本。 创建包含一整套高度可定制的用户界面组件的专业应用程序&#xff0c;…

Flink-FinkSQL基本操作(Table API、动态表、事件窗口、分组聚合开窗查询、联结查询)

11 Table API和SQL 11.1 快速上手 引入TableAPI的依赖 桥接器 <dependency><groupId>org.apache.flink</groupId> <artifactId>flink-table-api-java-bridge_${scala.binary.version}</artifactId><version>${flink.version}</vers…

12、常用插件

文章目录12、常用插件推荐1&#xff1a;Alibaba Java Coding Guidelines推荐2&#xff1a;jclasslib bytecode viewer推荐3&#xff1a;Translation推荐4&#xff1a;GenerateAllSetter推荐5&#xff1a;Rainbow Brackets推荐6&#xff1a;CodeGlance Pro推荐7&#xff1a;Stat…

7.bWAPP -- INSECURE DIRECT OBJECT REFERENCES

7.bWAPP – INSECURE DIRECT OBJECT REFERENCES 0x01、Insecure DOR (Change Secret) 同 XSS - Stored (Change Secret) Low 仔细观察页面, 发现隐藏一个input标签, 作用是输入用户名, 并且配合提交的修改密码, 完成修改用户密码的操作: 这里就可以利用该用户名input标签达…

如何带好一个团队?团队管理的要点有哪些?

想带好一个团队并不是这么容易&#xff0c;尤其是对于新晋升管理者来说更是难上加难。团队管理可以大大提高工作效率。那么&#xff0c;团队管理的要点是什么呢&#xff1f; 1、远景和目标 成员们先要有一个共同的目标&#xff0c;在此基础上还必须要有一个好的愿景&#xff0…