什么是无效的解析元组?

时间:2019-02-23 15:14:59

标签: python python-3.5 raspberry-pi3

我有一台Raspberry Pi相机,根据specs

,该相机的“最佳分辨率”为1080p

我有一个小的脚本,除了更改某些设置外没有任何其他效果。

import picamera
import picamera.array
import numpy
from fractions import Fraction

camera = icamera.PiCamera()
camera.resolution = 1920*1080
camera.iso = 0
camera.exposure_mode = 'off'
camera.shutter_speed = '10000'

camera.start_preview()

当我执行代码时,会看到以下错误消息,然后是代码结尾我只包含了错误消息的最后两行

    raise PiCameraValueError("Invalid resolution tuple: %r" % value)
picamera.exc.PiCameraValueError: Invalid resolution tuple: 2073600

我曾尝试将分辨率更改为多种方式,例如1280 * 720,一直降低到640 * 480,唯一的更改是错误消息的最后一个数字。

不幸的是,这在网上没有得到充分的记录,所以我一直无法找出正在发生的事情。

那么这是什么错误消息?我需要在代码中进行哪些修改才能设置分辨率?

1 个答案:

答案 0 :(得分:1)

camera.resolution应该设置为具有两个整数的 tuple

camera.resolution = 1920, 1080

请注意逗号。来自PiCamera.resolution documentation

  

设置后,该属性将配置摄像机,以便对这些方法的下一次调用将使用新的分辨率。分辨率可以指定为元组,格式为“ WIDTHxHEIGHT”的字符串,也可以指定为包含公认的显示分辨率名称的字符串(例如“ VGA”,“ HD”,“ 1080p”等)。

您认为它有助于提高可读性,您可以在元组值周围使用括号:

camera.resolution = (1920, 1080)

您传入的是乘法运算的结果,而是一个整数,并且1920*1080是1920乘以1080的2073600,即异常消息中的值。

还可以使用字符串值,并使用x分隔宽度和高度:

camera.resolution = "1920x1080"

也许这种格式导致了错误?我可以想象有人将1920x10801920*1080连接起来,从而导致这种混乱。

字符串"FHD""1080p"也将是正确的,例如FHD 1080p cameras use that exact resolution