影棚中关于入射式测光表和光比的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了影棚中关于入射式测光表和光比的问题相关的知识,希望对你有一定的参考价值。

入射式测光表所测的EV值不调整的话拍出的效果是什么样的?是正好的EV值么?如果按此值少许曝光不足或曝光过度出来的相片是什么样的?
我刚刚开始练习使用测光表没什么经验,测光表所测量的EV值在实际曝光中用调整么?有什么经验或简单有效的方法?
如果快门不变的情况下每增加一档光圈就会增加一倍的光比就是说F8的光比是F11的2倍,如果想暗部和亮部都拍出细节光比的极限是多少?是1:6么?假如是1:6那么最暗部和最亮部不能超过3档光圈是这样么?这和区域曝光法有关系么?
亮部和暗部都想有层次一般取亮部的ev值还是取暗部的EV值啊?还是用中间的?
就这些了,请有经验的前辈和老师帮我解答这些疑惑,谢谢了

首先你要了解EV值其实就是曝光值,测的那个部位就会体现是18%中灰的密度层次。你在拍摄的时候你就要先想好,什么部位是最要有层次的,什么部位是要暗的,对着你想要有层次的那个部位测光。所以它本身不表示光圈或快门中的任何一个。例如EV=15的话可以用1/125快门和F16的光圈组合
所以,用EV来描述,比用光圈、快门的组合来描述要方便。只是代表曝光值的一个数值
比如某测光表的有效工作范围是EV1-EV19,如果不用EV来描述,那岂不是得写成:
从1秒,F1.4 或 2秒,F2 或 4秒,F2.8……
到1/500秒,F32 或 1/1000秒,F22 或 1/2000,F16。。。
所以你在拍摄的时候,根本不用调整EV值,如果显示EV15的话,你就用1/125快门和F16的光圈来拍摄,最多自己再根据这个曝光,加减一下曝光量。
你应该说F8的进光量是F11的2倍,如果想明暗都有细节,还要看你的胶片的宽容度,宽容度越大,光比就可以越大。一般不要超过5档都没什么问题。数码的话,加上RAW格式,光比还可以更大。
和你说一个光圈进光照度的倍率关系“n”为这两档光圈之间相差的数 。如f2与f2。8相差一档,那么,2
1
=2,说明f2的进光照度是f2.8的2倍,f2.8是 f2的二分之一 再如f2与f8比较,两者相差4档 , 那么,2
4
=16,这就意味着f2的进光照度是f8的16倍;f8 就是f2进光照度的十六分之一。所以1:6的光比,光量相差六倍,光圈值就相差3档。和区域曝光没有关系,区域曝光只是曝光方式
如果两部和暗部都有层次的话,那就取中间值,关键看你需要上面部位是中间灰的,在比较重要的场合下,再稍微加减一点曝光再多拍摄几张,就很保险了。
希望对你有所帮助
参考技术A 影棚中打光也很重要!很多灯上都有输出功率,参考各个等的输出功率就可以初步得到各个方向的光比,这步没有做好后面测光、光圈快门调节等方法想一步拍出满意的片都是空话,灯光输出光比过大造成的明暗阴影不是后面几步能调节的
区域曝光法可以,但这个就要涉及到ps里的高反差保留了,说到底还是不能一步拍出好片,所以灯光很重要
顺便再说一下,迪派网络杂志2007年9月刊有专门讲影棚补光的文章,你可以参考一下:www.dpnet.com.cn

Python——反射式地初始化类

【中文标题】Python——反射式地初始化类【英文标题】:Python — Init class reflectively 【发布时间】:2021-03-10 04:54:48 【问题描述】:

我正在用 Python 创建一个命令系统。我有一个模块vkcommands,它有一个处理来自聊天的命令的类(这是一个聊天机器人),在其中,我还有一个类VKCommand,其属性如nameusagemin_rank、等等。然后我有模块 vkcmds 和实现这些命令的子模块:

...
vkcommands.py
vkcmds
    |- __init__.py  # empty
    |- add_group.py
    |- another_cmd.py
    |- ...

命令的实现(例如add_group)如下所示:

import ranks
import vkcommands
from vkcommands import VKCommand


class AddGroup(VKCommand):
    def __init__(self, kristy):
        VKCommand.__init__(self, kristy,
                           label='create',
                           # ... (other attributes)
                           min_rank=ranks.Rank.USER)

    def execute(self, chat, peer, sender, args=None, attachments=None):
        # implementation (called from vkcommands.py)

当用户在聊天中发送消息时,命令管理器会对其进行分析并查看已注册的commands 列表,以确定这是普通消息还是机器人命令。目前我像这样手动注册commands列表中的所有命令:

class VKCommandsManager:
    def __init__(self, kristy):
        from vkcmds import (
            add_group,
            next_class
        )

        self.kristy = kristy
        self.commands = (
            add_group.AddGroup(kristy),
            next_class.NextClass(kristy)
        )

现在我希望使用反射自动注册所有命令。在 Java 中,我会遍历命令包中的所有类,反射性地为每个类 getConstructor,调用它来检索VKCommand 对象,并将其添加到命令列表中。

如何在 Python 中做到这一点? 同样,我需要:

    遍历模块(文件夹)vkcmds/中的所有子模块; 对于每个子模块,检查内部是否有一些类X 扩展了VKCommand; 如果 (2) 是 true,则使用一个参数调用该类的构造函数(保证所有命令的构造函数只有一个已知类型的参数(我的机器人主类)); 将 (3) 中构造的对象 (? extends VKCommand) 添加到 commands 列表中,以便稍后进行迭代。

【问题讨论】:

我认为您可以在__init__.py 中创建所有命令的列表,然后遍历所有命令并构建它们。 整个问题是我如何构建它们。我已经能够弄清楚如何列出模块的所有子模块,但是如何检查它们是否有特定的类,以及如何实际初始化该类? 像调用函数一样实例化一个类:obj = AddGroup(arg1, arg2, ...) 我想反思一下。无需自己为每个命令键入类或构造函数的名称。这样我就可以创建一个新的子模块,比如vkcmds/new_cmd.py,在其中创建一个扩展VKCommand 的类,执行命令,然后什么都不做——该命令应该自动注册,而无需我编写“import new_cmd / // commands.append(NewCmd(...))" 【参考方案1】:

使用此文件结构:

- Project
   ├─ commands
   |   ├─ base.py
   |   ├─ baz.py
   |   └─ foo_bar.py
   |
   └─ main.py

以及commands目录里面的以下文件:

base.py

class VKCommand:
    """ We will inherit from this class if we want to include the class in commands.  """

baz.py

from commands.base import VKCommand

class Baz(VKCommand):
    pass


def baz():
    """ Random function we do not want to retrieve.  

foo_bar.py

from .base import VKCommand


class Foo(VKCommand):
    """ We only want to retrieve this command.  """
    pass


class Bar:
    """ We want to ignore this class.  """
    pass


def fizz():
    """  Random function we do not want to retrieve. """

我们可以使用以下代码直接检索类实例和名称:

main.py

"""
  Dynamically load all commands located in submodules.
  This file is assumed to be at most 1 level higher than the
  specified folder.
"""

import pyclbr
import glob
import os

def filter_class(classes):
    inherit_from = 'VKCommand'
    classes = name: info for name, info in classes.items() if inherit_from in info.super
    return classes

# Locate all submodules and classes that it contains without importing it.
folder = 'commands'  # `vkcmds`.
submodules = dict()
absolute_search_path = os.path.join(os.path.dirname(__file__), folder, '*.py')
for path in glob.glob(absolute_search_path):
    submodule_name = os.path.basename(path)[:-3]
    all_classes = pyclbr.readmodule(f"commands.submodule_name")
    command_classes = filter_class(all_classes)
    if command_classes:
        submodules[submodule_name] = command_classes

# import the class and store an instance of the class into the command list
class_instances = dict()
for submodule_name, class_names in submodules.items():
    module = __import__(f"folder.submodule_name")
    submodule = getattr(module, submodule_name)
    for class_name in class_names:
        class_instance = getattr(submodule, class_name)
        class_instances[class_name] = class_instance

print(class_instances)

说明

解决方案是双重的。它首先定位具有从VKCommand 继承的类并位于文件夹“commands”中的所有子模块。这导致以下输出包含必须分别导入和实例化的模块和类:

'baz': 'Baz': <pyclbr.Class object at 0x000002BF886357F0>, 'foo_bar': 'Foo': <pyclbr.Class object at 0x000002BF88660668>

代码的第二部分在运行时导入了正确的模块和类名。变量class_instance 包含类名和对可用于实例化它的类的引用。最终输出将是:

'Baz': <class 'commands.baz.Baz'>, 'Foo': <class 'commands.foo_bar.Foo'>

重要提示:

    该代码仅在导入比字典更深 1 的模块时有效。如果您想递归使用它,您必须找到 relative path difference 并使用正确的(完整)相对导入路径更新 pyclbr.readmodule__import__

    只有包含从VKCommand 继承的类的模块才会被加载。所有其他模块导入,必须手动导入。

【讨论】:

【参考方案2】:

我相信您可以将文件夹中的所有命令组成一个数组,然后遍历它们并实例化对象。

__init__.py

all_commands = [AddGroup, AnotherCmd, ...]

像这样实例化它们:

objects = [Cmd(arg1, arg2, ...) for Cmd in all_commands]

编辑: 您还可以使用您所说的获取文件夹中所有类名的方法来检索类名。

【讨论】:

以上是关于影棚中关于入射式测光表和光比的问题的主要内容,如果未能解决你的问题,请参考以下文章

互补PWM中关于死区对占空比的影响

光的反射和折射的区别

带有gphoto2的树莓派摄影棚Web应用程序

简述激光雷达的结构原理分类及特点?

关于探索测试

关于服务器核心数和CPU占比的信息