使用不同尺寸的传感器拍照时,怎么保证拍出同样视场范围的照片?
1、问题背景
使用竞品机做图像效果对比时,我们通常都会要求拍摄的照片要视场范围一致,这样才具有可比性。之前我会考虑用同样焦距、同样分辨率的设备去拍照对比就可以了,觉得相机的视场范围只由镜头焦距来决定。
但如果对于不同尺寸的传感器,比如我用手机和全画幅的单反相机去拍照,怎么能保证拍照的视场范围保持一致呢?手机传感器的尺寸比全画幅单反相机的尺寸小太多了,只保持分辨率相同,镜头焦距一致,拍出来视场范围不可能一样。但如何做到拍出视场范围一样的照片呢?这是本文要分析的问题。
2、问题分析
a、什么决定拍照时的视场范围?
b、当使用不同尺寸的传感器时,该怎么保证拍出同样视场范围的照片?
a、什么决定拍照时的视场范围?
视场范围,相机能拍摄到的最大物高范围,就叫视场范围。如下光路图所示,是照相机的成像原理,物体在2倍焦距外时,成倒立缩小的实像。根据光路图得到公式:y / -y = -x / -f ,y = x * -y/f (y是物高,x是物距,-y是像高,f是焦距)。

如下图所示,物高实际分轴上和轴下,所以上式要乘以2,得到:Y = x * D/f(基于实际应用,物体在无限远处,焦距的长度忽略不计,光心到传感器的距离就是焦距),Y就是最大像高,也就是视场范围。

由公式 Y = x * D/f 可知,当物距和传感器尺寸一定时,视场范围和焦距成反比。
所以当用一台相机拍照时,即传感器尺寸不变,当拍摄同一物体时,即物距不变。这时焦距决定了拍照时的视场范围,焦距越大,视场范围越小,焦距越小,视场范围越大。
b、当使用不同尺寸的传感器时,该怎么保证拍出同样视场范围的照片?
当我们对比两台设备的图像效果时,通常是拍摄同一场景,即物距相同。但这时存在两个变量,传感器的尺寸和镜头焦距。如果用手机和全画幅的相机来拍照,传感器的尺寸肯定是差别很大的,那如何做到拍摄同样视场范围的照片呢?
1)这里涉及到一个等效焦距的概念,什么叫等效焦距?
就是把不同尺寸传感器上的焦距转化为135全画幅相机同样视角所对应的焦距,转化成全画幅后的焦距叫等效焦距。
补充:什么是135全面画幅相机?
胶片时代,我们使用最多的是编号为135型胶卷底片(感光区域范围36*24mm),摄影厂商就以此为规范设计镜头和机身,数码相机的感光元器件,面积的大小成本差异很大,和135胶卷面积相同的ccd或者cmos为全画幅。


2)等效焦距的计算方法
135全画幅视场范围:Y = x * D35/f35
非全画幅视场范围:Y = x * D0/f0
视场范围相同:x * D35/f35 = x * D0/f0
等效焦距:f35 = D35/D0 * f0 = C * f0
焦距转换系数:C = D35/D0
3)等效焦距的实际应用

如上图所示,是佳能5D4相机200mm焦距和佳能7D相机200mm焦距拍摄的效果图,可以看出在同样的物距、焦距下佳能5D4相机拍摄的视场范围更大一些。佳能5D4相机传感器尺寸36*24mm,佳能7D相机传感器尺寸 22.3*14.9mm。
焦距转换系数:C = D5d4/D7d = √(36^2 + 24^2) / √(22.3^2 + 14.9^2) = 1.6
等效焦距:f5d4 = 200*1.6=320mm,也就是佳能7D+200mm拍摄效果,就相当于全画幅相机320mm焦距时的拍摄效果。
而佳能7D要拍出佳能5D4+200mm的效果,需采用 200/1.6=125mm 焦距的镜头才可以。
相关文章:
使用不同尺寸的传感器拍照时,怎么保证拍出同样视场范围的照片?
1、问题背景 使用竞品机做图像效果对比时,我们通常都会要求拍摄的照片要视场范围一致,这样才具有可比性。之前我会考虑用同样焦距、同样分辨率的设备去拍照对比就可以了,觉得相机的视场范围只由镜头焦距来决定。 但如果对于不同尺寸的传感器…...
01-工具篇-windows与linux文件共享
一般来说绝大部分PC上装的系统均是windows,为了开发linux程序,会在PC上安装一个Vmware的虚拟机,在虚拟机上安装ubuntu18.04,由于windows上的代码查看软件、浏览器,通信软件更全,我们想只用ubuntu进行编译&a…...
医疗实施-住院流程详解
住院就诊流程详解 1.病人入院登记2.病人进入病区3.医生操作病人4.医嘱录入与审核执行5. 医嘱收费前在对应业务系统的操作5.1.药物医嘱5.2.检查检验医嘱5.3.手术医嘱 6.住院医嘱费用的产生7. 医嘱收费后在对应业务系统的操作8. 病人出院 这篇文章是基于我的文章《医疗实施-住院就…...
本地连接服务器 jupyter notebook
本地连接服务器 jupyter notebook 一、前提工作二、服务器操作三、Windows 操作 一、前提工作 准备一台Linux云服务器新建一个用户,并切换到此用户安装 Anaconda 二、服务器操作 远程服务器上安装和配置 Jupyter Notebook: pip3 install jupyter接着…...
Android 使用Kotlin封装RecyclerView
文章目录 1.概述2.运行效果图3.代码实现3.1 扩展RecyclerView 3.2 扩展Adapter3.3 RecyclerView装饰绘制3.3.1 以图片实现分割线3.3.2 画网格线3.3.3空白的分割线3.3.4 不同方向上的分割线 3.4 使用方法 1.概述 在一个开源项目上看到了一个Android Kotlin版的RecyclerView封装…...
WPF 实现点击按钮跳转页面功能
方法1. 配置环境 首先添加prism依赖项,配置好所有文件。需要配置的有两个文件:App.xaml.cs和App.xaml App.xaml.cs using System.Data; using System.Linq; using System.Threading.Tasks; using System.Windows;namespace PrismDemo {/// <summa…...
关于http网络通信数据包封装的过程
当我们谈论网络通信时,数据在从源到目的地传输的过程中会通过多层网络协议。在每一层,都会添加一些头信息(和有时尾信息)来帮助处理和传输数据。这个过程被称为"封装"(Encapsulation)。简单来说&…...
关于RabbitMQ你了解多少?
关于RabbitMQ你了解多少? 文章目录 关于RabbitMQ你了解多少?基础篇同步和异步MQ技术选型介绍和安装数据隔离SpringAMQP快速入门Work queues交换机Fanout交换机Direct交换机Topic交换机 声明队列和交换机MQ消息转换器 高级篇消息可靠性问题发送者的可靠性…...
Vulkan-着色器及编译SPIR-V
1.着色器模块介绍 Vulkan着色器代码一定要用字节码格式,而不是人类可读的语法如GLSL和HLSL。这个字节码就是SPIR-V,设计用于Vulkan和OpenCL。这是一个可以用于编写图形和计算着色器的格式,但是我们主要关注的是Vulkan的图形管线。使用字节码格…...
从MVC到DDD,该如何下手重构?
作者:付政委 博客:bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获!😄 大家好,我是技术UP主小傅哥。多年的 DDD 应用,使我开了技术的眼界! MVC 旧工程腐化严重,…...
论文阅读:基于隐马尔可夫模型的蛋白质多序列比对方法研究
本文来自chatpaper Basic Information: • Title: Research on Protein Multiple Sequence Alignment Method Based on Hidden Markov Model (基于隐马尔可夫模型的蛋白质多序列比对方法研究) • Authors: Zhan Qing • Affiliation: Harbin Institute of Technology (哈尔滨工…...
Vim同时打开多个文件
分屏模式 在 Vim 中,可以同时打开多个文件并使用分屏模式来查看它们。以下是一些常见的方法和命令: 在启动 Vim 时打开多个文件 使用 -o 选项打开文件并水平分屏: vim -o file1.txt file2.txt使用 -O 选项打开文件并垂直分屏: v…...
SpringCloudStreamkafka接收jsonarray字符串失败
文章目录 场景现象问题处理 场景现象 kafka作为消息队列,作为前端设备数据到后端消费的渠道,也被多个不同微服务消费一个服务与前端边缘计算设备建立socket消息,接收实时交通事件推送,再将事件发送到kafka里面。此处使用的是Spri…...
面向对象特性分析大全集
面向对象特性分析 先进行专栏介绍 面向对象总析前提小知识分类浅析封装浅析继承浅析多态面向对象编程优点abc 核心思想实际应用总结 封装概念详解关键主要目的核心思想优点12 缺点12 Java代码实现封装特性 继承概念详解语法示例关键主要目的核心思想优点12 缺点12 Java代码实现…...
【数据结构】队列和栈
大家中秋节快乐,玩了好几天没有学习,今天分享的是栈以及队列的相关知识,以及栈和队列相关的面试题 1.栈 1.1栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作…...
WordPress主题开发( 十)之—— 条件标签函数(上)
这里写目录标题 什么是条件标签函数?条件标签函数的使用场景使用条件标签函数的注意事项常用的条件标签函数主页示例:is_front_page() 示例:管理后台is_admin() 示例:单个文章页面is_single() 示例:is_single(17) 示例:is_single(Hello World) 示例:is_single(hello…...
vue学习-10vue整合SpringBoot跨域请求
在Vue.js应用整合Spring Boot后端时,需要处理跨域请求。跨域请求通常发生在前端应用运行在不同的域名或端口上时,而后端服务运行在不同的域名或端口上。以下是一种处理跨域请求的常见方式: 后端(Spring Boot)配置 在…...
ElasticSearch - 基于 JavaRestClient 查询文档(match、精确、复合查询,以及排序、分页、高亮)
目录 一、基于 JavaRestClient 查询文档 1.1、查询 API 演示 1.1.1、查询基本框架 DSL 请求的对应格式 响应的解析 1.1.2、全文检索查询 1.1.3、精确查询 1.1.4、复合查询 1.1.5、排序和分页 1.1.6、高亮 一、基于 JavaRestClient 查询文档 1.1、查询 API 演示 1.1.…...
简易实现通讯录(2.0)
这篇文章是在上期实现的通讯录基础上,增加了自动增容的功能,也解决了一开始通讯录自动开辟一个空间,可能会浪费空间,或者是信息过多无法增容的痛点,由于我们使用的是malloc这类函数来开辟空间,我们也需要来…...
Jasypt 实现自定义加解密
如下文章已经讲解了, Jasypt 是什么,怎么集成 Jasypt,怎么使用 Jasypt。 Jasypt 开源加密库使用教程_jasyptstringencryptor-CSDN博客Jasypt 加密框架概述1、Jasypt Spring Boot 为 spring boot 应用程序中的属性源提供加密支持,…...
横空出世!IDEA最强MyBatis插件来了,功能很全!
最近更新了IDEA 2026.1这个版本,发现之前使用的MyBaitsX这个插件没有兼容,启动就报错!于是就改用了MyBatisCodeHelper-Pro这个插件,体验了一把,提示很全,还有方便的MyBaits日志转SQL面板,这里分…...
我花三天实测了DeepSeek V4,发现它根本不是来跟GPT-4o打架的
2026年4月24号,DeepSeek V4发布。 同一天,GPT-5.5也发布了。 这不是巧合,这是宣战。 但测了三天之后,我发现一个反直觉的结论,DeepSeek V4的真正对手根本不是GPT-4o,也不是Claude 3.5。 它要干掉的…...
STM32F103 IAP实战:从Bootloader设计到远程固件更新
1. 为什么你的STM32需要IAP升级? 第一次接触IAP(In-Application Programming)这个概念时,我正蹲在工厂车间的设备旁边,手里拿着需要升级的STM32板子发愁。产线上30台设备需要更新程序,而每台设备都要拆外壳…...
别再死记硬背Paxos了!用“希腊城邦法案”的故事,5分钟搞懂分布式共识核心
从古希腊议会到区块链:用人类文明史解锁分布式共识的本质 想象一下公元前5世纪的雅典城邦,五百人议会正在为是否建造新战舰争论不休。议员们需要达成一致,但有人中途离席、有人突然反对、甚至传令官可能送错消息——这像极了今天分布式系统中…...
RAG开发实战:Langchain-RAG-DevelopmentKit核心架构与工程化指南
1. 项目概述:一个面向RAG应用开发的“瑞士军刀”如果你正在或打算基于LangChain构建检索增强生成(RAG)应用,那么你大概率会遇到一个经典困境:从零开始搭建一个健壮、可扩展的RAG系统,需要整合的组件和技术栈…...
DeepSeek代码能力实测:3大编程范式通过率对比,92.7%准确率背后的5个隐藏陷阱
更多请点击: https://intelliparadigm.com 第一章:DeepSeek HumanEval测试全景概览 HumanEval 是由 OpenAI 提出的函数级代码生成基准测试集,包含 164 道 Python 编程题,每道题提供函数签名、文档字符串(docstring&am…...
构建本地AI记忆系统:五大记忆库与心跳回忆机制详解
1. 项目概述:一个让AI助手真正“记住你”的本地记忆系统 如果你用过OpenClaw、Claude Code或者任何AI助手,肯定遇到过这样的场景:昨天刚跟它详细讨论了一个项目方案,今天再问,它要么含糊其辞,要么又得从头解…...
基于MCP协议的elabftw AI助手:安全模型、配置与自动化实践
1. 项目概述:为电子实验笔记本插上AI的翅膀如果你是一名科研人员、实验室管理者,或者像我一样,经常需要和电子实验笔记本(ELN)打交道,那你一定对重复性的数据查询、整理和录入工作感到头疼。每天在浏览器和…...
Go语言构建高效命令行工具集:从设计到工程化实践
1. 项目概述:一个“好用的”开源工具集最近在GitHub上闲逛,发现了一个挺有意思的仓库,叫ImGoodBai/goodable。光看这个名字,就透着一股子“实用主义”的气息——“好用的”。作为一名常年混迹于开源社区,喜欢折腾各种工…...
C语言指针:从零掌握指针(5) 完结篇
文章目录C语言指针:从零掌握指针(5) 完结前言一、回调函数1.1 什么是回调函数?1.2 使用回调函数二、qsort函数2.1 qsort基础2.2 排序整形数据2.3 排序浮点型数据2.4 排序结构数据三,qsort函数模拟实现C语言指针&#x…...
