image
— 机器视觉¶
image
模块用于机器视觉。
函数¶
- image.binary_to_grayscale(binary_image_value)¶
返回二进制值(0-1)对应的灰度值(0-255)。
- image.binary_to_rgb(binary_image_value)¶
返回二进制值(0-1)对应的RGB888格式的元组(r, g, b)。
- image.binary_to_lab(binary_image_value)¶
返回二进制值(0-1)对应的LAB格式的元组(l, a, b)。
L的范围为0到100, A和B的范围为-128到128。
- image.binary_to_yuv(binary_image_value)¶
返回二进制值(0-1)对应的YUV格式的元组(y, u, v)。
Y的范围为0到255, U和V范围为-128到128。
- image.grayscale_to_binary(grayscale_value)¶
返回灰度值(0-255)对应的二进制值(0-1)。
- image.grayscale_to_rgb(grayscale_value)¶
返回灰度值(0-255)对应的RGB888格式的元组(r, g, b)。
备注
OpenMV Cam固件使用RGB565->RGB888处理转换,因此此方法不会像纯RGB888系统那样返回准确的值。但是,图像库在内部确实是这样工作的。
- image.grayscale_to_lab(grayscale_value)¶
返回灰度值(0-255)对应的LAB格式的元组(l, a, b)。
L的范围为0到100, A和B的范围为-128到128。
备注
OpenMV Cam固件使用RGB565-> LAB处理转换,因此此方法不会像纯RGB888系统那样返回准确的值。但是,图像库在内部确实是这样工作的。
- image.grayscale_to_yuv(grayscale_value)¶
返回灰度值(0-255)对应的YUV格式的元组(y, u, v)。
Y的范围为0到255, U和V范围为-128到128。
备注
OpenMV Cam固件使用RGB565->YUV处理转换,因此此方法不会像纯RGB888系统那样返回准确的值。但是,图像库在内部确实是这样工作的。
- image.rgb_to_binary(rgb_tuple)¶
返回RGB888格式的元组(r, g, b)对应的中心范围阈值二进制值(0-1)。
备注
OpenMV Cam固件使用RGB888->RGB565处理转换,因此此方法不会像纯RGB888系统那样返回准确的值。但是,图像库在内部确实是这样工作的。
- image.rgb_to_grayscale(rgb_tuple)¶
返回RGB888格式的元组(r, g, b)对应的灰度值(0-255)。
备注
OpenMV Cam固件使用RGB888->RGB565处理转换,因此此方法不会像纯RGB888系统那样返回准确的值。但是,图像库在内部确实是这样工作的。
- image.rgb_to_lab(rgb_tuple)¶
返回RGB888格式的元组(r, g, b)对应的LAB格式的元组(l, a, b)。
L的范围为0到100, A和B的范围为-128到128。
备注
OpenMV Cam固件使用RGB888->RGB565处理转换,因此此方法不会像纯RGB888系统那样返回准确的值。但是,图像库在内部确实是这样工作的。
- image.rgb_to_yuv(rgb_tuple)¶
返回RGB888格式的元组(r, g, b)对应的YUV格式的元组(y, u, v)。
Y的范围为0到255, U和V范围为-128到128。
备注
OpenMV Cam固件使用RGB888->RGB565处理转换,因此此方法不会像纯RGB888系统那样返回准确的值。但是,图像库在内部确实是这样工作的。
- image.lab_to_binary(lab_tuple)¶
返回LAB格式的元组(l, a, b)对应的中心范围阈值二进制值(0-1)。
备注
OpenMV Cam固件使用LAB->RGB565处理转换,因此此方法不会像纯LAB系统那样返回准确的值。但是,图像库在内部确实是这样工作的。
- image.lab_to_grayscale(lab_tuple)¶
返回LAB格式的元组(l, a, b)对应的灰度值(0-255)。
备注
OpenMV Cam固件使用LAB->RGB565处理转换,因此此方法不会像纯LAB系统那样返回准确的值。但是,图像库在内部确实是这样工作的。
- image.lab_to_rgb(lab_tuple)¶
返回LAB格式的元组(l, a, b)对应的RGB888格式的元组(r, g, b)。
备注
OpenMV Cam固件使用LAB->RGB565处理转换,因此此方法不会像纯LAB系统那样返回准确的值。但是,图像库在内部确实是这样工作的。
- image.lab_to_yuv(lab_tuple)¶
返回LAB格式的元组(l, a, b)对应的YUV格式的元组(y, u, v)。
Y的范围为0到255, U和V范围为-128到128。
备注
OpenMV Cam固件使用LAB->RGB565处理转换,因此此方法不会像纯LAB系统那样返回准确的值。但是,图像库在内部确实是这样工作的。
- image.yuv_to_binary(yuv_tuple)¶
返回YUV格式的元组(y, u, v)对应的中心范围阈值二进制值(0-1)。
备注
OpenMV Cam固件使用YUV->RGB565处理转换,因此此方法不会像纯YUV系统那样返回准确的值。但是,图像库在内部确实是这样工作的。
- image.yuv_to_grayscale(yuv_tuple)¶
返回YUV格式的元组(y, u, v)对应的灰度值(0-255)。
备注
OpenMV Cam固件使用YUV->RGB565处理转换,因此此方法不会像纯YUV系统那样返回准确的值。但是,图像库在内部确实是这样工作的。
- image.yuv_to_rgb(lab_tuple)¶
返回YUV格式的元组(y, u, v)对应的RGB888格式的元组(r, g, b)。
备注
OpenMV Cam固件使用YUV->RGB565处理转换,因此此方法不会像纯YUV系统那样返回准确的值。但是,图像库在内部确实是这样工作的。
- image.yuv_to_lab(yuv_tuple)¶
返回YUV格式的元组(y, u, v)对应的LAB格式的元组(l, a, b)。
L的范围为0到100, A和B的范围为-128到128。
备注
OpenMV Cam固件使用YUV->RGB565处理转换,因此此方法不会像纯YUV系统那样返回准确的值。但是,图像库在内部确实是这样工作的。
- image.load_decriptor(path)¶
从磁盘上加载一个descriptor对象。
path
是加载的descriptor的文件路径。
- image.save_descriptor(path, descriptor)¶
保存描述符对象
descriptor
到磁盘。path
是descriptor文件保存的路径。
- image.match_descriptor(descritor0, descriptor1[, threshold=70[, filter_outliers=False]])¶
对于LBP描述符来说,这个函数返回的是一个体现两个描述符之间区别的整数。你可以接下来计算阈值或者比较这个距离。这个距离是对相似度的一个度量。这个测度值越接近0,LBPF特征点就越匹配。
对于ORB描述符来说,这个函数返回的是
kptmatch
对象。以下。threshold
是用来为ORB键点过滤不准确的匹配。一个较低的threshold
值将减少关键点匹配的结果。threshold
值可以为0-100 (int)。默认值为70。filter_outliers
用于 ORB 关键点,以过滤异常点关键点,允许您提高threshold
。默认为 False。
HaarCascade类 – 特征描述符¶
Haar Cascade特征描述符用于 image.find_features()
方法。它没有供用户调用的方法。
- class image.HaarCascade(path[, stages=Auto])¶
从一个Haar Cascade二进制文件导入到OpenMV的内存中。如果您传递“frontalface”字符串而不是路径,这个构造函数将会把一个内置的正脸的Haar Cascade载入内存。此外,您也可以通过“eye”来把Haar Cascade导入内存。最后,这个方法会返回载入的Haar Cascade对象,用来使用
image.find_features()
。stages
默认值为Haar Cascade中的阶段数。然而,您可以指定一个较低的数值来加速运行特征检测器,当然这会带来较高的误报率。备注
您可以制作自己的Haar Cascades 来配合您的OpenMV Cam 使用。首先,使用谷歌搜索“<thing> Haar Cascade”,看看是否有人已经为您想要检测的对象制作了OpenCV Haar Cascade。如果没有… 那您需要自己动手制作(工作量巨大)。关于如何制作自己的Haar Cascade,见此。关于如何把OpenCV Haar Cascades转化成您的OpenMV Cam可以读取的模式,见此script。
问:Haar Cascade 是什么?
A: Haar Cascade 是一系列用于确定图像中是否存在对象的对比检查。对比检查分为几个阶段,其中一个阶段只在前面的阶段已经通过的情况下运行。对比检查是一些简单的东西,比如检查图像的中垂直中心是否比边缘亮。在较早的阶段首先执行大面积检查,然后在后续阶段执行更多的和更小的面积检查。
Q: 如何制作 Haar Cascade?
A: 通过针对正负标记图像训练生成器算法来制作 Haar Cascade。例如,您可以针对数百张带有猫的图片进行训练,这些图片被标记为带有猫的图片,并且针对数百张带有不像猫的东西的图片进行标记。然后,生成器算法将生成一个可以检测猫的 Haar Cascade。
类 Histogram – 直方图对象¶
直方图对象由 Image.get_histogram()
返回。
灰度直方图有一个通道,一些数目的柱。所有柱都被归一化,以便所有柱的和等于 1。
RGB565 直方图有三个通道,每个通道有一些柱。所有柱都被归一化,以便每个通道中的所有柱的和等于 1。
- class image.histogram¶
请调用
Image.get_histogram()
来创建此对象。- bins()¶
返回灰度直方图的浮点数列表。
您也可以对该对象执行
[0]
来获取此值。
- l_bins()¶
返回 RGB565 直方图的浮点数列表 LAB L 通道。
您也可以对该对象执行
[0]
来获取此值。
- a_bins()¶
返回 RGB565 直方图的浮点数列表 LAB A 通道。
您也可以对该对象执行
[1]
来获取此值。
- b_bins()¶
返回 RGB565 直方图的浮点数列表 LAB B 通道。
您也可以对该对象执行
[2]
来获取此值。
- get_percentile(percentile)¶
计算直方图通道的累积分布函数(CDF),并返回一个带有直方图在传入的
percentile
(0.0-1.0)(float)处值的image.percentile
对象。因此,如果您传入 0.1,该方法将告诉您(从直方图的左到右)哪个柱子在加到累加器中时使累加器越过 0.1。这对于确定颜色分布的最小值(使用 0.1)和最大值(使用 0.9)而不会因异常值效果而破坏自适应颜色跟踪结果非常有用。
- get_threshold()¶
使用 Otsu 方法计算将直方图分成两半的每个通道的最佳阈值值。此方法返回一个
image.threshold
对象。此方法特别适用于确定最佳的Image.binary()
阈值。
- get_statistics()¶
计算直方图中每个颜色通道的均值、中位数、模式、标准差、最小值、最大值、下四分位数和上四分位数,并返回一个
statistics
对象。您也可以将
histogram.statistics()
和histogram.get_stats()
用作此方法的别名。
类 Percentile – 百分位数对象¶
百分位数对象由 histogram.get_percentile()
返回。
灰度百分位数有一个通道。使用非 l_*
、a_*
和 b_*
方法。
RGB565 百分位数有三个通道。使用 l_*
、a_*
和 b_*
方法。
- class image.percentile¶
请调用
histogram.get_percentile()
来创建此对象。- value()¶
返回灰度百分位数值(介于 0 到 255 之间)。
您也可以对该对象执行
[0]
来获取此值。
- l_value()¶
返回 RGB565 LAB L 通道百分位数值(介于 0 到 100 之间)。
您也可以对该对象执行
[0]
来获取此值。
- a_value()¶
返回 RGB565 LAB A 通道百分位数值(介于 -128 到 127 之间)。
您也可以对该对象执行
[1]
来获取此值。
- b_value()¶
返回 RGB565 LAB B 通道百分位数值(介于 -128 到 127 之间)。
您也可以对该对象执行
[2]
来获取此值。
类 Threshold – 阈值对象¶
阈值对象由 histogram.get_threshold()
返回。
灰度阈值有一个通道。使用非 l_*
、a_*
和 b_*
方法。
RGB565 阈值有三个通道。使用 l_*
、a_*
和 b_*
方法。
- class image.threshold¶
请调用
histogram.get_threshold()
来创建此对象。- value()¶
返回灰度阈值值(介于 0 到 255 之间)。
您也可以对该对象执行
[0]
来获取此值。
- l_value()¶
返回 RGB565 LAB L 通道阈值值(介于 0 到 100 之间)。
您也可以对该对象执行
[0]
来获取此值。
- a_value()¶
返回 RGB565 LAB A 通道阈值值(介于 -128 到 127 之间)。
您也可以对该对象执行
[1]
来获取此值。
- b_value()¶
返回 RGB565 LAB B 通道阈值值(介于 -128 到 127 之间)。
您也可以对该对象执行
[2]
来获取此值。
类 Statistics – 统计对象¶
百分位对象由 histogram.get_statistics()
或 Image.get_statistics()
返回。
灰度统计有一个通道。使用非 l_*
、a_*
和 b_*
方法。
RGB565 统计有三个通道。使用 l_*
、a_*
和 b_*
方法。
- class image.statistics¶
请调用
histogram.get_statistics()
或Image.get_statistics()
来创建此对象。- mean()¶
返回灰度均值(0-255) (int)。
您也可以对该对象执行
[0]
来获取此值。
- median()¶
返回灰度中位数(0-255) (int)。
您也可以对该对象执行
[1]
来获取此值。
- mode()¶
返回灰度模式(0-255) (int)。
您也可以对该对象执行
[2]
来获取此值。
- stdev()¶
返回灰度标准差(0-255) (int)。
您也可以对该对象执行
[3]
来获取此值。
- min()¶
返回灰度最小值(0-255) (int)。
您也可以对该对象执行
[4]
来获取此值。
- max()¶
返回灰度最大值(0-255) (int)。
您也可以对该对象执行
[5]
来获取此值。
- lq()¶
返回灰度下四分位数(0-255) (int)。
您也可以对该对象执行
[6]
来获取此值。
- uq()¶
返回灰度上四分位数(0-255) (int)。
您也可以对该对象执行
[7]
来获取此值。
- l_mean()¶
返回 RGB565 LAB L 均值(0-255)(int)。
您也可以对该对象执行
[0]
来获取此值。
- l_median()¶
返回 RGB565 LAB L 中位数(0-255)(int)。
您也可以对该对象执行
[1]
来获取此值。
- l_mode()¶
返回 RGB565 LAB L 模式(0-255)(int)。
您也可以对该对象执行
[2]
来获取此值。
- l_stdev()¶
返回 RGB565 LAB L 标准差(0-255)(int)。
您也可以对该对象执行
[3]
来获取此值。
- l_min()¶
返回 RGB565 LAB L 最小值(0-255)(int)。
您也可以对该对象执行
[4]
来获取此值。
- l_max()¶
返回 RGB565 LAB L 最大值(0-255)(int)。
您也可以对该对象执行
[5]
来获取此值。
- l_lq()¶
返回 RGB565 LAB L 下四分位数(0-255)(int)。
您也可以对该对象执行
[6]
来获取此值。
- l_uq()¶
返回 RGB565 LAB L 上四分位数(0-255)(int)。
您也可以对该对象执行
[7]
来获取此值。
- a_mean()¶
返回 RGB565 LAB A 均值(0-255)(int)。
您也可以对该对象执行
[8]
来获取此值。
- a_median()¶
返回 RGB565 LAB A 中位数(0-255)(int)。
您也可以对该对象执行
[9]
来获取此值。
- a_mode()¶
返回 RGB565 LAB A 模式(0-255)(int)。
您也可以对该对象执行
[10]
来获取此值。
- a_stdev()¶
返回 RGB565 LAB A 标准差(0-255)(int)。
您也可以对该对象执行
[11]
来获取此值。
- a_min()¶
返回 RGB565 LAB A 最小值(0-255)(int)。
您也可以对该对象执行
[12]
来获取此值。
- a_max()¶
返回 RGB565 LAB A 最大值(0-255)(int)。
您也可以对该对象执行
[13]
来获取此值。
- a_lq()¶
返回 RGB565 LAB A 下四分位数(0-255)(int)。
您也可以对该对象执行
[14]
来获取此值。
- a_uq()¶
返回 RGB565 LAB A 上四分位数(0-255)(int)。
您也可以对该对象执行
[15]
来获取此值。
- b_mean()¶
返回 RGB565 LAB B 均值(0-255)(int)。
您也可以对该对象执行
[16]
来获取此值。
- b_median()¶
返回 RGB565 LAB B 中位数(0-255)(int)。
您也可以对该对象执行
[17]
来获取此值。
- b_mode()¶
返回 RGB565 LAB B 模式(0-255)(int)。
您也可以对该对象执行
[18]
来获取此值。
- b_stdev()¶
返回 RGB565 LAB B 标准差(0-255)(int)。
您也可以对该对象执行
[19]
来获取此值。
- b_min()¶
返回 RGB565 LAB B 最小值(0-255)(int)。
您也可以对该对象执行
[20]
来获取此值。
- b_max()¶
返回 RGB565 LAB B 最大值(0-255)(int)。
您也可以对该对象执行
[21]
来获取此值。
- b_lq()¶
返回 RGB565 LAB B 下四分位数(0-255)(int)。
您也可以对该对象执行
[22]
来获取此值。
- b_uq()¶
返回 RGB565 LAB B 上四分位数(0-255)(int)。
您也可以对该对象执行
[23]
来获取此值。
类 Blob – Blob 对象¶
Blob 对象由 Image.find_blobs()
返回。
- class image.blob¶
请调用
Image.find_blobs()
来创建此对象。- corners()¶
返回对象的 4 个角的 4 个 (x,y) 元组的列表。角始终按顺时针顺序返回,从左上角开始。
- min_corners()¶
返回对象的最小区域矩形的 4 个角的 4 个 (x,y) 元组的列表。与
blob.corners()
不同,最小区域矩形的角不一定在 blob 上。
- rect()¶
返回一个矩形元组 (x, y, w, h),可用于其他
image
方法,如Image.draw_rectangle()
,表示 blob 的边界框。
- x()¶
返回 blob 的边界框 x 坐标(int)。
您也可以对该对象执行
[0]
来获取此值。
- y()¶
返回 blob 的边界框 y 坐标(int)。
您也可以对该对象执行
[1]
来获取此值。
- w()¶
返回 blob 的边界框 w 坐标(int)。
您也可以对该对象执行
[2]
来获取此值。
- h()¶
返回 blob 的边界框 h 坐标(int)。
您也可以对该对象执行
[3]
来获取此值。
- pixels()¶
返回属于此 blob 的像素数(int)。
您也可以对该对象执行
[4]
来获取此值。
- cx()¶
返回 blob 的质心 x 位置(int)。
您也可以对该对象执行
[5]
来获取此值。
- cxf()¶
返回 blob 的质心 x 位置(float)。
- cy()¶
返回 blob 的质心 y 位置(int)。
您也可以对该对象执行
[6]
来获取此值。
- cyf()¶
返回 blob 的质心 y 位置(float)。
- rotation()¶
返回 blob 的旋转弧度(float)。如果 blob 像铅笔或笔,这个值将在 0-180 度之间独一无二。如果 blob 是圆形,这个值是没有用的。
您也可以对该对象执行
[7]
来获取此值。
- rotation_deg()¶
返回 blob 的旋转角度(度)。
- rotation_rad()¶
返回 blob 的旋转角度(弧度)。此方法比
blob.rotation()
更具描述性。
- code()¶
返回一个具有每个颜色阈值的位设置的 32 位二进制数字,该颜色阈值是此 blob 的一部分。例如,如果您传递了
Image.find_blobs()
来查找三个颜色阈值,那么可能会为该 blob 设置位 0/1/2。请注意,除非Image.find_blobs()
以merge=True
调用,否则每个 blob 只会设置一个位。然后,可能会将具有不同颜色阈值的多个 blob 合并在一起。您可以将此方法与多个阈值一起使用,以实现颜色编码跟踪。您也可以对该对象执行
[8]
来获取此值。
- count()¶
返回合并到此 blob 中的 blob 数量。除非您以
merge=True
调用了Image.find_blobs()
,否则为 1。您也可以对该对象执行
[9]
来获取此值。
- perimeter()¶
返回此 blob 周长上的像素数。
- roundness()¶
返回介于 0 和 1 之间的值,表示对象的圆度。圆将是 1。
- elongation()¶
返回介于 0 和 1 之间的值,表示对象的长度(非圆)。线将是 1。
- area()¶
返回 blob 周围边界框的面积(w * h)。
- density()¶
返回 blob 的密度比率。这是 blob 中的像素数除以其边界框区域。低密度比率通常意味着对象的锁定不太好。结果在 0 到 1 之间。
- extent()¶
blob.density()
的别名。
- compactness()¶
类似于
blob.density()
,但是使用 blob 的周长来测量对象的密度,因此更准确。结果在 0 到 1 之间。
- solidity()¶
类似于
blob.density()
,但是使用最小区域旋转矩形与边界矩形来测量密度。结果在 0 到 1 之间。
- convexity()¶
返回介于 0 和 1 之间的值,表示对象的凸度。正方形将是 1。
- x_hist_bins()¶
返回 blob 所有列的 x 轴直方图。bin 值在 0 到 1 之间缩放。
- y_hist_bins()¶
返回 blob 所有行的 y 轴直方图。bin 值在 0 到 1 之间缩放。
- major_axis_line()¶
返回可以用
Image.draw_line()
绘制的主轴线元组 (x1, y1, x2, y2)(通过最小区域矩形的最长边)。
- minor_axis_line()¶
返回可以用
Image.draw_line()
绘制的次轴线元组 (x1, y1, x2, y2)(通过最小区域矩形的最短边)。
- enclosing_circle()¶
返回可以用
Image.draw_circle()
绘制的圆元组 (x, y, r)(包围 blob 的最小区域矩形的圆)。
- enclosed_ellipse()¶
返回可以用
Image.draw_ellipse()
绘制的椭圆元组 (x, y, rx, ry, rotation)(适合于 blob 的最小区域矩形内部的椭圆)。
类 Line – Line 对象¶
Line 对象由 Image.find_lines()
、Image.find_line_segments()
或 Image.get_regression()
返回。
- class image.line¶
请调用
Image.find_lines()
、Image.find_line_segments()
或Image.get_regression()
来创建此对象。- line()¶
返回一个线元组 (x1, y1, x2, y2),可用于其他
image
方法,如Image.draw_line()
。
- x1()¶
返回线的 p1 x 分量。
您也可以对该对象执行
[0]
来获取此值。
- y1()¶
返回线的 p1 y 分量。
您也可以对该对象执行
[1]
来获取此值。
- x2()¶
返回线的 p2 x 分量。
您也可以对该对象执行
[2]
来获取此值。
- y2()¶
返回线的 p2 y 分量。
您也可以对该对象执行
[3]
来获取此值。
- length()¶
返回线的长度:sqrt(((x2-x1)^2) + ((y2-y1)^2)。
您也可以对该对象执行
[4]
来获取此值。
- magnitude()¶
通过霍夫变换返回直线的幅度。
您也可以对该对象执行
[5]
来获取此值。
- theta()¶
通过霍夫变换返回线的角度 - (0 - 179) 度。
您也可以对该对象执行
[7]
来获取此值。
- rho()¶
返回线的霍夫变换中的 rho 值。
您也可以对该对象执行
[8]
来获取此值。
class Circle – Circle 对象¶
Circle 对象由 Image.find_circles()
返回。
类 Rect – 矩形对象¶
Rect 对象由 Image.find_rects()
返回。
- class image.rect¶
请调用
Image.find_rects()
来创建此对象。- corners()¶
返回对象的 4 个角的 4 个 (x,y) 元组的列表。角始终按顺时针顺序返回,从左上角开始。
- rect()¶
返回一个矩形元组 (x, y, w, h),可用于其他
image
方法,如Image.draw_rectangle()
,表示 rect 的边界框。
- x()¶
返回矩形的左上角的 x 位置。
您也可以对该对象执行
[0]
来获取此值。
- y()¶
返回矩形的左上角的 y 位置。
您也可以对该对象执行
[1]
来获取此值。
- w()¶
返回矩形的宽度。
您也可以对该对象执行
[2]
来获取此值。
- h()¶
返回矩形的高度。
您也可以对该对象执行
[3]
来获取此值。
- magnitude()¶
返回矩形的幅度。
您也可以对该对象执行
[4]
来获取此值。
类 QRCode – QRCode 对象¶
QRCode 对象由 Image.find_qrcodes()
返回。
- class image.qrcode¶
请调用
Image.find_qrcodes()
来创建此对象。- corners()¶
返回对象的 4 个角的 4 个 (x,y) 元组的列表。角始终按顺时针顺序返回,从左上角开始。
- rect()¶
返回一个矩形元组 (x, y, w, h),可用于其他
image
方法,如Image.draw_rectangle()
,表示 qrcode 的边界框。
- x()¶
返回 qrcode 的边界框 x 坐标(int)。
您也可以对该对象执行
[0]
来获取此值。
- y()¶
返回 qrcode 的边界框 y 坐标(int)。
您也可以对该对象执行
[1]
来获取此值。
- w()¶
返回 qrcode 的边界框 w 坐标(int)。
您也可以对该对象执行
[2]
来获取此值。
- h()¶
返回 qrcode 的边界框 h 坐标(int)。
您也可以对该对象执行
[3]
来获取此值。
- payload()¶
返回 qrcode 的有效载荷字符串。例如,URL。
您也可以对该对象执行
[4]
来获取此值。
- version()¶
返回 qrcode 的版本(int)。
您也可以对该对象执行
[5]
来获取此值。
- ecc_level()¶
返回 qrcode 的错误级别( int)。
您也可以对该对象执行
[6]
来获取此值。
- mask()¶
返回到此 qrcode 的掩码(int)。
您也可以对该对象执行
[7]
来获取此值。
- data_type()¶
返回到此 qrcode 的 数据类型(int)。
您也可以对该对象执行
[8]
来获取此值。
- eci()¶
返回 QR 码的 eci(int)。eci 存储了 QR 码中数据字节的编码方式。如果您计划处理包含非标准 ASCII 文本的 QR 码,您需要查看此值。
您也可以对该对象执行
[9]
来获取此值。
- is_numeric()¶
如果 QR 码的数据类型为数字,则返回 True。
- is_alphanumeric()¶
如果 QR 码的数据类型为字母数字,则返回 True。
- is_binary()¶
如果 QR 码的数据类型为二进制,则返回 True。如果您严肃对待处理所有类型的文本,需要检查 eci 是否为 True,以确定数据的文本编码。通常情况下,它只是标准的 ASCII,但它也可能是 UTF8,其中包含一些 2 字节的字符。
- is_kanji()¶
如果 QR 码的数据类型为日文(Kanji),则返回 True。如果是 True,则您需要自行解码字符串,因为日文符号每个字符有 10 位,而 MicroPython 没有支持解析这种类型文本的功能。在这种情况下,负载必须被视为一个大字节数组。
类 AprilTag – AprilTag 对象¶
AprilTag 对象是由 Image.find_apriltags()
返回的。
- class image.apriltag¶
请调用
Image.find_apriltags()
来创建此对象。- corners()¶
返回对象的 4 个角的 4 个 (x,y) 元组的列表。角始终按顺时针顺序返回,从左上角开始。
- rect()¶
返回一个矩形元组 (x, y, w, h),可用于其他
image
方法,如Image.draw_rectangle()
,表示 apriltag 的边界框。
- x()¶
返回 apriltag 的边界框 x 坐标(int)。
您也可以对该对象执行
[0]
来获取此值。
- y()¶
返回 apriltag 的边界框 y 坐标(int)。
您也可以对该对象执行
[1]
来获取此值。
- w()¶
返回 apriltag 的边界框 w 坐标(int)。
您也可以对该对象执行
[2]
来获取此值。
- h()¶
返回 apriltag 的边界框 h 坐标(int)。
您也可以对该对象执行
[3]
来获取此值。
- id()¶
返回 apriltag 的数字 id。
TAG16H5 -> 0 到 29
TAG25H7 -> 0 到 241
TAG25H9 -> 0 到 34
TAG36H10 -> 0 到 2319
TAG36H11 -> 0 到 586
ARTOOLKIT -> 0 到 511
您也可以对该对象执行
[4]
来获取此值。
- family()¶
返回 apriltag 的数字家族。
image.TAG16H5
image.TAG25H7
image.TAG25H9
image.TAG36H10
image.TAG36H11
image.ARTOOLKIT
您也可以对该对象执行
[5]
来获取此值。
- cx()¶
返回 apriltag 的质心 x 位置(int)。
- cxf()¶
返回 apriltag 的质心 x 位置(float)。
您也可以对该对象执行
[6]
来获取此值。
- cy()¶
返回 apriltag 的质心 y 位置(int)。
- cyf()¶
返回 apriltag 的质心 y 位置(float)。
您也可以对该对象执行
[7]
来获取此值。
- rotation()¶
以弧度为单位返回 apriltag 的旋转角度(float)。
您也可以对该对象执行
[8]
来获取此值。
- decision_margin()¶
返回 apriltag 匹配的质量(0.0 - 1.0),其中 1.0 是最佳的。
您也可以对该对象执行
[9]
来获取此值。
- hamming()¶
返回此标签可接受的位错误数。
TAG16H5 -> 0 位错误将被接受
TAG25H7 -> 最多可接受 1 位错误
TAG25H9 -> 最多可接受 3 位错误
TAG36H10 -> 最多可接受 3 位错误
TAG36H11 -> 最多可接受 4 位错误
ARTOOLKIT -> 0 位错误将被接受
您也可以对该对象执行
[10]
来获取此值。
- goodness()¶
返回 apriltag 图像的质量(0.0 - 1.0),其中 1.0 是最佳的。
备注
目前此值始终为 0.0。我们可能会在未来启用称为 “标签细化” 的功能,以便检测小型 apriltags。但是,该功能目前会将帧速率降至低于 1 FPS。
您也可以对该对象执行
[11]
来获取此值。
- x_translation()¶
返回从相机到 apriltag 的 X 方向的未知单位的平移。
此方法对于确定 apriltag 相对于相机的位置很有用。但是,apriltag 的大小、所使用的镜头等等都会影响实际确定 X 单位是什么。为了方便起见,我们建议您使用查找表将此方法的输出转换为对您的应用程序有用的内容。
请注意,这是从左到右的方向。
您也可以对该对象执行
[12]
来获取此值。
- y_translation()¶
返回从相机到 apriltag 的 Y 方向的未知单位的平移。
此方法对于确定 apriltag 相对于相机的位置很有用。但是,apriltag 的大小、所使用的镜头等等都会影响实际确定 Y 单位是什么。为了方便起见,我们建议您使用查找表将此方法的输出转换为对您的应用程序有用的内容。
请注意,这是从上到下的方向。
您也可以对该对象执行
[13]
来获取此值。
- z_translation()¶
以未知单位返回摄像机在 Z 方向的平移量。
此方法对于确定 apriltag 相对于相机的位置很有用。但是,apriltag 的大小、所使用的镜头等等都会影响实际确定 Z 单位是什么。为了方便起见,我们建议您使用查找表将此方法的输出转换为对您的应用程序有用的内容。
请注意,这是从前到后的方向。
您也可以对该对象执行
[14]
来获取此值。
- x_rotation()¶
返回 apriltag 在 X 平面上以弧度为单位的旋转角度。例如,在查看标签时将相机从左向右移动。
您也可以对该对象执行
[15]
来获取此值。
- y_rotation()¶
返回 apriltag 在 Y 平面上以弧度为单位的旋转角度。例如,在查看标签时将相机从上向下移动。
您也可以对该对象执行
[16]
来获取此值。
- z_rotation()¶
返回 apriltag 在 Z 平面上以弧度为单位的旋转角度。例如,直接旋转相机并直视标签。
请注意,这只是
apriltag.rotation()
的重命名版本。您也可以对该对象执行
[17]
来获取此值。
类 DataMatrix – DataMatrix 对象¶
DataMatrix 对象是由 Image.find_datamatrices()
返回的。
- class image.datamatrix¶
请调用
Image.find_datamatrices()
来创建此对象。- corners()¶
返回对象的 4 个角的 4 个 (x,y) 元组的列表。角始终按顺时针顺序返回,从左上角开始。
- rect()¶
返回一个矩形元组 (x, y, w, h),可用于其他
image
方法,如Image.draw_rectangle()
,表示 datamatrix 的边界框。
- x()¶
返回 datamatrix 的边界框 x 坐标(int)。
您也可以对该对象执行
[0]
来获取此值。
- y()¶
返回 datamatrix 的边界框 y 坐标(int)。
您也可以对该对象执行
[1]
来获取此值。
- w()¶
返回 datamatrix 的边界框 w 坐标(int)。
您也可以对该对象执行
[2]
来获取此值。
- h()¶
返回 datamatrix 的边界框 h 坐标(int)。
您也可以对该对象执行
[3]
来获取此值。
- payload()¶
返回 datamatrix 的有效负载字符串。例如,字符串。
您也可以对该对象执行
[4]
来获取此值。
- rotation()¶
返回 datamatrix 的弧度旋转角度(float)。
您也可以对该对象执行
[5]
来获取此值。
- rows()¶
返回数据矩阵中的行数(int)。
您也可以对该对象执行
[6]
来获取此值。
- columns()¶
返回数据矩阵中的列数(int)。
您也可以对该对象执行
[7]
来获取此值。
- capacity()¶
返回此数据矩阵中可容纳的字符数。
您也可以对该对象执行
[8]
来获取此值。
- padding()¶
返回此数据矩阵中未使用的字符数。
您也可以对该对象执行
[9]
来获取此值。
类 BarCode – BarCode 对象¶
BarCode 对象是由 Image.find_barcodes()
返回的。
- class image.barcode¶
请调用
Image.find_barcodes()
来创建此对象。- corners()¶
返回对象的 4 个角的 4 个 (x,y) 元组的列表。角始终按顺时针顺序返回,从左上角开始。
- rect()¶
返回一个矩形元组 (x, y, w, h),可用于其他
image
方法,如Image.draw_rectangle()
,表示 barcode 的边界框。
- x()¶
返回 barcode 的边界框 x 坐标(int)。
您也可以对该对象执行
[0]
来获取此值。
- y()¶
返回 barcode 的边界框 y 坐标(int)。
您也可以对该对象执行
[1]
来获取此值。
- w()¶
返回 barcode 的边界框 w 坐标(int)。
您也可以对该对象执行
[2]
来获取此值。
- h()¶
返回 barcode 的边界框 h 坐标(int)。
您也可以对该对象执行
[3]
来获取此值。
- payload()¶
返回 barcode 的有效负载字符串。例如,数字。
您也可以对该对象执行
[4]
来获取此值。
- type()¶
返回 barcode 的类型枚举(int)。
您也可以对该对象执行
[5]
来获取此值。image.EAN2
image.EAN5
image.EAN8
image.UPCE
image.ISBN10
image.UPCA
image.EAN13
image.ISBN13
image.I25
image.DATABAR
image.DATABAR_EXP
image.CODABAR
image.CODE39
image.PDF417 - 未来(例如,当前不起作用)。
image.CODE93
image.CODE128
- rotation()¶
返回 barcode 的弧度旋转角度(float)。
您也可以对该对象执行
[6]
来获取此值。
- quality()¶
返回此 barcode 在图像中被检测到的次数(int)。
扫描条形码时,每次新的扫描线都可以解码相同的条形码。对于一个条形码来说,每次这样的情况发生,此值都会递增…
您也可以对该对象执行
[7]
来获取此值。
类 Displacement – Displacement 对象¶
Displacement 对象是由 Image.find_displacement()
返回的。
- class image.displacement¶
请调用
Image.find_displacement()
来创建此对象。- x_translation()¶
返回两个图像之间的 x 轴方向的像素平移。这是次像素精度的,因此它是一个浮点数。
您也可以对该对象执行
[0]
来获取此值。
- y_translation()¶
返回两个图像之间的 y 轴方向的像素平移。这是次像素精度的,因此它是一个浮点数。
您也可以对该对象执行
[1]
来获取此值。
- rotation()¶
返回两个图像之间的弧度旋转角度。
您也可以对该对象执行
[2]
来获取此值。
- scale()¶
返回两个图像之间的缩放变化。
您也可以对该对象执行
[3]
来获取此值。
- response()¶
返回两个图像之间的位移匹配结果的质量。在 0-1 之间。响应值小于 0.1 的
displacement
对象可能是噪声。您也可以对该对象执行
[4]
来获取此值。
类 kptmatch – 关键点对象¶
关键点对象是由 image.match_descriptor()
返回的用于关键点匹配的对象。
- class image.kptmatch¶
请调用
image.match_descriptor()
来创建此对象。- rect()¶
返回一个矩形元组 (x, y, w, h),可用于其他
image
方法,如Image.draw_rectangle()
,表示 kptmatch 的边界框。
- cx()¶
返回 kptmatch 的质心 x 位置(int)。
您也可以对该对象执行
[0]
来获取此值。
- cy()¶
返回 kptmatch 的质心 y 位置(int)。
您也可以对该对象执行
[1]
来获取此值。
- x()¶
返回 kptmatch 的边界框 x 坐标(int)。
您也可以对该对象执行
[2]
来获取此值。
- y()¶
返回 kptmatch 的边界框 y 坐标(int)。
您也可以对该对象执行
[3]
来获取此值。
- w()¶
返回 kptmatch 的边界框 w 坐标(int)。
您也可以对该对象执行
[4]
来获取此值。
- h()¶
返回 kptmatch 的边界框 h 坐标(int)。
您也可以对该对象执行
[5]
来获取此值。
- count()¶
返回匹配的关键点数(int)。
您也可以对该对象执行
[6]
来获取此值。
- theta()¶
返回关键点的估计旋转角度(int)。
您也可以对该对象执行
[7]
来获取此值。
- match()¶
返回匹配关键点的 (x,y) 元组列表。
您也可以对该对象执行
[8]
来获取此值。
类 ImageIO – ImageIO 对象¶
ImageIO 对象允许您以原生形式读取/写入 OpenMV Image 对象到磁盘或内存中。此类提供了加载/存储图像的快速读/写随机访问。
- class image.ImageIO(path, mode)¶
创建一个 ImageIO 对象。
如果
path
是磁盘上的文件名,则该文件将在mode
为'r'
时打开以进行读取,如果mode
为'w'
时打开以进行写入。path
也可以是一个 3 值元组 (w, h, bpp) 用于图像的内存存储。在这种情况下,mode
是内存中存储图像的数量。请注意,在分配了内存后,不允许内存存储缓冲区增长。对于二进制图像,使用 0 作为bpp
值,对于灰度图像使用 1,对于 rgb565 图像使用 2。- type()¶
如果
ImageIO
对象是FILE_STREAM
或MEMORY_STREAM
则返回。
- count()¶
返回存储的帧数。
- offset()¶
返回图像索引偏移量。
- version()¶
返回对象的版本,如果是
FILE_STREAM
。MEMORY_STREAM
版本是none
。
- buffer_size()¶
返回单个缓冲区中帧所分配的对象的大小。
buffer_size() * count() == size()
- size()¶
返回 ImageIO 对象使用的磁盘或内存中的字节数。
- write(img)¶
将新图像
img
写入 ImageIO 对象。对于磁盘上的 ImageIO 对象,随着添加新图像,文件将增长。对于内存中的 ImageIO 对象,这只是将图像写入当前预分配的插槽,然后转到下一个插槽。返回 ImageIO 对象。
- read([copy_to_fb=True[, loop=True[, pause=True]]])¶
从 ImageIO 对象返回图像对象。如果
copy_to_fb
为 False,则新图像将分配在MicroPython 堆上。但是,MicroPython 堆有限,如果耗尽,可能没有空间来存储新图像。相反,将copy_to_fb
设置为 True 可将帧缓冲区设置为新图像,使该函数的工作方式与sensor.snapshot()
类似。如果
loop
为 True,则会自动导致ImageIO 对象从图像流的末尾查找开头。如果
pause
为True,则该方法在写入时暂停先前记录的毫秒数,以匹配捕获图像数据的原始帧速率。
- seek(offset)¶
查找ImageIO对象中的图像槽编号为
offset
的位置。对于磁盘上或内存中的对象都适用。
- sync()¶
将所有待写入磁盘的ImageIO对象数据写出。
- close()¶
关闭ImageIO对象。对于内存中的对象,这将释放分配的空间;对于磁盘文件,这将关闭文件并写出所有元数据。
- FILE_STREAM¶
ImageIO对象是在文件上打开的。
- MEMORY_STREAM¶
ImageIO对象是在内存中打开的。
类 Image – Image 对象¶
图像对象是机器视觉操作的基本对象。
- class image.Image(path[, buffer=None[, copy_to_fb=False]])¶
从
path
处的文件创建一个新的图像对象。或者,您可以传递width
、height
,以及任何图像格式值(如image.GRAYSCALE
)来创建新的空白图像对象(初始化为0 - 黑色)。支持bmp/pgm/ppm/jpg/jpeg/png图像文件。
如果
copy_to_fb
为True,则将图像直接加载到帧缓冲区中,从而可以加载大型图像。如果为False,则将图像加载到MicroPython的堆中,该堆比帧缓冲区小得多。buffer
可以设置为任何缓冲区对象,以将其用作图像的数据源。例如,如果您想要从JPEGbytes()
或bytearray()
对象创建JPEG图像,您可以传递JPEG字节流,以及设置width
、height
、image.JPEG
以创建JPEG图像。最后,请注意,图像本身也是缓冲区对象。图像支持”[]” 表示法。执行
image[index] = 8/16位值
以分配图像像素,或执行image[index]
以获取图像像素,该像素将是灰度/贝叶斯图像的8位值或RGB565/YUV图像的16位值。二进制图像返回1位值。对于JPEG图像,”[]” 允许您以字节数组的形式访问压缩的JPEG图像blob。但是,由于JPEG图像是压缩的字节流,因此对数据数组的读写是不透明的。
图像还支持读缓冲区操作。您可以将图像传递给各种MicroPython函数,就好像图像是字节数组对象一样。特别是,如果您想要传输图像,您可以只将其传递给UART/SPI/I2C写函数,以便自动传输。
- width()¶
返回图像的宽度(以像素为单位)。
- height()¶
返回图像的高度(以像素为单位)。
- format()¶
对于灰度图像,返回
image.GRAYSCALE
;对于RGB565图像,返回image.RGB565
;对于贝叶斯模式图像,返回image.BAYER
;对于JPEG图像,返回image.JPEG
。
- size()¶
返回图像的大小(以字节为单位)。
- bytearray()¶
返回一个指向图像数据的
bytearray
对象,用于字节级读/写访问。备注
当传递给需要
bytes
类似对象的MicroPython驱动程序时,图像对象会自动转换为bytes
对象。这是只读访问。调用bytearray()
以获取读/写访问权限。
- get_pixel(x, y[, rgbtuple])¶
对于灰度图像:返回位置(x,y)处的灰度像素值。对于RGB565图像:返回位置(x,y)处的RGB888像素元组(r,g,b)。对于贝叶斯模式图像:返回位置(x,y)处的像素值。
如果
x
或y
在图像外部,则返回None。x
和y
可以单独传递,也可以作为元组传递(例如,(x,y)
)。rgbtuple
若为True,则此方法返回RGB888元组。否则,此方法返回底层像素的整数值。例如,对于RGB565图像,此方法返回RGB565值。对于RGB565图像,默认为True,否则为False。不支持压缩图像。
备注
Image.get_pixel()
和Image.set_pixel()
是唯一允许您操作 Bayer 模式图像的方法。Bayer 模式图像是字面意义上的图像,其中图像中偶数行的像素为 R/G/R/G 等,奇数行的像素为 G/B/G/B 等。每个像素为 8 位。如果调用此方法时设置了rgbtuple
,则Image.get_pixel()
将在该像素位置对源图像进行 Bayer 解码,并返回该像素位置的有效 RGB888 元组。
- set_pixel(x, y, pixel)¶
对于灰度图像:将位置 (x, y) 处的像素设置为灰度值
pixel
。对于RGB565图像:将位置 (x, y) 处的像素设置为 RGB888 元组 (r, g, b)pixel
。对于 Bayer 模式图像:将位置 (x, y) 处的像素值设置为值pixel
。返回图像对象,以便您可以使用
.
符号调用另一个方法。x
和y
可以单独传递,也可以作为元组传递(例如,(x,y)
)。pixel
可以是 RGB888 元组 (r, g, b) 或底层像素值(即 RGB565 图像的 RGB565 值或灰度图像的 8 位值)。不支持压缩图像。
备注
Image.get_pixel()
和Image.set_pixel()
是唯一允许您操作 Bayer 模式图像的方法。Bayer 模式图像是字面意义上的图像,其中图像中偶数行的像素为 R/G/R/G 等,奇数行的像素为 G/B/G/B 等。每个像素为 8 位。如果以 RGB888 元组调用此方法,则提取该 RGB888 元组的灰度值,并将其设置为像素位置。
- mean_pool(x_div, y_div)¶
查找图像中
x_div
*y_div
个方块的均值,并返回由每个方块的均值组成的修改后的图像。此方法允许您快速将图像缩小到原位。
不支持压缩图像或 Bayer 图像。
- mean_pooled(x_div, y_div)¶
查找图像中
x_div
*y_div
个方块的均值,并返回由每个方块的均值组成的新图像。此方法允许您创建缩小的图像副本。
不支持压缩图像或 Bayer 图像。
- midpoint_pool(x_div, y_div[, bias=0.5])¶
查找图像中
x_div
*y_div
个方块的中点,并返回由每个方块的中点组成的修改后的图像。bias
为 0.0 时返回每个区域的最小值,而bias
为 1.0 时返回每个区域的最大值。此方法允许您快速将图像缩小到原位。
不支持压缩图像或 Bayer 图像。
- midpoint_pooled(x_div, y_div[, bias=0.5])¶
查找图像中
x_div
*y_div
个方块的中点,并返回由每个方块的中点组成的新图像。bias
为 0.0 时返回每个区域的最小值,而bias
为 1.0 时返回每个区域的最大值。此方法允许您创建缩小的图像副本。
不支持压缩图像或 Bayer 图像。
- to_bitmap([x_scale=1.0[, y_scale=1.0[, roi=None[, rgb_channel=-1[, alpha=256[, color_palette=None[, alpha_palette=None[, hint=0[, copy=False]]]]]]]]])¶
将图像转换为位图图像(每像素1位)。如果
copy
为 False,则此方法将尝试就地修改图像。如果copy
为 True,则此方法将返回在堆上分配的新图像副本。copy
还可以是另一个图像对象,此时此方法将尝试重用该图像对象的存储空间,并将返回一个使用先前图像对象存储空间的新图像对象。在此之后,请不要再使用任何对旧图像对象的引用,因为它们将变得过时。x_scale
控制图像在 x 方向的显示比例(float)。如果此值为负,则图像将水平翻转。注意,如果未指定y_scale
,则它将与x_scale
匹配,以保持纵横比。y_scale
控制图像在 y 方向的显示比例(float)。如果此值为负,则图像将垂直翻转。注意,如果未指定x_scale
,则它将与x_scale
匹配,以保持纵横比。roi
是源图像要绘制的感兴趣区域的矩形元组(x、y、w、h)。这允许您仅提取感兴趣区域中的像素以在目标图像上进行缩放和绘制。rgb_channel
是要从 RGB565 图像中提取(如果传递)并渲染到目标图像上的 RGB 通道(0=R,G=1,B=2)。例如,如果传递rgb_channel=1
,则会提取源 RGB565 图像的绿色通道,并将其以灰度形式绘制到目标图像上。alpha
控制要混合到目标图像中的源图像的程度。256 的值绘制不透明的源图像,而低于 256 的值会在源图像和目标图像之间产生混合。0 表示不对目标图像进行修改。color_palette
如果不是-1
,可以是image.PALETTE_RAINBOW
、image.PALETTE_IRONBOW
,或者总像素 256 的 RGB565 图像,用作对源图像的灰度值进行颜色查找表。如果使用,此操作将在rgb_channel
提取之后应用。alpha_palette
如果不是-1
,可以是总像素256 的 GRAYSCALE 图像,用作调制被绘制到像素级别的源图像的alpha
值的 alpha 调色板,从而允许您根据它们的灰度值精确控制像素的 alpha 值。在 alpha 查找表中的像素值为 255 时是不透明的,小于 255 的任何值都会变得更透明,直到 0。如果使用,此操作将在rgb_channel
提取之后应用。hint
可以是标志的逻辑 OR:image.AREA
:在缩小时使用区域缩放,而不是默认的最近邻插值。image.BILINEAR
:使用双线性缩放,而不是默认的最近邻插值。image.BICUBIC
:使用双三次缩放,而不是默认的最近邻插值。image.CENTER
:将要绘制的图像居中显示。这将在缩放后应用。image.HMIRROR
:水平镜像图像。image.VFLIP
:垂直翻转图像。image.TRANSPOSE
:转置图像(交换 x/y)。image.EXTRACT_RGB_CHANNEL_FIRST
:在缩放之前执行 rgb_channel 提取。image.APPLY_COLOR_PALETTE_FIRST
:在缩放之前应用颜色调色板。image.SCALE_ASPECT_KEEP
:将要绘制的图像缩放以适应显示器内部。image.SCALE_ASPECT_EXPAND
:将要绘制的图像缩放以填充显示器(会导致裁剪)image.SCALE_ASPECT_IGNORE
:将要绘制的图像缩放以填充显示器(会导致拉伸)。image.ROTATE_90
:将图像旋转 90 度(这只是 VFLIP | TRANSPOSE)。image.ROTATE_180
:将图像旋转 180 度(这只是 HMIRROR | VFLIP)。image.ROTATE_270
:将图像旋转 270 度(这只是 HMIRROR | TRANSPOSE)。
备注
位图图像类似于灰度图像,只有两个像素值 - 0 和 1。此外,位图图像被打包,使得它们只存储每像素 1 位,使它们非常小。OpenMV 图像库允许在所有可以使用
sensor.GRAYSCALE
和sensor.RGB565
图像的地方使用位图图像。但是,在位图图像上进行的许多操作都没有任何意义,因为位图图像只有 2 个值。OpenMV 建议在操作中使用位图图像作为mask
值,因为它们可以很容易地放在 MicroPython 堆中。最后,当应用到sensor.GRAYSCALE
或sensor.RGB565
图像时,位图图像像素值 0 和 1 被解释为黑色和白色。该库会自动处理转换。返回图像对象,以便您可以使用
.
符号调用另一个方法。
- to_grayscale([x_scale=1.0[, y_scale=1.0[, roi=None[, rgb_channel=-1[, alpha=256[, color_palette=None[, alpha_palette=None[, hint=0[, copy=False]]]]]]]]])¶
将图像转换为灰度图像(每像素8位)。如果
copy
为False,则此方法将尝试在原地修改图像。如果copy
为True,则此方法将返回在堆上分配的新图像副本。copy
还可以是另一个图像对象,此时此方法将尝试重用该图像对象的存储空间,并将返回一个使用先前图像对象存储空间的新图像对象。在此之后,请不要再使用任何对旧图像对象的引用,因为它们将变得过时。x_scale
控制图像在 x 方向的显示比例(float)。如果此值为负,则图像将水平翻转。注意,如果未指定y_scale
,则它将与x_scale
匹配,以保持纵横比。y_scale
控制图像在 y 方向的显示比例(float)。如果此值为负,则图像将垂直翻转。注意,如果未指定x_scale
,则它将与x_scale
匹配,以保持纵横比。roi
是源图像要绘制的感兴趣区域的矩形元组(x、y、w、h)。这允许您仅提取感兴趣区域中的像素以在目标图像上进行缩放和绘制。rgb_channel
是要从 RGB565 图像中提取(如果传递)并渲染到目标图像上的 RGB 通道(0=R,G=1,B=2)。例如,如果传递rgb_channel=1
,则会提取源 RGB565 图像的绿色通道,并将其以灰度形式绘制到目标图像上。alpha
控制要混合到目标图像中的源图像的程度。256 的值绘制不透明的源图像,而低于 256 的值会在源图像和目标图像之间产生混合。0 表示不对目标图像进行修改。color_palette
如果不是-1
,可以是image.PALETTE_RAINBOW
、image.PALETTE_IRONBOW
,或者总像素 256 的 RGB565 图像,用作对源图像的灰度值进行颜色查找表。如果使用,此操作将在rgb_channel
提取之后应用。alpha_palette
如果不是-1
,可以是总像素256 的 GRAYSCALE 图像,用作调制被绘制到像素级别的源图像的alpha
值的 alpha 调色板,从而允许您根据它们的灰度值精确控制像素的 alpha 值。在 alpha 查找表中的像素值为 255 时是不透明的,小于 255 的任何值都会变得更透明,直到 0。如果使用,此操作将在rgb_channel
提取之后应用。hint
可以是标志的逻辑 OR:image.AREA
:在缩小时使用区域缩放,而不是默认的最近邻插值。image.BILINEAR
:使用双线性缩放,而不是默认的最近邻插值。image.BICUBIC
:使用双三次缩放,而不是默认的最近邻插值。image.CENTER
:将要绘制的图像居中显示。这将在缩放后应用。image.HMIRROR
:水平镜像图像。image.VFLIP
:垂直翻转图像。image.TRANSPOSE
:转置图像(交换 x/y)。image.EXTRACT_RGB_CHANNEL_FIRST
:在缩放之前执行 rgb_channel 提取。image.APPLY_COLOR_PALETTE_FIRST
:在缩放之前应用颜色调色板。image.SCALE_ASPECT_KEEP
:将要绘制的图像缩放以适应显示器内部。image.SCALE_ASPECT_EXPAND
:将要绘制的图像缩放以填充显示器(会导致裁剪)image.SCALE_ASPECT_IGNORE
:将要绘制的图像缩放以填充显示器(会导致拉伸)。image.ROTATE_90
:将图像旋转 90 度(这只是 VFLIP | TRANSPOSE)。image.ROTATE_180
:将图像旋转 180 度(这只是 HMIRROR | VFLIP)。image.ROTATE_270
:将图像旋转 270 度(这只是 HMIRROR | TRANSPOSE)。
返回图像对象,以便您可以使用
.
符号调用另一个方法。
- to_rgb565([x_scale=1.0[, y_scale=1.0[, roi=None[, rgb_channel=-1[, alpha=256[, color_palette=None[, alpha_palette=None[, hint=0[, copy=False]]]]]]]]])¶
将图像转换为RGB565图像(每像素16位)。如果
copy
为False,则此方法将尝试在原地修改图像。如果copy
为True,则此方法将返回在堆上分配的新图像副本。copy
还可以是另一个图像对象,此时此方法将尝试重用该图像对象的存储空间,并将返回一个使用先前图像对象存储空间的新图像对象。在此之后,请不要再使用任何对旧图像对象的引用,因为它们将变得过时。x_scale
控制图像在 x 方向的显示比例(float)。如果此值为负,则图像将水平翻转。注意,如果未指定y_scale
,则它将与x_scale
匹配,以保持纵横比。y_scale
控制图像在 y 方向的显示比例(float)。如果此值为负,则图像将垂直翻转。注意,如果未指定x_scale
,则它将与x_scale
匹配,以保持纵横比。roi
是源图像要绘制的感兴趣区域的矩形元组(x、y、w、h)。这允许您仅提取感兴趣区域中的像素以在目标图像上进行缩放和绘制。rgb_channel
是要从 RGB565 图像中提取(如果传递)并渲染到目标图像上的 RGB 通道(0=R,G=1,B=2)。例如,如果传递rgb_channel=1
,则会提取源 RGB565 图像的绿色通道,并将其以灰度形式绘制到目标图像上。alpha
控制要混合到目标图像中的源图像的程度。256 的值绘制不透明的源图像,而低于 256 的值会在源图像和目标图像之间产生混合。0 表示不对目标图像进行修改。color_palette
如果不是-1
,可以是image.PALETTE_RAINBOW
、image.PALETTE_IRONBOW
,或者总像素 256 的 RGB565 图像,用作对源图像的灰度值进行颜色查找表。如果使用,此操作将在rgb_channel
提取之后应用。alpha_palette
如果不是-1
,可以是总像素256 的 GRAYSCALE 图像,用作调制被绘制到像素级别的源图像的alpha
值的 alpha 调色板,从而允许您根据它们的灰度值精确控制像素的 alpha 值。在 alpha 查找表中的像素值为 255 时是不透明的,小于 255 的任何值都会变得更透明,直到 0。如果使用,此操作将在rgb_channel
提取之后应用。hint
可以是标志的逻辑 OR:image.AREA
:在缩小时使用区域缩放,而不是默认的最近邻插值。image.BILINEAR
:使用双线性缩放,而不是默认的最近邻插值。image.BICUBIC
:使用双三次缩放,而不是默认的最近邻插值。image.CENTER
:将要绘制的图像居中显示。这将在缩放后应用。image.HMIRROR
:水平镜像图像。image.VFLIP
:垂直翻转图像。image.TRANSPOSE
:转置图像(交换 x/y)。image.EXTRACT_RGB_CHANNEL_FIRST
:在缩放之前执行 rgb_channel 提取。image.APPLY_COLOR_PALETTE_FIRST
:在缩放之前应用颜色调色板。image.SCALE_ASPECT_KEEP
:将要绘制的图像缩放以适应显示器内部。image.SCALE_ASPECT_EXPAND
:将要绘制的图像缩放以填充显示器(会导致裁剪)image.SCALE_ASPECT_IGNORE
:将要绘制的图像缩放以填充显示器(会导致拉伸)。image.ROTATE_90
:将图像旋转 90 度(这只是 VFLIP | TRANSPOSE)。image.ROTATE_180
:将图像旋转 180 度(这只是 HMIRROR | VFLIP)。image.ROTATE_270
:将图像旋转 270 度(这只是 HMIRROR | TRANSPOSE)。
返回图像对象,以便您可以使用
.
符号调用另一个方法。
- to_rainbow([x_scale=1.0[, y_scale=1.0[, roi=None[, rgb_channel=-1[, alpha=256[, color_palette=image.PALETTE_RAINBOW[, alpha_palette=None[, hint=0[, copy=False]]]]]]]]])¶
将图像转换为RGB565彩虹图像(每像素16位)。如果
copy
为 False,则此方法将尝试就地修改图像。如果copy
为 True,则此方法将返回在堆上分配的新图像副本。copy
还可以是另一个图像对象,此时此方法将尝试重用该图像对象的存储空间,并将返回一个使用先前图像对象存储空间的新图像对象。在此之后,请不要再使用任何对旧图像对象的引用,因为它们将变得过时。x_scale
控制图像在 x 方向的显示比例(float)。如果此值为负,则图像将水平翻转。注意,如果未指定y_scale
,则它将与x_scale
匹配,以保持纵横比。y_scale
控制图像在 y 方向的显示比例(float)。如果此值为负,则图像将垂直翻转。注意,如果未指定x_scale
,则它将与x_scale
匹配,以保持纵横比。roi
是源图像要绘制的感兴趣区域的矩形元组(x、y、w、h)。这允许您仅提取感兴趣区域中的像素以在目标图像上进行缩放和绘制。rgb_channel
是要从 RGB565 图像中提取(如果传递)并渲染到目标图像上的 RGB 通道(0=R,G=1,B=2)。例如,如果传递rgb_channel=1
,则会提取源 RGB565 图像的绿色通道,并将其以灰度形式绘制到目标图像上。alpha
控制要混合到目标图像中的源图像的程度。256 的值绘制不透明的源图像,而低于 256 的值会在源图像和目标图像之间产生混合。0 表示不对目标图像进行修改。color_palette
如果不是-1
,可以是image.PALETTE_RAINBOW
、image.PALETTE_IRONBOW
,或者总像素 256 的 RGB565 图像,用作对源图像的灰度值进行颜色查找表。如果使用,此操作将在rgb_channel
提取之后应用。alpha_palette
如果不是-1
,可以是总像素256 的 GRAYSCALE 图像,用作调制被绘制到像素级别的源图像的alpha
值的 alpha 调色板,从而允许您根据它们的灰度值精确控制像素的 alpha 值。在 alpha 查找表中的像素值为 255 时是不透明的,小于 255 的任何值都会变得更透明,直到 0。如果使用,此操作将在rgb_channel
提取之后应用。hint
可以是标志的逻辑 OR:image.AREA
:在缩小时使用区域缩放,而不是默认的最近邻插值。image.BILINEAR
:使用双线性缩放,而不是默认的最近邻插值。image.BICUBIC
:使用双三次缩放,而不是默认的最近邻插值。image.CENTER
:将要绘制的图像居中显示。这将在缩放后应用。image.HMIRROR
:水平镜像图像。image.VFLIP
:垂直翻转图像。image.TRANSPOSE
:转置图像(交换 x/y)。image.EXTRACT_RGB_CHANNEL_FIRST
:在缩放之前执行 rgb_channel 提取。image.APPLY_COLOR_PALETTE_FIRST
:在缩放之前应用颜色调色板。image.SCALE_ASPECT_KEEP
:将要绘制的图像缩放以适应显示器内部。image.SCALE_ASPECT_EXPAND
:将要绘制的图像缩放以填充显示器(会导致裁剪)image.SCALE_ASPECT_IGNORE
:将要绘制的图像缩放以填充显示器(会导致拉伸)。image.ROTATE_90
:将图像旋转 90 度(这只是 VFLIP | TRANSPOSE)。image.ROTATE_180
:将图像旋转 180 度(这只是 HMIRROR | VFLIP)。image.ROTATE_270
:将图像旋转 270 度(这只是 HMIRROR | TRANSPOSE)。
返回图像对象,以便您可以使用
.
符号调用另一个方法。
- to_ironbow([x_scale=1.0[, y_scale=1.0[, roi=None[, rgb_channel=-1[, alpha=256[, color_palette=image.PALETTE_IRONBOW[, alpha_palette=None[, hint=0[, copy=False]]]]]]]]])¶
将图像转换为RGB565 ironbow图像(每像素16位)。如果
copy
为 False,则此方法将尝试就地修改图像。如果copy
为 True,则此方法将返回在堆上分配的新图像副本。copy
还可以是另一个图像对象,此时此方法将尝试重用该图像对象的存储空间,并将返回一个使用先前图像对象存储空间的新图像对象。在此之后,请不要再使用任何对旧图像对象的引用,因为它们将变得过时。x_scale
控制图像在 x 方向的显示比例(float)。如果此值为负,则图像将水平翻转。注意,如果未指定y_scale
,则它将与x_scale
匹配,以保持纵横比。y_scale
控制图像在 y 方向的显示比例(float)。如果此值为负,则图像将垂直翻转。注意,如果未指定x_scale
,则它将与x_scale
匹配,以保持纵横比。roi
是源图像要绘制的感兴趣区域的矩形元组(x、y、w、h)。这允许您仅提取感兴趣区域中的像素以在目标图像上进行缩放和绘制。rgb_channel
是要从 RGB565 图像中提取(如果传递)并渲染到目标图像上的 RGB 通道(0=R,G=1,B=2)。例如,如果传递rgb_channel=1
,则会提取源 RGB565 图像的绿色通道,并将其以灰度形式绘制到目标图像上。alpha
控制要混合到目标图像中的源图像的程度。256 的值绘制不透明的源图像,而低于 256 的值会在源图像和目标图像之间产生混合。0 表示不对目标图像进行修改。color_palette
如果不是-1
,可以是image.PALETTE_RAINBOW
、image.PALETTE_IRONBOW
,或者总像素 256 的 RGB565 图像,用作对源图像的灰度值进行颜色查找表。如果使用,此操作将在rgb_channel
提取之后应用。alpha_palette
如果不是-1
,可以是总像素256 的 GRAYSCALE 图像,用作调制被绘制到像素级别的源图像的alpha
值的 alpha 调色板,从而允许您根据它们的灰度值精确控制像素的 alpha 值。在 alpha 查找表中的像素值为 255 时是不透明的,小于 255 的任何值都会变得更透明,直到 0。如果使用,此操作将在rgb_channel
提取之后应用。hint
可以是标志的逻辑 OR:image.AREA
:在缩小时使用区域缩放,而不是默认的最近邻插值。image.BILINEAR
:使用双线性缩放,而不是默认的最近邻插值。image.BICUBIC
:使用双三次缩放,而不是默认的最近邻插值。image.CENTER
:将要绘制的图像居中显示。这将在缩放后应用。image.HMIRROR
:水平镜像图像。image.VFLIP
:垂直翻转图像。image.TRANSPOSE
:转置图像(交换 x/y)。image.EXTRACT_RGB_CHANNEL_FIRST
:在缩放之前执行 rgb_channel 提取。image.APPLY_COLOR_PALETTE_FIRST
:在缩放之前应用颜色调色板。image.SCALE_ASPECT_KEEP
:将要绘制的图像缩放以适应显示器内部。image.SCALE_ASPECT_EXPAND
:将要绘制的图像缩放以填充显示器(会导致裁剪)image.SCALE_ASPECT_IGNORE
:将要绘制的图像缩放以填充显示器(会导致拉伸)。image.ROTATE_90
:将图像旋转 90 度(这只是 VFLIP | TRANSPOSE)。image.ROTATE_180
:将图像旋转 180 度(这只是 HMIRROR | VFLIP)。image.ROTATE_270
:将图像旋转 270 度(这只是 HMIRROR | TRANSPOSE)。
返回图像对象,以便您可以使用
.
符号调用另一个方法。
- to_jpeg([x_scale=1.0[, y_scale=1.0[, roi=None[, rgb_channel=-1[, alpha=256[, color_palette=None[, alpha_palette=None[, hint=0[, copy=False]]]]]]]]])¶
将图像转换为JPEG图像。如果
copy
为 False,则此方法将尝试就地修改图像。如果copy
为 True,则此方法将返回在堆上分配的新图像副本。copy
还可以是另一个图像对象,此时此方法将尝试重用该图像对象的存储空间,并将返回一个使用先前图像对象存储空间的新图像对象。在此之后,请不要再使用任何对旧图像对象的引用,因为它们将变得过时。x_scale
控制图像在 x 方向的显示比例(float)。如果此值为负,则图像将水平翻转。注意,如果未指定y_scale
,则它将与x_scale
匹配,以保持纵横比。y_scale
控制图像在 y 方向的显示比例(float)。如果此值为负,则图像将垂直翻转。注意,如果未指定x_scale
,则它将与x_scale
匹配,以保持纵横比。roi
是源图像要绘制的感兴趣区域的矩形元组(x、y、w、h)。这允许您仅提取感兴趣区域中的像素以在目标图像上进行缩放和绘制。rgb_channel
是要从 RGB565 图像中提取(如果传递)并渲染到目标图像上的 RGB 通道(0=R,G=1,B=2)。例如,如果传递rgb_channel=1
,则会提取源 RGB565 图像的绿色通道,并将其以灰度形式绘制到目标图像上。alpha
控制要混合到目标图像中的源图像的程度。256 的值绘制不透明的源图像,而低于 256 的值会在源图像和目标图像之间产生混合。0 表示不对目标图像进行修改。color_palette
如果不是-1
,可以是image.PALETTE_RAINBOW
、image.PALETTE_IRONBOW
,或者总像素 256 的 RGB565 图像,用作对源图像的灰度值进行颜色查找表。如果使用,此操作将在rgb_channel
提取之后应用。alpha_palette
如果不是-1
,可以是总像素256 的 GRAYSCALE 图像,用作调制被绘制到像素级别的源图像的alpha
值的 alpha 调色板,从而允许您根据它们的灰度值精确控制像素的 alpha 值。在 alpha 查找表中的像素值为 255 时是不透明的,小于 255 的任何值都会变得更透明,直到 0。如果使用,此操作将在rgb_channel
提取之后应用。hint
可以是标志的逻辑 OR:image.AREA
:在缩小时使用区域缩放,而不是默认的最近邻插值。image.BILINEAR
:使用双线性缩放,而不是默认的最近邻插值。image.BICUBIC
:使用双三次缩放,而不是默认的最近邻插值。image.CENTER
:将要绘制的图像居中显示。这将在缩放后应用。image.HMIRROR
:水平镜像图像。image.VFLIP
:垂直翻转图像。image.TRANSPOSE
:转置图像(交换 x/y)。image.EXTRACT_RGB_CHANNEL_FIRST
:在缩放之前执行 rgb_channel 提取。image.APPLY_COLOR_PALETTE_FIRST
:在缩放之前应用颜色调色板。image.SCALE_ASPECT_KEEP
:将要绘制的图像缩放以适应显示器内部。image.SCALE_ASPECT_EXPAND
:将要绘制的图像缩放以填充显示器(会导致裁剪)image.SCALE_ASPECT_IGNORE
:将要绘制的图像缩放以填充显示器(会导致拉伸)。image.ROTATE_90
:将图像旋转 90 度(这只是 VFLIP | TRANSPOSE)。image.ROTATE_180
:将图像旋转 180 度(这只是 HMIRROR | VFLIP)。image.ROTATE_270
:将图像旋转 270 度(这只是 HMIRROR | TRANSPOSE)。
返回图像对象,以便您可以使用
.
符号调用另一个方法。
- to_png([x_scale=1.0[, y_scale=1.0[, roi=None[, rgb_channel=-1[, alpha=256[, color_palette=None[, alpha_palette=None[, hint=0[, copy=False]]]]]]]]])¶
将图像转换为PNG图像。如果
copy
为 False,则此方法将尝试就地修改图像。如果copy
为 True,则此方法将返回在堆上分配的新图像副本。copy
还可以是另一个图像对象,此时此方法将尝试重用该图像对象的存储空间,并将返回一个使用先前图像对象存储空间的新图像对象。在此之后,请不要再使用任何对旧图像对象的引用,因为它们将变得过时。x_scale
控制图像在 x 方向的显示比例(float)。如果此值为负,则图像将水平翻转。注意,如果未指定y_scale
,则它将与x_scale
匹配,以保持纵横比。y_scale
控制图像在 y 方向的显示比例(float)。如果此值为负,则图像将垂直翻转。注意,如果未指定x_scale
,则它将与x_scale
匹配,以保持纵横比。roi
是源图像要绘制的感兴趣区域的矩形元组(x、y、w、h)。这允许您仅提取感兴趣区域中的像素以在目标图像上进行缩放和绘制。rgb_channel
是要从 RGB565 图像中提取(如果传递)并渲染到目标图像上的 RGB 通道(0=R,G=1,B=2)。例如,如果传递rgb_channel=1
,则会提取源 RGB565 图像的绿色通道,并将其以灰度形式绘制到目标图像上。alpha
控制要混合到目标图像中的源图像的程度。256 的值绘制不透明的源图像,而低于 256 的值会在源图像和目标图像之间产生混合。0 表示不对目标图像进行修改。color_palette
如果不是-1
,可以是image.PALETTE_RAINBOW
、image.PALETTE_IRONBOW
,或者总像素 256 的 RGB565 图像,用作对源图像的灰度值进行颜色查找表。如果使用,此操作将在rgb_channel
提取之后应用。alpha_palette
如果不是-1
,可以是总像素256 的 GRAYSCALE 图像,用作调制被绘制到像素级别的源图像的alpha
值的 alpha 调色板,从而允许您根据它们的灰度值精确控制像素的 alpha 值。在 alpha 查找表中的像素值为 255 时是不透明的,小于 255 的任何值都会变得更透明,直到 0。如果使用,此操作将在rgb_channel
提取之后应用。hint
可以是标志的逻辑 OR:image.AREA
:在缩小时使用区域缩放,而不是默认的最近邻插值。image.BILINEAR
:使用双线性缩放,而不是默认的最近邻插值。image.BICUBIC
:使用双三次缩放,而不是默认的最近邻插值。image.CENTER
:将要绘制的图像居中显示。这将在缩放后应用。image.HMIRROR
:水平镜像图像。image.VFLIP
:垂直翻转图像。image.TRANSPOSE
:转置图像(交换 x/y)。image.EXTRACT_RGB_CHANNEL_FIRST
:在缩放之前执行 rgb_channel 提取。image.APPLY_COLOR_PALETTE_FIRST
:在缩放之前应用颜色调色板。image.SCALE_ASPECT_KEEP
:将要绘制的图像缩放以适应显示器内部。image.SCALE_ASPECT_EXPAND
:将要绘制的图像缩放以填充显示器(会导致裁剪)image.SCALE_ASPECT_IGNORE
:将要绘制的图像缩放以填充显示器(会导致拉伸)。image.ROTATE_90
:将图像旋转 90 度(这只是 VFLIP | TRANSPOSE)。image.ROTATE_180
:将图像旋转 180 度(这只是 HMIRROR | VFLIP)。image.ROTATE_270
:将图像旋转 270 度(这只是 HMIRROR | TRANSPOSE)。
返回图像对象,以便您可以使用
.
符号调用另一个方法。
- compress([quality=90])¶
JPEG 会就地压缩图像。使用此方法而不是
Image.compressed()
可以节省堆空间,并以更高的quality
进行压缩,以损坏原始图像为代价。返回图像对象,以便您可以使用
.
符号调用另一个方法。quality
是压缩质量 (0-100)(int)。如果在压缩图像上调用,则返回压缩后的图像。
- compress_for_ide([quality=90])¶
JPEG 会就地压缩图像。使用此方法而不是
Image.compressed()
可以节省堆空间,并以更高的quality
进行压缩,以损坏原始图像为代价。此方法 JPEG 压缩图像,然后将 JPEG 数据格式化为传输到 OpenMV IDE 的格式,通过将每 6 位编码为介于 128-191 之间的字节。这样做是为了防止 JPEG 数据被误解为字节流中的其他文本数据。
您需要使用此方法来格式化图像数据,以在 OpenMV IDE 中通过“打开终端”创建的终端窗口中显示。
返回图像对象,以便您可以使用
.
符号调用另一个方法。quality
是压缩质量 (0-100)(int)。如果在压缩图像上调用,则返回为 IDE 压缩的图像。不要在已为 IDE 压缩的图像上调用此方法。
- compressed([quality=90])¶
返回 JPEG 压缩图像 - 原始图像不受影响。但是,此方法需要相当大的堆空间分配,因此图像压缩质量必须较低,图像分辨率必须低于使用
Image.compress()
可以达到的水平。quality
是压缩质量 (0-100)(int)。如果在压缩图像上调用,则返回压缩后的图像副本。
- compressed_for_ide([quality=90])¶
返回 JPEG 压缩图像 - 原始图像不受影响。但是,此方法需要相当大的堆空间分配,因此图像压缩质量必须较低,图像分辨率必须低于使用
Image.compress()
可以达到的水平。此方法 JPEG 压缩图像,然后将 JPEG 数据格式化为传输到 OpenMV IDE 的格式,通过将每 6 位编码为介于 128-191 之间的字节。这样做是为了防止 JPEG 数据被误解为字节流中的其他文本数据。
您需要使用此方法来格式化图像数据,以在 OpenMV IDE 中通过“打开终端”创建的终端窗口中显示。
quality
是压缩质量 (0-100)(int)。如果在压缩图像上调用,则返回为 IDE 压缩的图像副本。不要在已为 IDE 压缩的图像上调用此方法。
- copy([x_scale=1.0[, y_scale=1.0[, roi=None[, rgb_channel=-1[, alpha=256[, color_palette=None[, alpha_palette=None[, hint=0[, copy_to_fb=False]]]]]]]]])¶
创建图像对象的深层副本。如果
copy_to_fb
为 False,则新图像将分配在 MicroPython 堆上。但是,MicroPython 堆是有限的,如果耗尽空间,则可能没有空间存储新图像。相反,将copy_to_fb
设置为 True,将帧缓冲设置为新图像,使此函数的工作方式与sensor.snapshot()
一样。x_scale
控制图像在 x 方向的显示比例(float)。如果此值为负,则图像将水平翻转。注意,如果未指定y_scale
,则它将与x_scale
匹配,以保持纵横比。y_scale
控制图像在 y 方向的显示比例(float)。如果此值为负,则图像将垂直翻转。注意,如果未指定x_scale
,则它将与x_scale
匹配,以保持纵横比。roi
是源图像要绘制的感兴趣区域的矩形元组(x、y、w、h)。这允许您仅提取感兴趣区域中的像素以在目标图像上进行缩放和绘制。rgb_channel
是要从 RGB565 图像中提取(如果传递)并渲染到目标图像上的 RGB 通道(0=R,G=1,B=2)。例如,如果传递rgb_channel=1
,则会提取源 RGB565 图像的绿色通道,并将其以灰度形式绘制到目标图像上。alpha
控制要混合到目标图像中的源图像的程度。256 的值绘制不透明的源图像,而低于 256 的值会在源图像和目标图像之间产生混合。0 表示不对目标图像进行修改。color_palette
如果不是-1
,可以是image.PALETTE_RAINBOW
、image.PALETTE_IRONBOW
,或者总像素 256 的 RGB565 图像,用作对源图像的灰度值进行颜色查找表。如果使用,此操作将在rgb_channel
提取之后应用。alpha_palette
如果不是-1
,可以是总像素256 的 GRAYSCALE 图像,用作调制被绘制到像素级别的源图像的alpha
值的 alpha 调色板,从而允许您根据它们的灰度值精确控制像素的 alpha 值。在 alpha 查找表中的像素值为 255 时是不透明的,小于 255 的任何值都会变得更透明,直到 0。如果使用,此操作将在rgb_channel
提取之后应用。hint
可以是标志的逻辑 OR:image.AREA
:在缩小时使用区域缩放,而不是默认的最近邻插值。image.BILINEAR
:使用双线性缩放,而不是默认的最近邻插值。image.BICUBIC
:使用双三次缩放,而不是默认的最近邻插值。image.CENTER
:将要绘制的图像居中显示。这将在缩放后应用。image.HMIRROR
:水平镜像图像。image.VFLIP
:垂直翻转图像。image.TRANSPOSE
:转置图像(交换 x/y)。image.EXTRACT_RGB_CHANNEL_FIRST
:在缩放之前执行 rgb_channel 提取。image.APPLY_COLOR_PALETTE_FIRST
:在缩放之前应用颜色调色板。image.SCALE_ASPECT_KEEP
:将要绘制的图像缩放以适应显示器内部。image.SCALE_ASPECT_EXPAND
:将要绘制的图像缩放以填充显示器(会导致裁剪)image.SCALE_ASPECT_IGNORE
:将要绘制的图像缩放以填充显示器(会导致拉伸)。image.ROTATE_90
:将图像旋转 90 度(这只是 VFLIP | TRANSPOSE)。image.ROTATE_180
:将图像旋转 180 度(这只是 HMIRROR | VFLIP)。image.ROTATE_270
:将图像旋转 270 度(这只是 HMIRROR | TRANSPOSE)。
返回新的图像对象。
不支持压缩图像。
- crop([x_scale=1.0[, y_scale=1.0[, roi=None[, rgb_channel=-1[, alpha=256[, color_palette=None[, alpha_palette=None[, hint=0[, copy=False]]]]]]]]])¶
就地修改图像而不更改底层图像类型。如果
copy
是 False,则此方法将尝试原地修改图像。如果copy
是 True,则此方法将返回在堆上分配的新图像副本。copy
还可以是另一个图像对象,此时此方法将尝试重用该图像对象的存储空间,并将返回一个使用先前图像对象存储空间的新图像对象。在此之后,请不要再使用任何对旧图像对象的引用,因为它们将变得过时。x_scale
控制图像在 x 方向的显示比例(float)。如果此值为负,则图像将水平翻转。注意,如果未指定y_scale
,则它将与x_scale
匹配,以保持纵横比。y_scale
控制图像在 y 方向的显示比例(float)。如果此值为负,则图像将垂直翻转。注意,如果未指定x_scale
,则它将与x_scale
匹配,以保持纵横比。roi
是源图像要绘制的感兴趣区域的矩形元组(x、y、w、h)。这允许您仅提取感兴趣区域中的像素以在目标图像上进行缩放和绘制。rgb_channel
是要从 RGB565 图像中提取(如果传递)并渲染到目标图像上的 RGB 通道(0=R,G=1,B=2)。例如,如果传递rgb_channel=1
,则会提取源 RGB565 图像的绿色通道,并将其以灰度形式绘制到目标图像上。alpha
控制要混合到目标图像中的源图像的程度。256 的值绘制不透明的源图像,而低于 256 的值会在源图像和目标图像之间产生混合。0 表示不对目标图像进行修改。color_palette
如果不是-1
,可以是image.PALETTE_RAINBOW
、image.PALETTE_IRONBOW
,或者总像素 256 的 RGB565 图像,用作对源图像的灰度值进行颜色查找表。如果使用,此操作将在rgb_channel
提取之后应用。alpha_palette
如果不是-1
,可以是总像素256 的 GRAYSCALE 图像,用作调制被绘制到像素级别的源图像的alpha
值的 alpha 调色板,从而允许您根据它们的灰度值精确控制像素的 alpha 值。在 alpha 查找表中的像素值为 255 时是不透明的,小于 255 的任何值都会变得更透明,直到 0。如果使用,此操作将在rgb_channel
提取之后应用。hint
可以是标志的逻辑 OR:image.AREA
:在缩小时使用区域缩放,而不是默认的最近邻插值。image.BILINEAR
:使用双线性缩放,而不是默认的最近邻插值。image.BICUBIC
:使用双三次缩放,而不是默认的最近邻插值。image.CENTER
:将要绘制的图像居中显示。这将在缩放后应用。image.HMIRROR
:水平镜像图像。image.VFLIP
:垂直翻转图像。image.TRANSPOSE
:转置图像(交换 x/y)。image.EXTRACT_RGB_CHANNEL_FIRST
:在缩放之前执行 rgb_channel 提取。image.APPLY_COLOR_PALETTE_FIRST
:在缩放之前应用颜色调色板。image.SCALE_ASPECT_KEEP
:将要绘制的图像缩放以适应显示器内部。image.SCALE_ASPECT_EXPAND
:将要绘制的图像缩放以填充显示器(会导致裁剪)image.SCALE_ASPECT_IGNORE
:将要绘制的图像缩放以填充显示器(会导致拉伸)。image.ROTATE_90
:将图像旋转 90 度(这只是 VFLIP | TRANSPOSE)。image.ROTATE_180
:将图像旋转 180 度(这只是 HMIRROR | VFLIP)。image.ROTATE_270
:将图像旋转 270 度(这只是 HMIRROR | TRANSPOSE)。
返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像。
- scale([x_scale=1.0[, y_scale=1.0[, roi=None[, rgb_channel=-1[, alpha=256[, color_palette=None[, alpha_palette=None[, hint=0[, copy=False]]]]]]]]])¶
就地修改图像而不更改底层图像类型。如果
copy
是 False,则此方法将尝试原地修改图像。如果copy
是 True,则此方法将返回在堆上分配的新图像副本。copy
还可以是另一个图像对象,此时此方法将尝试重用该图像对象的存储空间,并将返回一个使用先前图像对象存储空间的新图像对象。在此之后,请不要再使用任何对旧图像对象的引用,因为它们将变得过时。x_scale
控制图像在 x 方向的显示比例(float)。如果此值为负,则图像将水平翻转。注意,如果未指定y_scale
,则它将与x_scale
匹配,以保持纵横比。y_scale
控制图像在 y 方向的显示比例(float)。如果此值为负,则图像将垂直翻转。注意,如果未指定x_scale
,则它将与x_scale
匹配,以保持纵横比。roi
是源图像要绘制的感兴趣区域的矩形元组(x、y、w、h)。这允许您仅提取感兴趣区域中的像素以在目标图像上进行缩放和绘制。rgb_channel
是要从 RGB565 图像中提取(如果传递)并渲染到目标图像上的 RGB 通道(0=R,G=1,B=2)。例如,如果传递rgb_channel=1
,则会提取源 RGB565 图像的绿色通道,并将其以灰度形式绘制到目标图像上。alpha
控制要混合到目标图像中的源图像的程度。256 的值绘制不透明的源图像,而低于 256 的值会在源图像和目标图像之间产生混合。0 表示不对目标图像进行修改。color_palette
如果不是-1
,可以是image.PALETTE_RAINBOW
、image.PALETTE_IRONBOW
,或者总像素 256 的 RGB565 图像,用作对源图像的灰度值进行颜色查找表。如果使用,此操作将在rgb_channel
提取之后应用。alpha_palette
如果不是-1
,可以是总像素256 的 GRAYSCALE 图像,用作调制被绘制到像素级别的源图像的alpha
值的 alpha 调色板,从而允许您根据它们的灰度值精确控制像素的 alpha 值。在 alpha 查找表中的像素值为 255 时是不透明的,小于 255 的任何值都会变得更透明,直到 0。如果使用,此操作将在rgb_channel
提取之后应用。hint
可以是标志的逻辑 OR:image.AREA
:在缩小时使用区域缩放,而不是默认的最近邻插值。image.BILINEAR
:使用双线性缩放,而不是默认的最近邻插值。image.BICUBIC
:使用双三次缩放,而不是默认的最近邻插值。image.CENTER
:将要绘制的图像居中显示。这将在缩放后应用。image.HMIRROR
:水平镜像图像。image.VFLIP
:垂直翻转图像。image.TRANSPOSE
:转置图像(交换 x/y)。image.EXTRACT_RGB_CHANNEL_FIRST
:在缩放之前执行 rgb_channel 提取。image.APPLY_COLOR_PALETTE_FIRST
:在缩放之前应用颜色调色板。image.SCALE_ASPECT_KEEP
:将要绘制的图像缩放以适应显示器内部。image.SCALE_ASPECT_EXPAND
:将要绘制的图像缩放以填充显示器(会导致裁剪)image.SCALE_ASPECT_IGNORE
:将要绘制的图像缩放以填充显示器(会导致拉伸)。image.ROTATE_90
:将图像旋转 90 度(这只是 VFLIP | TRANSPOSE)。image.ROTATE_180
:将图像旋转 180 度(这只是 HMIRROR | VFLIP)。image.ROTATE_270
:将图像旋转 270 度(这只是 HMIRROR | TRANSPOSE)。
返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像。
- save(path[, roi[, quality=50]])¶
将图像的副本保存到文件系统中的
path
处。支持 bmp/pgm/ppm/jpg/jpeg 图像文件。请注意,您不能将 jpeg 压缩图像保存为未压缩格式。
roi
是要保存的感兴趣区域矩形 (x, y, w, h)。如果未指定,则等于复制整个图像的图像矩形。此参数不适用于 JPEG 图像。quality
是要用于将图像保存为 JPEG 格式的 jpeg 压缩质量(0-100)(int)。返回图像对象,以便您可以使用
.
符号调用另一个方法。
- flush()¶
使用相机上帧缓冲区中的图像更新 IDE 中的帧缓冲区。
- clear([mask])¶
将图像中的所有像素设置为零(非常快)。
mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像。
- draw_line(x0, y0, x1, y1[, color[, thickness=1]])¶
在图像上从 (x0, y0) 到 (x1, y1) 绘制一条线。您可以分别传递 x0、y0、x1、y1,或作为元组 (x0, y0, x1, y1) 传递。
color
是 Grayscale 或 RGB565 图像的 RGB888 元组。默认为白色。但是,您还可以传递灰度图像的底层像素值(0-255)或 RGB565 图像的 RGB565 值。thickness
控制线的厚度(以像素为单位)。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- draw_rectangle(x, y, w, h[, color[, thickness=1[, fill=False]]])¶
在图像上绘制一个矩形。您可以分别传递 x、y、w、h,或作为元组 (x、y、w、h) 传递。
color
是 Grayscale 或 RGB565 图像的 RGB888 元组。默认为白色。但是,您还可以传递灰度图像的底层像素值(0-255)或 RGB565 图像的 RGB565 值。thickness
控制线的厚度(以像素为单位)。将
fill
设置为 True 以填充矩形。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- draw_circle(x, y, radius[, color[, thickness=1[, fill=False]]])¶
在图像上绘制一个圆。您可以分别传递 x、y、半径,或作为元组 (x、y、半径) 传递。
color
是 Grayscale 或 RGB565 图像的 RGB888 元组。默认为白色。但是,您还可以传递灰度图像的底层像素值(0-255)或 RGB565 图像的 RGB565 值。thickness
控制边缘的粗细(以像素为单位)。将
fill
设置为 True 以填充圆。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- draw_ellipse(cx, cy, rx, ry, rotation[, color[, thickness=1[, fill=False]]])¶
在图像上绘制一个椭圆。您可以分别传递 cx、cy、rx、ry 和rotation(以度为单位),或作为元组 (cx、cy、rx、ry、rotation) 传递。
color
是 Grayscale 或 RGB565 图像的 RGB888 元组。默认为白色。但是,您还可以传递灰度图像的底层像素值(0-255)或 RGB565 图像的 RGB565 值。thickness
控制边缘的粗细(以像素为单位)。将
fill
设置为 True 以填充椭圆。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- draw_string(x, y, text[, color[, scale=1[, x_spacing=0[, y_spacing=0[, mono_space=True[, char_rotation=0[, char_hmirror=False[, char_vflip=False[, string_rotation=0[, string_hmirror=False[, string_vflip=False]]]]]]]]]]])¶
在图像中的位置 (x, y) 处绘制 8x10 文本。可以分别传递 x 和 y,也可以作为元组 (x, y) 传递。
text
是要写入图像的字符串。\n
、\r
和\r\n
行结束符将光标移动到下一行。color
是 Grayscale 或 RGB565 图像的 RGB888 元组。默认为白色。但是,您还可以传递灰度图像的底层像素值(0-255)或 RGB565 图像的 RGB565 值。可以增加
scale
来增加/减小图像上文本的大小。可以传递大于 0 的整数或浮点值。x_spacing
允许您在字符之间添加 (如果为正) 或减去 (如果为负) x 像素。y_spacing
允许您在字符之间添加 (如果为正) 或减去 (如果为负) y 像素 (用于多行文本)。mono_space
默认为 True,强制文本为固定间距。对于大文本比例,这看起来很糟糕。将其设置为 False 可以得到非固定宽度字符间距,效果要好得多。char_rotation
可以是 0、90、180、270,以按此数量旋转字符串中的每个字符。char_hmirror
如果为 True,则水平镜像字符串中的所有字符。char_vflip
如果为 True,则垂直翻转字符串中的所有字符。string_rotation
可以是 0、90、180、270,以按此数量旋转字符串。string_hmirror
如果为 True,则水平镜像字符串。string_vflip
如果为 True,则垂直翻转字符串。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- draw_cross(x, y[, color[, size=5[, thickness=1]]])¶
在位置 x、y 处绘制十字。可以分别传递 x 和 y,也可以作为元组 (x, y) 传递。
color
是 Grayscale 或 RGB565 图像的 RGB888 元组。默认为白色。但是,您还可以传递灰度图像的底层像素值(0-255)或 RGB565 图像的 RGB565 值。size
控制十字的线条长度。thickness
控制边缘的粗细(以像素为单位)。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- draw_arrow(x0, y0, x1, y1[, color[, thickness=1]])¶
在图像上从 (x0, y0) 到 (x1, y1) 绘制箭头。可以分别传递 x0、y0、x1 和 y1,也可以作为元组 (x0, y0, x1, y1) 传递。
color
是 Grayscale 或 RGB565 图像的 RGB888 元组。默认为白色。但是,您还可以传递灰度图像的底层像素值(0-255)或 RGB565 图像的 RGB565 值。thickness
控制线的厚度(以像素为单位)。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- draw_edges(image, corners[, color[, size=0[, thickness=1[, fill=False]]]])¶
在由
blob.corners
等方法返回的角点列表之间绘制线边缘。角点是由x/y 两值元组组成的四值元组。例如 [(x1,y1),(x2,y2),(x3,y3),(x4,y4)]。color
是 Grayscale 或 RGB565 图像的 RGB888 元组。默认为白色。但是,您还可以传递灰度图像的底层像素值(0-255)或 RGB565 图像的 RGB565 值。size
如果大于 0,则会将角点绘制为半径为size
的圆。thickness
控制线的厚度(以像素为单位)。将
fill
设置为 True 以填充角点圆(如果绘制)。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- draw_image(image, x, y[, x_scale=1.0[, y_scale=1.0[, roi=None[, rgb_channel=-1[, alpha=256[, color_palette=None[, alpha_palette=None[, hint=0]]]]]]]])¶
绘制一个
image
,其左上角从位置 x、y 开始。可以分别传递 x 和 y,也可以作为元组 (x, y) 传递。此方法会自动将传递给它的图像渲染到目标图像的正确像素格式,并且无缝处理裁剪。您还可以传递路径而不是图像对象,以使此方法自动从磁盘加载图像并一次性绘制它。例如
draw_image("test.jpg")
。x_scale
控制图像在 x 方向的显示比例(float)。如果此值为负,则图像将水平翻转。注意,如果未指定y_scale
,则它将与x_scale
匹配,以保持纵横比。y_scale
控制图像在 y 方向的显示比例(float)。如果此值为负,则图像将垂直翻转。注意,如果未指定x_scale
,则它将与x_scale
匹配,以保持纵横比。roi
是源图像要绘制的感兴趣区域的矩形元组(x、y、w、h)。这允许您仅提取感兴趣区域中的像素以在目标图像上进行缩放和绘制。rgb_channel
是要从 RGB565 图像中提取(如果传递)并渲染到目标图像上的 RGB 通道(0=R,G=1,B=2)。例如,如果传递rgb_channel=1
,则会提取源 RGB565 图像的绿色通道,并将其以灰度形式绘制到目标图像上。alpha
控制要混合到目标图像中的源图像的程度。256 的值绘制不透明的源图像,而低于 256 的值会在源图像和目标图像之间产生混合。0 表示不对目标图像进行修改。color_palette
如果不是-1
,可以是image.PALETTE_RAINBOW
、image.PALETTE_IRONBOW
,或者总像素 256 的 RGB565 图像,用作对源图像的灰度值进行颜色查找表。如果使用,此操作将在rgb_channel
提取之后应用。alpha_palette
如果不是-1
,可以是总像素256 的 GRAYSCALE 图像,用作调制被绘制到像素级别的源图像的alpha
值的 alpha 调色板,从而允许您根据它们的灰度值精确控制像素的 alpha 值。在 alpha 查找表中的像素值为 255 时是不透明的,小于 255 的任何值都会变得更透明,直到 0。如果使用,此操作将在rgb_channel
提取之后应用。hint
可以是标志的逻辑 OR:image.AREA
:在缩小时使用区域缩放,而不是默认的最近邻插值。image.BILINEAR
:使用双线性缩放,而不是默认的最近邻插值。image.BICUBIC
:使用双三次缩放,而不是默认的最近邻插值。image.CENTER
:将要绘制的图像居中显示。这将在缩放后应用。image.HMIRROR
:水平镜像图像。image.VFLIP
:垂直翻转图像。image.TRANSPOSE
:转置图像(交换 x/y)。image.EXTRACT_RGB_CHANNEL_FIRST
:在缩放之前执行 rgb_channel 提取。image.APPLY_COLOR_PALETTE_FIRST
:在缩放之前应用颜色调色板。image.SCALE_ASPECT_KEEP
:将要绘制的图像缩放以适应显示器内部。image.SCALE_ASPECT_EXPAND
:将要绘制的图像缩放以填充显示器(会导致裁剪)image.SCALE_ASPECT_IGNORE
:将要绘制的图像缩放以填充显示器(会导致拉伸)。image.ROTATE_90
:将图像旋转 90 度(这只是 VFLIP | TRANSPOSE)。image.ROTATE_180
:将图像旋转 180 度(这只是 HMIRROR | VFLIP)。image.ROTATE_270
:将图像旋转 270 度(这只是 HMIRROR | TRANSPOSE)。image.BLACK_BACKGROUND
:假定正在绘制的背景图像是黑色,加快混合速度。
返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像。
- draw_keypoints(keypoints[, color[, size=10[, thickness=1[, fill=False]]]])¶
在图像上绘制关键点对象的关键点。也可以传递包含三个值元组的列表,其中包含 (x, y, 旋转角度(以度为单位)),以重用此方法以绘制关键点符号,它是一个带有指向特定方向的线的圆。
color
是 Grayscale 或 RGB565 图像的 RGB888 元组。默认为白色。但是,您还可以传递灰度图像的底层像素值(0-255)或 RGB565 图像的 RGB565 值。size
控制关键点的大小。thickness
控制线的厚度(以像素为单位)。设置
fill
为 True 以填充关键点。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- flood_fill(x, y[, seed_threshold=0.05[, floating_threshold=0.05[, color[, invert=False[, clear_background=False[, mask=None]]]]]])¶
从位置 x、y 开始填充图像的一个区域。可以单独传递 x、y,也可以传递元组 (x, y)。
seed_threshold
控制填充区域中的任何像素与原始起始像素的差异程度。floating_threshold
控制填充区域中的任何像素与任何相邻像素的差异程度。color
是 Grayscale 或 RGB565 图像的 RGB888 元组。默认为白色。但是,您还可以传递灰度图像的底层像素值(0-255)或 RGB565 图像的 RGB565 值。设置
invert
为 True 以重新着色填充连接区域之外的所有内容。设置
clear_background
为 True 以将泛色填充未重新着色的其余像素设置为零。mask
是另一个图像,用作操作像素级掩码。掩码应该是一个只有黑色或白色像素的图像,大小应与正在操作的图像相同。只有在掩码中设置的像素在进行泛色填充时才会被评估。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
此方法在 OpenMV Cam M4 上不可用。
- mask_rectange([x, y, w, h])¶
将图像的矩形部分置零。如果未提供参数,则此方法将图像的中心置零。
返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- mask_circle([x, y, radius])¶
将图像的圆形部分置零。如果未提供参数,则此方法将图像的中心置零。
返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- mask_ellipse([x, y, radius_x, radius_y, rotation_angle_in_degrees])¶
将图像的椭圆形状部分置零。如果未提供参数,则此方法将图像的中心置零。
返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- binary(thresholds[, invert=False[, zero=False[, mask=None[, to_bitmap=False[, copy=False]]]]])¶
根据像素是否在阈值列表
thresholds
范围内,将图像中的所有像素设置为黑色或白色。thresholds
必须是包含元组的列表[(lo, hi), (lo, hi), ..., (lo, hi)]
,定义您要跟踪的颜色范围。对于灰度图像,每个元组都需要包含两个值 - 最小灰度值和最大灰度值。仅将处于这些阈值之间的像素区域视为符合条件。对于 RGB565 图像,每个元组需要有六个值(l_lo、l_hi、a_lo、a_hi、b_lo、b_hi) - 分别是 LAB L、A 和 B 通道的最小值和最大值。为了简化使用,此函数将自动修复颠倒的最小值和最大值。此外,如果元组的长度大于六个值,则其余部分将被忽略。反之,如果元组太短,则其余的阈值被假定为在最大范围内。备注
要获取要跟踪的对象的阈值,请在 IDE 帧缓冲区中选择(单击并拖动)要跟踪的对象。然后,直方图将更新为仅位于该区域中。然后,只需写下直方图通道中颜色分布开始和结束的位置。这些将是您的
thresholds
的低值和高值。最好手动确定阈值,而不是使用上四分位数统计数据,因为它们太紧密了。您还可以通过进入 OpenMV IDE 中的
Tools->Machine Vision->Threshold Editor
并从 GUI 滑块窗口中选择阈值来确定颜色阈值。invert
反转阈值操作,使得匹配像素不是在某些已知颜色范围内,而是在已知颜色范围之外。将
zero
设置为 True,以零化阈值像素,并保持不在阈值列表中的像素不变。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。to_bitmap
将图像数据转换为二进制位图图像,其中每个像素都以 1 位存储。对于非常小的图像,新的位图图像可能无法适应原始图像,需要使用copy
进行out-of-place 操作。copy
如果为True,则在堆上创建二值化图像的副本,而不是修改源图像。备注
位图图像类似于灰度图像,只有两个像素值 - 0 和 1。此外,位图图像被打包,使得它们只存储每像素 1 位,使它们非常小。OpenMV 图像库允许在所有可以使用
sensor.GRAYSCALE
和sensor.RGB565
图像的地方使用位图图像。但是,在位图图像上进行的许多操作都没有任何意义,因为位图图像只有 2 个值。OpenMV 建议在操作中使用位图图像作为mask
值,因为它们可以很容易地放在 MicroPython 堆中。最后,当应用到sensor.GRAYSCALE
或sensor.RGB565
图像时,位图图像像素值 0 和 1 被解释为黑色和白色。该库会自动处理转换。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- invert()¶
快速翻转(二进制反转)二值化图像中的所有像素值。
返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- b_and(image[, mask=None])¶
逻辑与(AND)此图像与另一个图像。
image
可以是图像对象、未压缩图像文件的路径(bmp/pgm/ppm)或标量值。如果是标量值,则该值可以是RGB888元组或底层像素值(例如,灰度图像的8位灰度或RGB图像的RGB565值)。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- b_nand(image[, mask=None])¶
逻辑非与(NAND)此图像与另一个图像。
image
可以是图像对象、未压缩图像文件的路径(bmp/pgm/ppm)或标量值。如果是标量值,则该值可以是RGB888元组或底层像素值(例如,灰度图像的8位灰度或RGB图像的RGB565值)。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- b_or(image[, mask=None])¶
逻辑或(OR)此图像与另一个图像。
image
可以是图像对象、未压缩图像文件的路径(bmp/pgm/ppm)或标量值。如果是标量值,则该值可以是RGB888元组或底层像素值(例如,灰度图像的8位灰度或RGB图像的RGB565值)。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- b_nor(image[, mask=None])¶
逻辑非或(NOR)此图像与另一个图像。
image
可以是图像对象、未压缩图像文件的路径(bmp/pgm/ppm)或标量值。如果是标量值,则该值可以是RGB888元组或底层像素值(例如,灰度图像的8位灰度或RGB图像的RGB565值)。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- b_xor(image[, mask=None])¶
逻辑异或(XOR)此图像与另一个图像。
image
可以是图像对象、未压缩图像文件的路径(bmp/pgm/ppm)或标量值。如果是标量值,则该值可以是RGB888元组或底层像素值(例如,灰度图像的8位灰度或RGB图像的RGB565值)。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- b_xnor(image[, mask=None])¶
逻辑反异或(XNOR)此图像与另一个图像。
image
可以是图像对象、未压缩图像文件的路径(bmp/pgm/ppm)或标量值。如果是标量值,则该值可以是RGB888元组或底层像素值(例如,灰度图像的8位灰度或RGB图像的RGB565值)。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- erode(size[, threshold[, mask=None]])¶
移除分段区域的边缘像素。
该方法通过将大小为 ((size*2)+1)x((size*2)+1) 像素的核在图像上进行卷积,并且如果相邻像素的总和不大于
threshold
,则将核的中心像素置零来工作。如果未设置 threshold,则此方法的工作方式类似于标准的腐蚀方法。如果设置了
threshold
,则可以指定仅腐蚀周围设置了小于 2 个像素(阈值为 2)的像素。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- dilate(size[, threshold[, mask=None]])¶
在分段区域的边缘添加像素。
该方法通过将大小为 ((size*2)+1)x((size*2)+1) 像素的核在图像上进行卷积,并且如果相邻像素的总和大于
threshold
,则设置核的中心像素。如果未设置 threshold,则此方法的工作方式类似于标准的膨胀方法。如果设置了
threshold
,则可以指定只对周围像素超过 2 个且阈值为 2的像素进行扩张。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- open(size[, threshold[, mask=None]])¶
依次执行图像上的腐蚀和膨胀。有关更多信息,请参阅
Image.erode()
和Image.dilate()
。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- close(size[, threshold[, mask=None]])¶
依次执行图像上的膨胀和腐蚀。有关更多信息,请参阅
Image.dilate()
和Image.erode()
。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- top_hat(size[, threshold[, mask=None]])¶
返回图像与
Image.open()
的图像之间的差异。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。不支持压缩图像或 Bayer 图像。
- black_hat(size[, threshold[, mask=None]])¶
返回图像与
Image.close()
的图像之间的差异。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。不支持压缩图像或 Bayer 图像。
- awb(max=False)¶
使用灰色世界算法对图像执行自动白平衡。此方法适用于原始 Bayer 图像,因此您可以在转换为 RGB565 或将原始 Bayer 图像传递给图像处理函数之前改善图像质量。您也可以在 RGB565 上调用此方法。此方法不会影响二进制/灰度图像。
如果
max
为 True,则使用白补丁算法。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像。
- ccm(matrix)¶
将传递的浮点色彩校正矩阵与图像相乘。矩阵可以是以下形式之一:
[[rr, rg, rb], [gr, gg, gb], [br, bg, bb]] [[rr, rg, rb], [gr, gg, gb], [br, bg, bb], [xx, xx, xx]] [[rr, rg, rb, ro], [gr, gg, gb, go], [br, bg, bb, bo]] [[rr, rg, rb, ro], [gr, gg, gb, go], [br, bg, bb, bo], [xx, xx, xx, xx]] [rr, rg, rb, ro, gr, gg, gb, go, br, bg, bb, bo] [rr, rg, rb, ro, gr, gg, gb, go, br, bg, bb, bo, xx, xx, xx, xx]
CCM 方法为:
|R'| |R| |R'| |R| |G'| = 3x3 Matrix * |G| or |G'| = 3x4 Matrix * |G| |B'| |B| |B'| |B| |1|
请注意,3x3 矩阵中每行的总和通常应为 -1、+1 或 0。权重可以是正数或负数。
您可能希望使用此方法消除颜色通道之间的系统性串扰。或者,对整个图像进行颜色校正。
返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- gamma([gamma=1.0, [contrast=1.0, [brightness=0.0])¶
快速更改图像的 gamma、对比度和亮度。
gamma
大于 1.0 的值使图像以非线性方式变暗,而小于 1.0 的值使图像变亮。将 gamma 值应用于图像,将所有像素颜色通道缩放到 [0:1) 并在缩放回来之前对所有像素执行pow(pixel, 1/gamma)
的重映射。contrast
大于 1.0 的值使图像以线性方式变亮,而小于 1.0 的值使图像变暗。将对比度值应用于图像,将所有像素颜色通道缩放到 [0:1) 并在缩放回来之前对所有像素执行pixel * contrast
的重映射。brightness
大于 0.0 的值以恒定方式使图像变亮,而小于 0.0 的值使图像变暗。将亮度值应用于图像,将所有像素颜色通道缩放到 [0:1) 并在缩放回来之前对所有像素执行pixel + brightness
的重映射。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像。
- gamma_corr([gamma=1.0, [contrast=1.0, [brightness=0.0])¶
Image.gamma
的别名。
- negate()¶
非常快速地翻转(数值反转)图像中的所有像素值。例如,对于灰度图像,此方法将所有像素从
pixel
更改为255 - pixel
。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- replace(image[, hmirror=False[, vflip=False[, transpose=False[, mask=None]]]])¶
使用新图像替换图像对象中的所有像素。
image
可以是另一个图像对象、未压缩图像文件的路径(bmp/pgm/ppm)或标量值。如果是标量值,则值可以是 RGB888 元组或底层像素值(例如,对于灰度图像为 8 位灰度或对于 RGB 图像为 RGB565 值)。将
hmirror
设置为 True 以水平镜像替换图像。将
vflip
设置为 True 以垂直翻转替换图像。将
transpose
设置为 True 以沿对角线翻转图像(如果图像不是正方形,则更改图像的宽度/高度)。如果你想通过90度的倍数去旋转一张图片,可以参照一下方案:
vflip=False, hmirror=False, transpose=False -> 0 度旋转
vflip=True, hmirror=False, transpose=True -> 90 度旋转
vflip=True, hmirror=True, transpose=False -> 180 度旋转
vflip=False, hmirror=True, transpose=True -> 270 度旋转
备注
如果您没有传递
image
,则此方法将通过应用hmirror
、vflip
和transpose
选项在图像周围旋转图像,以替换您要替换的底层图像。例如,如果您想要执行img.replace(img, etc...)
,您只需要执行img.replace(etc..)
。mask
是另一个要用作像素级别掩码的图像。该掩码应为仅具有黑色或白色像素的图像,并且应与正在操作的图像大小相同。仅修改掩码中设置的像素。请注意,该掩码在 hmirror/vflip/transpose之前会应用于图像,因此掩码应与初始未修改图像的宽度/高度相同。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- assign(image[, hmirror=False[, vflip=False[, transpose=False[, mask=None]]]])¶
Image.replace
的别名。
- set(image[, hmirror=False[, vflip=False[, transpose=False[, mask=None]]]])¶
Image.replace
的别名。
- add(image[, mask=None])¶
将图像按像素添加到此图像。
image
可以是图像对象、未压缩图像文件的路径(bmp/pgm/ppm)或标量值。如果是标量值,则该值可以是RGB888元组或底层像素值(例如,灰度图像的8位灰度或RGB图像的RGB565值)。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- sub(image[, reverse=False[, mask=None]])¶
从此图像中按像素减去图像。
image
可以是图像对象、未压缩图像文件的路径(bmp/pgm/ppm)或标量值。如果是标量值,则该值可以是RGB888元组或底层像素值(例如,灰度图像的8位灰度或RGB图像的RGB565值)。将
reverse
设置为 True 以反转从this_image-image
到image-this_image
的减法操作。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- min(image[, mask=None])¶
返回两个图像按像素比较的最小图像。
image
可以是图像对象、未压缩图像文件的路径(bmp/pgm/ppm)或标量值。如果是标量值,则该值可以是RGB888元组或底层像素值(例如,灰度图像的8位灰度或RGB图像的RGB565值)。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- max(image[, mask=None])¶
返回两个图像按像素比较的最大图像。
image
可以是图像对象、未压缩图像文件的路径(bmp/pgm/ppm)或标量值。如果是标量值,则该值可以是RGB888元组或底层像素值(例如,灰度图像的8位灰度或RGB图像的RGB565值)。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- difference(image[, mask=None])¶
返回两个图像之间的绝对差异图像(例如,||a-b||)。
image
可以是图像对象、未压缩图像文件的路径(bmp/pgm/ppm)或标量值。如果是标量值,则该值可以是RGB888元组或底层像素值(例如,灰度图像的8位灰度或RGB图像的RGB565值)。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- blend(image[, alpha=128[, mask=None]])¶
Alpha将两个图像相互融合。
image
可以是图像对象、未压缩图像文件的路径(bmp/pgm/ppm)或标量值。如果是标量值,则该值可以是RGB888元组或底层像素值(例如,灰度图像的8位灰度或RGB图像的RGB565值)。alpha
控制将另一个图像混合到此图像中的程度。alpha
应为介于 0 和 256 之间的整数值。接近零的值将更多地将另一个图像混合到此图像中,而接近 256 的值则相反。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- histeq([adaptive=False[, clip_limit=-1[, mask=None]]])¶
在图像上运行直方图均衡算法。直方图均衡将图像中的对比度和亮度标准化。
如果将
adaptive
设置为 True,则会在图像上运行自适应直方图均衡方法,其结果通常比非自适应直方图均衡具有更好的结果,但运行时间较长。clip_limit
提供了一种限制自适应直方图均衡的对比度的方法。使用一个较小的值,如 10,可以产生对比度限制良好的直方图均衡的图像。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- mean(size, [threshold=False, [offset=0, [invert=False, [mask=None]]]]])¶
使用框滤波器进行标准均值模糊滤波。
size
是内核大小。使用 1 (3x3 内核),2 (5x5 内核),等等。如果您想要在滤波器输出端对图像自适应阈值处理,您可以传递
threshold=True
,这将启用自适应阈值化,根据像素的亮度与周围像素的内核亮度之间的关系将像素设置为一或零。负offset
值会随着您将其设置为负值而将更多像素设置为 1,而正值仅将最锐利的对比度变化设置为 1。设置invert
以反转二值图像的输出结果。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
此方法在 OpenMV Cam M4 上不可用。
- median(size[, percentile=0.5[, threshold=False[, offset=0[, invert=False[, mask=None]]]]])¶
在图像上运行中值滤波器。中值滤波器是平滑表面同时保持边缘的最佳滤波器,但速度很慢。
size
是内核大小。使用 1 (3x3 内核),2 (5x5 内核),等等。percentile
控制内核中使用的值的百分位数。默认情况下,每个像素将替换为其邻居的第 50个 百分位数(中心)。您可以将此设置为 0 进行最小值滤波器,0.25 进行下四分位数滤波器,0.75 进行上四分位数滤波器,以及 1.0 进行最大值滤波器。如果您想要在滤波器输出端对图像自适应阈值处理,您可以传递
threshold=True
,这将启用自适应阈值化,根据像素的亮度与周围像素的内核亮度之间的关系将像素设置为一或零。负offset
值会随着您将其设置为负值而将更多像素设置为 1,而正值仅将最锐利的对比度变化设置为 1。设置invert
以反转二值图像的输出结果。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
此方法在 OpenMV Cam M4 上不可用。
- mode(size, [threshold=False, [offset=0, [invert=False, [mask=None]]]]])¶
通过将每个像素替换为其邻居的模式来运行模式滤波器。该方法在灰度图像上效果很好。但是,在 RGB 图像上,由于操作的非线性特性,它在边缘上产生许多伪影。
size
是内核大小。使用 1 (3x3 内核),2 (5x5 内核),等等。如果您想要在滤波器输出端对图像自适应阈值处理,您可以传递
threshold=True
,这将启用自适应阈值化,根据像素的亮度与周围像素的内核亮度之间的关系将像素设置为一或零。负offset
值会随着您将其设置为负值而将更多像素设置为 1,而正值仅将最锐利的对比度变化设置为 1。设置invert
以反转二值图像的输出结果。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
此方法在 OpenMV Cam M4 上不可用。
- midpoint(size[, bias=0.5[, threshold=False[, offset=0[, invert=False[, mask=None]]]]])¶
在图像上运行中点滤波器。该滤波器在图像中的每个像素邻域中找到中点((max-min)/2)。
size
是内核大小。使用 1 (3x3 内核),2 (5x5 内核),等等。bias
控制最小/最大混合。0 仅用于最小滤波,1.0 仅用于最大滤波。通过使用bias
您可以对图像进行最小/最大滤波。如果您想要在滤波器输出端对图像自适应阈值处理,您可以传递
threshold=True
,这将启用自适应阈值化,根据像素的亮度与周围像素的内核亮度之间的关系将像素设置为一或零。负offset
值会随着您将其设置为负值而将更多像素设置为 1,而正值仅将最锐利的对比度变化设置为 1。设置invert
以反转二值图像的输出结果。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
此方法在 OpenMV Cam M4 上不可用。
- morph(size, kernel[, mul[, add=0[, threshold=False[, offset=0[, invert=False[, mask=None]]]]]])¶
使用滤波器内核对图像进行卷积。这允许您在图像上进行常规用途的卷积。
size
控制内核的大小,它必须是((size*2)+1)x((size*2)+1) 个元素大小。kernel
是要将图像卷积的内核。它可以是一个整数值的元组或列表。mul
是要乘以卷积像素结果的数字。当未设置时,它的默认值将防止缩放卷积输出。add
是要添加到每个卷积像素结果的值。mul
基本上允许您进行全局对比度调整,而add
允许您进行全局亮度调整。超出颜色通道的图像最小值和最大值的像素将被裁剪。如果您想要在滤波器输出端对图像自适应阈值处理,您可以传递
threshold=True
,这将启用自适应阈值化,根据像素的亮度与周围像素的内核亮度之间的关系将像素设置为一或零。负offset
值会随着您将其设置为负值而将更多像素设置为 1,而正值仅将最锐利的对比度变化设置为 1。设置invert
以反转二值图像的输出结果。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- gaussian(size[, unsharp=False[, mul[, add=0[, threshold=False[, offset=0[, invert=False[, mask=None]]]]]]])¶
通过平滑的高斯内核对图像进行卷积。
size
是内核大小。使用 1 (3x3 内核),2 (5x5 内核),等等。如果
unsharp
设置为 True,则此方法将执行锐化掩码操作,而不仅仅是执行高斯滤波操作,这会提高边缘上的图像清晰度。mul
是要乘以卷积像素结果的数字。当未设置时,它的默认值将防止缩放卷积输出。add
是要添加到每个卷积像素结果的值。mul
基本上允许您进行全局对比度调整,而add
允许您进行全局亮度调整。超出颜色通道的图像最小值和最大值的像素将被裁剪。如果您想要在滤波器输出端对图像自适应阈值处理,您可以传递
threshold=True
,这将启用自适应阈值化,根据像素的亮度与周围像素的内核亮度之间的关系将像素设置为一或零。负offset
值会随着您将其设置为负值而将更多像素设置为 1,而正值仅将最锐利的对比度变化设置为 1。设置invert
以反转二值图像的输出结果。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- laplacian(size[, sharpen=False[, mul[, add=0[, threshold=False[, offset=0[, invert=False[, mask=None]]]]]]])¶
使用边缘检测拉普拉斯内核对图像进行卷积。
size
是内核大小。使用 1 (3x3 内核),2 (5x5 内核),等等。如果
sharpen
设置为 True,则不仅会输出未经阈值处理的边缘检测图像,而是会使图像变锐。增加内核大小可以增加图像锐度。mul
是要乘以卷积像素结果的数字。当未设置时,它的默认值将防止缩放卷积输出。add
是要添加到每个卷积像素结果的值。mul
基本上允许您进行全局对比度调整,而add
允许您进行全局亮度调整。超出颜色通道的图像最小值和最大值的像素将被裁剪。如果您想要在滤波器输出端对图像自适应阈值处理,您可以传递
threshold=True
,这将启用自适应阈值化,根据像素的亮度与周围像素的内核亮度之间的关系将像素设置为一或零。负offset
值会随着您将其设置为负值而将更多像素设置为 1,而正值仅将最锐利的对比度变化设置为 1。设置invert
以反转二值图像的输出结果。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
此方法在 OpenMV Cam M4 上不可用。
- bilateral(size[, color_sigma=0.1[, space_sigma=1[, threshold=False[, offset=0[, invert=False[, mask=None]]]]]])¶
使用双边滤波器对图像进行卷积。双边滤波器平滑图像同时保持图像中的边缘。
size
是内核大小。使用 1 (3x3 内核),2 (5x5 内核),等等。color_sigma
控制使用双边滤波器时颜色匹配的紧密程度。增加此值可增加颜色模糊。space_sigma
控制像素空间之间模糊程度。增加此值可增加像素模糊。如果您想要在滤波器输出端对图像自适应阈值处理,您可以传递
threshold=True
,这将启用自适应阈值化,根据像素的亮度与周围像素的内核亮度之间的关系将像素设置为一或零。负offset
值会随着您将其设置为负值而将更多像素设置为 1,而正值仅将最锐利的对比度变化设置为 1。设置invert
以反转二值图像的输出结果。mask
是另一个图像,用作像素级掩码以进行操作。掩码应该是一个只有黑色或白色像素的图像,应该与正在操作的图像大小相同。仅修改掩码中设置的像素。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
此方法在 OpenMV Cam M4 上不可用。
- linpolar([reverse=False])¶
将图像从笛卡尔坐标重新投影到线性极坐标。
设置
reverse=True
以在相反方向重新投影。线性极坐标重新投影将图像的旋转转换为 x 平移。
不支持压缩图像或 Bayer 图像。
此方法在 OpenMV Cam M4 上不可用。
- logpolar([reverse=False])¶
将图像从笛卡尔坐标重新投影到对数极坐标。
设置
reverse=True
以在相反方向重新投影。对数极坐标重新投影将图像的旋转转换为 x 平移,并将缩放/缩放转换为 y 平移。
不支持压缩图像或 Bayer 图像。
此方法在 OpenMV Cam M4 上不可用。
- lens_corr([strength=1.8[, zoom=1.0[, x_corr=0.0[, y_corr=0.0]]]])¶
对图像进行镜头校正,以消除由于镜头畸变而产生的鱼眼效果。
strength
是一个浮点数,定义了要对图像进行多少程度的鱼眼效果消除。默认为 1.8,您可以从这个值开始,并根据需要增加或减少,直到图像看起来良好为止。zoom
是图像缩放的大小。默认为 1.0。x_corr
是从中心点偏移的浮点像素值。可以是负数或正数。y_corr
是从中心点偏移的浮点像素值。可以是负数或正数。返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
- img.rotation_corr([x_rotation=0.0[, y_rotation=0.0[, z_rotation=0.0[, x_translation=0.0[, y_translation=0.0[, zoom=1.0[, fov=60.0[, corners]]]]]]]])¶
通过对帧缓冲区进行3D旋转来校正图像的透视问题。
x_rotation
是在帧缓冲区中旋转图像的度数,绕x轴旋转(即上下旋转图像)。y_rotation
是在帧缓冲区中旋转图像的度数,绕y轴旋转(即左右旋转图像)。z_rotation
是在帧缓冲区中旋转图像的度数,绕z轴旋转(即原地旋转图像)。x_translation
是旋转后将图像向左或向右移动的单位数。由于此平移是在3D空间中应用的,单位不是像素…y_translation
是旋转后将图像向上或向下移动的单位数。由于此平移是在3D空间中应用的,单位不是像素…zoom
是图像缩放的大小。默认为 1.0。fov
是在3D空间中旋转图像之前进行2D->3D投影时使用的内部视场。当此值接近0时,图像被放置在视口的无限远处。当此值接近180时,图像被放置在视口内部。通常情况下,您不应更改此值,但可以修改它以更改2D->3D映射效果。corners
是一个包含四个(x,y)元组的列表,表示用于创建四点对应单应性的四个角,第一个角映射到(0,0),第二个角映射到(image_width-1,0),第三个角映射到(image_width-1,image_height-1),第四个角映射到(0,image_height-1)。然后在图像重新映射后应用3D旋转。此参数允许您可以使用rotation_corr
执行类似鸟瞰变换的操作。例如:top_tilt = 10 # if the difference between top/bottom_tilt become to large this method will stop working bottom_tilt = 0 points = [(tilt, 0), (img.width()-tilt, 0), (img.width()-1-bottom_tilt, img.height()-1), (bottom_tilt, img.height()-1)] img.rotation_corr(corners=points)
返回图像对象,以便您可以使用
.
符号调用另一个方法。不支持压缩图像或 Bayer 图像。
此方法在 OpenMV Cam M4 上不可用。
- get_histogram([thresholds[, invert=False[, roi[, bins[, l_bins[, a_bins[, b_bins[, difference]]]]]]]])¶
计算
roi
中所有颜色通道的归一化直方图,并返回一个image.histogram
对象。请参阅image.histogram
对象获取更多信息。您还可以通过使用Image.get_hist()
或Image.histogram()
来调用此方法。如果传递了thresholds
的列表,则直方图信息将仅计算来自阈值列表内的像素。thresholds
必须是包含元组的列表[(lo, hi), (lo, hi), ..., (lo, hi)]
,定义您要跟踪的颜色范围。对于灰度图像,每个元组都需要包含两个值 - 最小灰度值和最大灰度值。仅将处于这些阈值之间的像素区域视为符合条件。对于 RGB565 图像,每个元组需要有六个值(l_lo、l_hi、a_lo、a_hi、b_lo、b_hi) - 分别是 LAB L、A 和 B 通道的最小值和最大值。为了简化使用,此函数将自动修复颠倒的最小值和最大值。此外,如果元组的长度大于六个值,则其余部分将被忽略。反之,如果元组太短,则其余的阈值被假定为在最大范围内。备注
要获取要跟踪的对象的阈值,请在 IDE 帧缓冲区中选择(单击并拖动)要跟踪的对象。然后,直方图将更新为仅位于该区域中。然后,只需写下直方图通道中颜色分布开始和结束的位置。这些将是您的
thresholds
的低值和高值。最好手动确定阈值,而不是使用上四分位数统计数据,因为它们太紧密了。您还可以通过进入 OpenMV IDE 中的
Tools->Machine Vision->Threshold Editor
并从 GUI 滑块窗口中选择阈值来确定颜色阈值。invert
反转阈值操作,使得匹配像素不是在某些已知颜色范围内,而是在已知颜色范围之外。除非您需要对颜色统计执行一些高级操作,否则只需使用
Image.get_statistics()
方法而不是此方法来查看图像中的像素区域。roi
是感兴趣区域的矩形元组(x, y, w, h)。如果未指定,则等于图像矩形。仅操作roi
内的像素。bins
等是用于直方图通道的bin的数量。对于灰度图像使用bins
,对于RGB565图像使用其他通道。每个通道的bin计数必须大于2。此外,将bin计数设置为大于每个通道的唯一像素值数量没有意义。默认情况下,直方图将具有每个通道的最大 bin 数量。可以设置
difference
为一个图像对象,以使此方法对当前图像和difference
图像对象之间的差异图像上操作。这样可以避免使用单独的缓冲区。不支持压缩图像或 Bayer 图像。
- get_statistics([thresholds[, invert=False[, roi[, bins[, l_bins[, a_bins[, b_bins[, difference]]]]]]]])¶
计算
roi
中所有颜色通道的均值、中位数、模式、标准差、最小值、最大值、下四分位数和上四分位数,并返回一个image.statistics
对象。更多信息请参阅image.statistics
对象。也可以通过Image.get_stats()
或Image.statistics()
调用此方法。如果传递了thresholds
的列表,则直方图信息将仅计算在阈值列表内的像素。thresholds
必须是包含元组的列表[(lo, hi), (lo, hi), ..., (lo, hi)]
,定义您要跟踪的颜色范围。对于灰度图像,每个元组都需要包含两个值 - 最小灰度值和最大灰度值。仅将处于这些阈值之间的像素区域视为符合条件。对于 RGB565 图像,每个元组需要有六个值(l_lo、l_hi、a_lo、a_hi、b_lo、b_hi) - 分别是 LAB L、A 和 B 通道的最小值和最大值。为了简化使用,此函数将自动修复颠倒的最小值和最大值。此外,如果元组的长度大于六个值,则其余部分将被忽略。反之,如果元组太短,则其余的阈值被假定为在最大范围内。备注
要获取要跟踪的对象的阈值,请在 IDE 帧缓冲区中选择(单击并拖动)要跟踪的对象。然后,直方图将更新为仅位于该区域中。然后,只需写下直方图通道中颜色分布开始和结束的位置。这些将是您的
thresholds
的低值和高值。最好手动确定阈值,而不是使用上四分位数统计数据,因为它们太紧密了。您还可以通过进入 OpenMV IDE 中的
Tools->Machine Vision->Threshold Editor
并从 GUI 滑块窗口中选择阈值来确定颜色阈值。invert
反转阈值操作,使得匹配像素不是在某些已知颜色范围内,而是在已知颜色范围之外。每当需要获取图像中像素区域的值的信息时,您都会使用此方法。例如,如果您正在使用帧差法检测运动,那么您将使用此方法来确定图像的颜色通道的变化以触发您的运动检测阈值。
roi
是感兴趣区域的矩形元组(x, y, w, h)。如果未指定,则等于图像矩形。仅操作roi
内的像素。bins
等是用于直方图通道的bin的数量。对于灰度图像使用bins
,对于RGB565图像使用其他通道。每个通道的bin计数必须大于2。此外,将bin计数设置为大于每个通道的唯一像素值数量没有意义。默认情况下,直方图将具有每个通道的最大 bin 数量。可以设置
difference
为一个图像对象,以使此方法对当前图像和difference
图像对象之间的差异图像上操作。这样可以避免使用单独的缓冲区。不支持压缩图像或 Bayer 图像。
- get_regression(thresholds[, invert=False[, roi[, x_stride=2[, y_stride=1[, area_threshold=10[, pixels_threshold=10[, robust=False]]]]]]])¶
在图像中的所有阈值化像素上计算线性回归。线性回归通常使用最小二乘法计算,这很快,但不能处理任何异常值。如果
robust
为 True,则改用 Theil–Sen 线性回归,它计算图像中所有阈值化像素之间的所有斜率的中值。这是一个 N^2 的操作,即使在80×60的图像上,如果阈值化后设置太多像素,也可能将您的 FPS 降低到 5 以下。然而,只要阈值化后的像素数保持较低,即使在阈值化后的像素中有多达 30% 的异常值(例如,它是鲁棒的),线性回归也将有效。此方法返回一个
image.line
对象。请参阅此博客文章,了解如何轻松使用线对象:https://openmv.io/blogs/news/linear-regression-line-followingthresholds
必须是包含元组的列表[(lo, hi), (lo, hi), ..., (lo, hi)]
,定义您要跟踪的颜色范围。对于灰度图像,每个元组都需要包含两个值 - 最小灰度值和最大灰度值。仅将处于这些阈值之间的像素区域视为符合条件。对于 RGB565 图像,每个元组需要有六个值(l_lo、l_hi、a_lo、a_hi、b_lo、b_hi) - 分别是 LAB L、A 和 B 通道的最小值和最大值。为了简化使用,此函数将自动修复颠倒的最小值和最大值。此外,如果元组的长度大于六个值,则其余部分将被忽略。反之,如果元组太短,则其余的阈值被假定为在最大范围内。备注
要获取要跟踪的对象的阈值,请在 IDE 帧缓冲区中选择(单击并拖动)要跟踪的对象。然后,直方图将更新为仅位于该区域中。然后,只需写下直方图通道中颜色分布开始和结束的位置。这些将是您的
thresholds
的低值和高值。最好手动确定阈值,而不是使用上四分位数统计数据,因为它们太紧密了。您还可以通过进入 OpenMV IDE 中的
Tools->Machine Vision->Threshold Editor
并从 GUI 滑块窗口中选择阈值来确定颜色阈值。invert
反转阈值操作,使得匹配像素不是在某些已知颜色范围内,而是在已知颜色范围之外。roi
是感兴趣区域的矩形元组(x, y, w, h)。如果未指定,则等于图像矩形。仅操作roi
内的像素。x_stride
是在评估图像时要跳过的x像素数。y_stride
是在评估图像时要跳过的y像素数。如果回归的边界框面积小于
area_threshold
,则返回None。如果回归的像素计数少于
pixels_threshold
,则返回None。不支持压缩图像或 Bayer 图像。
- find_blobs(thresholds[, invert=False[, roi[, x_stride=2[, y_stride=1[, area_threshold=10[, pixels_threshold=10[, merge=False[, margin=0[, threshold_cb=None[, merge_cb=None[, x_hist_bins_max=0[, y_hist_bins_max=0]]]]]]]]]]]])¶
在图像中查找所有blob(通过阈值测试的连接像素区域)并返回描述每个blob的
image.blob
对象列表。有关更多信息,请参阅image.blob
对象。thresholds
必须是元组列表[(lo, hi), (lo, hi), ..., (lo, hi)]
,定义要跟踪的颜色范围。您可以在一次调用中传递多达32个阈值元组。对于灰度图像,每个元组需要包含两个值 - 最小灰度值和最大灰度值。只有落在这些阈值之间的像素区域才会被考虑。对于RGB565图像,每个元组需要有六个值(l_lo,l_hi,a_lo,a_hi,b_lo,b_hi) - 分别是LAB L,A和B通道的最小值和最大值。为了方便使用,此函数将自动修复交换的最小和最大值。此外,如果元组大于六个值,则其余的值将被忽略。相反,如果元组太短,则其余的阈值将被假定为最大范围。备注
要获取要跟踪的对象的阈值,请在 IDE 帧缓冲区中选择(单击并拖动)要跟踪的对象。然后,直方图将更新为仅位于该区域中。然后,只需写下直方图通道中颜色分布开始和结束的位置。这些将是您的
thresholds
的低值和高值。最好手动确定阈值,而不是使用上四分位数统计数据,因为它们太紧密了。您还可以通过进入 OpenMV IDE 中的
Tools->Machine Vision->Threshold Editor
并从 GUI 滑块窗口中选择阈值来确定颜色阈值。invert
反转阈值操作,使得匹配像素不是在某些已知颜色范围内,而是在已知颜色范围之外。roi
是感兴趣区域的矩形元组(x, y, w, h)。如果未指定,则等于图像矩形。仅操作roi
内的像素。x_stride
是在搜索blob时要跳过的x像素数。一旦找到一个blob,线填充算法将是像素精确的。如果已知blob很大,则增加x_stride
以加快查找blob的速度。y_stride
是在搜索blob时要跳过的y像素数。一旦找到一个blob,线填充算法将是像素精确的。如果已知blob很大,则增加y_stride
以加快查找blob的速度。如果blob的边界框面积小于
area_threshold
,则过滤掉它。如果blob的像素计数少于
pixels_threshold
,则过滤掉它。merge
如果为True,则合并所有未被过滤的与彼此相交的边界矩形的blobs。margin
可用于在相交测试期间增加或减少blobs的边界矩形的大小。例如,使用边距1,与彼此相距1像素的边界矩形将被合并。合并blob允许您实现颜色代码跟踪。每个blob对象都有一个
code
值,它是由每个颜色阈值的1组成的位向量。例如,如果向Image.find_blobs
传递两个颜色阈值,则第一个阈值的代码为1,第二个为2(第三个阈值为4,第四个为8,依此类推)。合并的blob逻辑OR它们的代码,以便您知道产生它们的颜色。这样,如果您得到一个具有两种颜色的blob对象,则知道它可能是一个颜色代码。如果您使用的颜色边界较窄,无法完全跟踪所要跟踪对象的所有像素,您可能还需要合并 Blobs。
最后,如果您想要合并blob,但不想合并两个颜色阈值,则只需两次调用
Image.find_blobs
,每次使用不同的阈值,以便不合并blob。threshold_cb
可以设置为在每个blob阈值化后调用的函数,以将其从要合并的blob列表中筛选出来。回调函数将接收一个参数 - 要过滤的blob对象。然后,回调必须返回True以保留blob,False以过滤它。merge_cb
可以设置为在每两个即将合并的blob上调用的函数,以防止或允许合并。回调函数将接收两个参数 - 即将合并的两个blob对象。然后,回调必须返回True以合并blob,False以防止合并blob。x_hist_bins_max
如果设置为非零,则在每个blob对象中填充一个直方图缓冲区,其中包含对象中所有列的x_histogram投影。然后,此值设置该投影的bin数。y_hist_bins_max
如果设置为非零,则在每个blob对象中填充一个直方图缓冲区,其中包含对象中所有行的y_histogram投影。然后,此值设置该投影的bin数。不支持压缩图像或 Bayer 图像。
- find_lines([roi[, x_stride=2[, y_stride=1[, threshold=1000[, theta_margin=25[, rho_margin=25]]]]]])¶
使用霍夫变换在图像中查找所有无限线条。返回
image.line
对象的列表。roi
是感兴趣区域的矩形元组(x, y, w, h)。如果未指定,则等于图像矩形。仅操作roi
内的像素。x_stride
是在进行霍夫变换时要跳过的x像素数。仅当要搜索的线条较大且笨重时才增加此值。y_stride
是在进行霍夫变换时要跳过的y像素数。仅当要搜索的线条较大且笨重时才增加此值。threshold
控制从霍夫变换中检测到的线条。仅返回幅度大于或等于threshold
的线条。对于您的应用程序,threshold
的正确值取决于图像。请注意,线的幅度是由构成该线的所有sobel滤波器幅度的像素的总和。theta_margin
控制检测到的线条的合并。相隔theta_margin
度且相隔rho_margin
rho的线条将被合并。rho_margin
控制检测到的线条的合并。相隔theta_margin
度且相隔rho_margin
rho的线条将被合并。此方法通过对图像运行sobel滤波器并从sobel滤波器中获取幅度和梯度响应来进行霍夫变换。它不需要对图像进行任何预处理。但是,通过使用滤波器清理图像,您可能会获得更稳定的结果。
不支持压缩图像或 Bayer 图像。
此方法在 OpenMV Cam M4 上不可用。
- find_line_segments([roi[, merge_distance=0[, max_theta_difference=15]]])¶
使用霍夫变换在图像中查找线段。返回
image.line
对象的列表。roi
是感兴趣区域的矩形元组(x, y, w, h)。如果未指定,则等于图像矩形。仅操作roi
内的像素。merge_distance
指定两个线段(在一条线上的任意点)彼此相隔的最大像素数,以便进行合并。max_theta_difference
是以度为单位的要合并的两条相距merge_distance
的线段的最大 theta 度数差。此方法使用LSD库(也被OpenCV使用)在图像中找到线段。它有点慢,但非常准确,线段不会跳动。
此方法在 OpenMV Cam M4 上不可用。
- find_circles([roi[, x_stride=2[, y_stride=1[, threshold=2000[, x_margin=10[, y_margin=10[, r_margin=10[, r_min=2[, r_max[, r_step=2]]]]]]]]]])¶
使用霍夫变换在图像中查找圆。返回
image.circle
对象的列表。roi
是感兴趣区域的矩形元组(x, y, w, h)。如果未指定,则等于图像矩形。仅操作roi
内的像素。x_stride
是在进行霍夫变换时要跳过的x像素数。仅当要搜索的圆较大且笨重时才增加此值。y_stride
是在进行霍夫变换时要跳过的y像素数。仅当要搜索的圆较大且笨重时才增加此值。threshold
控制从霍夫变换中检测到的圆。仅返回幅度大于或等于threshold
的圆。对于您的应用程序,threshold
的正确值取决于图像。请注意,圆的幅度是由构成该圆的所有sobel滤波器幅度的像素的总和。x_margin
控制检测到的圆的合并。相隔x_margin
、y_margin
和r_margin
像素的圆将被合并。y_margin
控制检测到的圆的合并。相隔x_margin
、y_margin
和r_margin
像素的圆将被合并。r_margin
控制检测到的圆的合并。相隔x_margin
、y_margin
和r_margin
像素的圆将被合并。r_min
控制检测到的最小圆半径。增加此值以加快算法。默认为2。r_max
控制检测到的最大圆半径。减小此值以加快算法。默认为min(roi.w/2, roi.h/2)。r_step
控制半径检测的步长。默认为2。此方法在 OpenMV Cam M4 上不可用。
- find_rects([roi=Auto[, threshold=10000]])¶
使用用于查找apriltags的相同四边形检测算法来查找图像中的矩形。对于对背景具有良好对比度的矩形效果最佳。apriltag四边形检测算法可以处理任何矩形的缩放/旋转/剪切。返回
image.rect
对象的列表。roi
是感兴趣区域的矩形元组(x, y, w, h)。如果未指定,则等于图像矩形。仅操作roi
内的像素。边缘幅度(通过在矩形边缘上的所有像素上滑动sobel运算符并将其值求和来计算)小于
threshold
的矩形将被过滤出返回列表。threshold
的正确值取决于您的应用程序/场景。此方法在 OpenMV Cam M4 上不可用。
- find_qrcodes([roi])¶
查找
roi
内的所有qrcodes,并返回一个image.qrcode
对象列表。请参阅image.qrcode
对象以获取更多信息。为使此方法有效工作,图像中的QR码需要相对平坦。您可以通过以下方式实现图像更平坦,不受镜头畸变影响:使用
sensor.set_windowing()
函数放大镜头中心,使用Image.lens_corr()
消除镜头桶形失真,或者更换镜头为具有较窄视场的镜头。有一些机器视觉镜头可用,它们不会导致桶形失真,但价格比OpenMV提供的标准镜头高得多。roi
是感兴趣区域的矩形元组(x, y, w, h)。如果未指定,则等于图像矩形。仅操作roi
内的像素。此方法在 OpenMV Cam M4 上不可用。
- find_apriltags([roi[, families=image.TAG36H11[, fx[, fy[, cx[, cy]]]]]])¶
查找
roi
内的所有AprilTags,并返回一个image.apriltag
对象列表。请参阅image.apriltag
对象以获取更多信息。与QR码不同,AprilTags可以在距离更远的情况下、光照更差的情况下、变形的图像中等情况下被检测到。AprilTags对各种图像失真问题都非常强大,而QR码则不是。即便如此,AprilTags只能将数值ID编码为其有效载荷。
AprilTags也可用于定位目的。每个
image.apriltag
对象都会返回相机的平移和旋转。平移的单位由fx
、fy
、cx
和cy
确定,它们分别是图像在X和Y方向上的焦距和中心点。备注
若要创建AprilTags,请使用OpenMV IDE内置的标签生成器工具。该标签生成器可以创建可打印的8.5”x11” AprilTags。
roi
是感兴趣区域的矩形元组(x, y, w, h)。如果未指定,则等于图像矩形。仅操作roi
内的像素。families
是要解码的标签族的位掩码。它是以下内容的逻辑或:默认值仅为
image.TAG36H11
,这是最佳标签族。请注意,每启用一个标签族,Image.find_apriltags()
的速度就会减慢。fx
是相机X方向的焦距(像素)。对于标准的OpenMV Cam,这是 (2.8 / 3.984) * 656。这是以mm为单位的镜头焦距,除以X方向的相机传感器长度,再乘以X方向上相机传感器的像素数(适用于OV7725相机)。fy
是相机Y方向的焦距(像素)。对于标准的OpenMV Cam,这是 (2.8 / 2.952) * 488。这是以mm为单位的镜头焦距,除以Y方向的相机传感器长度,再乘以Y方向上相机传感器的像素数(适用于OV7725相机)。cx
是图像中心,即image.width()/2
。这不是roi.w()/2
。cy
是图像中心,即image.height()/2
。这不是roi.h()/2
。不支持压缩图像。
此方法在 OpenMV Cam M4 上不可用。
- find_datamatrices([roi[, effort=200]])¶
查找
roi
内的所有数据矩阵,并返回一个image.datamatrix
对象列表。请参阅image.datamatrix
对象以获取更多信息。为使此方法有效工作,图像中的数据矩阵需要相对平坦。您可以通过以下方式实现图像更平坦,不受镜头畸变影响:使用
sensor.set_windowing()
函数放大镜头中心,使用Image.lens_corr()
消除镜头桶形失真,或者更换镜头为具有较窄视场的镜头。有一些机器视觉镜头可用,它们不会导致桶形失真,但价格比OpenMV提供的标准镜头高得多。roi
是感兴趣区域的矩形元组(x, y, w, h)。如果未指定,则等于图像矩形。仅操作roi
内的像素。effort
控制尝试查找数据矩阵匹配的时间量。默认200对于所有用例应该很好。但是,您可以增加effort,以牺牲帧速率来增加检测。您也可以降低effort来增加帧速率,但是会牺牲检测率……请注意,当effort
设置低于160左右时,将不再检测到任何内容。还要注意,可以使effort
设置的尽可能高。但是,高于240左右的任何值都不会导致检测率显著增加。此方法在 OpenMV Cam M4 上不可用。
- find_barcodes([roi])¶
查找
roi
内的所有一维条形码,并返回一个image.barcode
对象列表。请参阅image.barcode
对象以获取更多信息。为获得最佳结果,请使用640 x 40/80/160窗口。垂直分辨率越低,所有操作运行速度越快。由于条形码是线性1D图像,因此您只需在一个方向上拥有很高的分辨率,在另一个方向上只需要很少的分辨率。请注意,此函数水平和垂直扫描,因此您可以使用40/80/160 x 480窗口。最后,请确保调整镜头,使条形码位于焦距产生最清晰图像的位置。模糊的条形码无法解码。
此函数支持所有这些一维条形码(基本上是所有条形码):
roi
是感兴趣区域的矩形元组(x, y, w, h)。如果未指定,则等于图像矩形。仅操作roi
内的像素。此方法在 OpenMV Cam M4 上不可用。
- find_displacement(template[, roi[, template_roi[, logpolar=False]]])¶
查找此图像相对于模板的平移偏移。此方法可用于光流。此方法返回一个包含使用相位相关性进行位移计算结果的
image.displacement
对象。roi
是要处理的感兴趣区域矩形 (x, y, w, h)。如果未指定,则等于图像矩形。template_roi
是要处理的模板感兴趣区域矩形 (x, y, w, h)。如果未指定,则等于图像矩形。roi
和template
的roi必须具有相同的w/h,但可以具有图像中的任何x/y位置。您可以在较大的图像周围滑动较小的感兴趣区域以获取光流梯度图像……Image.find_displacement()
通常计算两个图像之间的x/y平移。但是,如果传递logpolar=True
,它将找到两个图像之间的旋转和缩放更改。相同的image.displacement
对象结果编码了两种可能的响应。不支持压缩图像或 Bayer 图像。
备注
请在2的幂图像尺寸上使用此方法(例如
sensor.B64X64
)。不支持压缩图像或 Bayer 图像。
此方法在 OpenMV Cam M4 上不可用。
- find_template(template, threshold[, roi[, step=2[, search=image.SEARCH_EX]]])¶
尝试在图像中找到模板匹配的第一个位置,使用归一化互相关。如果找到匹配位置,则返回一个边界框元组 (x, y, w, h),否则返回None。
template
是要与此图像对象匹配的小图像对象。请注意,两个图像都必须是灰度图像。threshold
是一个浮点数(0.0-1.0),其中较高的阈值可以防止错误的正检率,同时降低检测率,而较低的阈值则相反。roi
是感兴趣区域的矩形元组(x, y, w, h)。如果未指定,则等于图像矩形。仅操作roi
内的像素。step
是在查找模板时要跳过的像素数。跳过像素可以大大加快算法速度。这仅影响SEARCH_EX模式下的算法。search
可以是image.SEARCH_DS
或image.SEARCH_EX
。image.SEARCH_DS
使用比image.SEARCH_EX
更快的算法搜索模板,但可能无法在图像边缘附近找到模板。image.SEARCH_EX
对图像进行穷举搜索,但比image.SEARCH_DS
慢得多。仅适用于灰度图像。
- find_features(cascade[, threshold=0.5[, scale=1.5[, roi]]])¶
此方法在图像中搜索所有与传入的Haar级联匹配的区域,并返回一个围绕这些特征的边界框矩形元组列表 (x, y, w, h)。如果未找到特征,则返回一个空列表。
cascade
是一个Haar级联对象。有关详细信息,请参阅image.HaarCascade()
。threshold
是一个阈值(0.0-1.0),较小的值会增加检测率,但会提高误检率。相反,较高的值会降低检测率,但会降低误检率。scale
是一个浮点数,必须大于1.0。较高的比例因子会运行得更快,但图像匹配效果会大打折扣。一个好的值介于1.35和1.5之间。roi
是感兴趣区域的矩形元组(x, y, w, h)。如果未指定,则等于图像矩形。仅操作roi
内的像素。
- find_eye(roi)¶
在眼睛周围的感兴趣区域 (x, y, w, h) 元组中搜索瞳孔。返回一个元组,其中包含图像中瞳孔的 (x, y) 位置。如果找不到瞳孔,则返回 (0,0)。
要使用此函数,首先使用
Image.find_features()
和frontalface
HaarCascade找到某人的面部。然后使用Image.find_features()
和eye
HaarCascade找到面部上的眼睛。最后,在由Image.find_features()
返回的眼睛ROI上调用此方法,以获取瞳孔坐标。roi
是感兴趣区域的矩形元组(x, y, w, h)。如果未指定,则等于图像矩形。仅操作roi
内的像素。仅适用于灰度图像。
- find_lbp(roi)¶
从感兴趣区域 (x, y, w, h) 元组中提取LBP(局部二值模式)关键点。然后可以使用
image.match_descriptor()
函数比较两组关键点以获取匹配距离。roi
是感兴趣区域的矩形元组(x, y, w, h)。如果未指定,则等于图像矩形。仅操作roi
内的像素。仅适用于灰度图像。
- find_keypoints([roi[, threshold=20[, normalized=False[, scale_factor=1.5[, max_keypoints=100[, corner_detector=image.CORNER_AGAST]]]]]])¶
从感兴趣区域 (x, y, w, h) 元组中提取ORB关键点。然后可以使用
image.match_descriptor()
函数比较两组关键点以获取匹配区域。如果未找到关键点,则返回None。roi
是感兴趣区域的矩形元组(x, y, w, h)。如果未指定,则等于图像矩形。仅操作roi
内的像素。threshold
是一个数字(介于0 - 255之间),控制提取的角点数量。对于默认的AGAST角点检测器,此值应该大约为20。对于FAST角点检测器,此值应该大约为60-80。阈值越低,提取的角点就越多。normalized
是一个布尔值,如果为True,则关闭在多个分辨率提取关键点。如果您不关心处理缩放问题,并希望算法运行得更快,则将其设置为true。scale_factor
是一个浮点数,必须大于1.0。较高的比例因子会运行得更快,但图像匹配效果会大打折扣。一个好的值介于1.35和1.5之间。max_keypoints
是一个关键点对象可以持有的最大关键点数。如果关键点对象太大并导致内存不足问题,则减小此值。corner_detector
是用于提取图像关键点的角点检测算法。可以是image.CORNER_FAST
或image.CORNER_AGAST
。FAST角点检测算法速度更快,但准确度较低。仅适用于灰度图像。
- find_edges(edge_type[, threshold])¶
将图像转换为黑白图像,仅保留边缘为白色像素。
image.EDGE_SIMPLE - 简单的阈值高通滤波算法。
image.EDGE_CANNY - Canny边缘检测算法。
threshold
是包含低阈值和高阈值的两个值的元组,您可以通过调整这些值来控制边缘的质量。默认为 (100, 200)。仅适用于灰度图像。
- find_hog([roi[, size=8]])¶
用HOG(方向梯度直方图)线替换ROI中的像素。
roi
是感兴趣区域的矩形元组(x, y, w, h)。如果未指定,则等于图像矩形。仅操作roi
内的像素。仅适用于灰度图像。
此方法在 OpenMV Cam M4 上不可用。
- stero_disparity([reversed=False[, max_disparity=64[, threshold=64]]])¶
采用双倍宽度的灰度图像,其中包含两个摄像头传感器的输出并将其中一个图像替换为立体视差图像,其中每个像素表示深度。例如,如果您有两个320x240相机,则此方法需要一个640x240图像。
reversed
默认情况下,将左图像与右图像进行比较,然后替换右图像。传递true以将右图像与左图像进行比较并替换左图像。备注
该算法仅适用于左->右或右->左比较。如果您的相机设置不匹配,则会得到无用的结果。
max_disparity
是使用绝对差值算法搜索匹配像素块的最大距离。较大的值需要指数级的搜索时间,但会产生更高质量的图像。较小的值使算法运行更快,但可能会产生无意义的输出。threshold
如果两个块之间的绝对差值之和小于或等于此阈值,则认为它们匹配。此方法仅适用于Arduino Portenta。
备注
即使在我们最好的SIMD努力下,该算法在Cortex-M7处理器上也不是实时的。这只是一个玩具示例算法,展示立体视差。
常量¶
- image.BINARY¶
二进制(位图)像素格式。每个像素为1位。
- image.GRAYSCALE¶
灰度像素格式。每个像素为8位,即1字节。
- image.RGB565¶
RGB565像素格式。每个像素为16位,即2字节。5位用于红色,6位用于绿色,5位用于蓝色。
- image.BAYER¶
原始BAYER图像像素格式。如果尝试将帧大小设置得太大而无法适应帧缓冲区,则OpenMV Cam将像素格式设置为BAYER,以便您可以捕获图像,但不会进行任何图像处理方法。
- image.YUV422¶
非常容易进行JPEG压缩的像素格式。每个像素都存储为一个灰度8位Y值,后跟交替的8位U/V颜色值,这些值在两个Y值之间共享(8位Y1,8位U,8位Y2,8位V,等等)。只有一些图像处理方法适用于YUV422。
- image.JPEG¶
JPEG图像。
- image.PNG¶
PNG图像。
- image.PALETTE_RAINBOW¶
OpenMV Cam的默认热像仪颜色调色板,使用平滑的颜色轮。
- image.PALETTE_IRONBOW¶
使用非常非线性的颜色调色板使图像看起来像FLIR Lepton热成像。
- image.AREA¶
在缩小图像时使用区域缩放(放大时使用最近邻方法)。
当缩小图像以获得最高的视觉质量时,应使用区域缩放。
- image.BILINEAR¶
在放大图像时使用双线性缩放。这会产生良好质量的缩放图像输出,并且速度较快。
当缩小图像时,此方法将对输入图像进行子采样以生成缩小的图像。如果不考虑速度,则使用
image.AREA
获得最高质量的缩小图像。
- image.BICUBIC¶
在放大图像时使用双三次插值。这会产生高质量的缩放图像输出,但速度较慢。
当缩小图像时,此方法将对输入图像进行子采样以生成缩小的图像。如果不考虑速度,则使用
image.AREA
获得最高质量的缩小图像。
- image.VFLIP¶
垂直翻转由
draw_image
绘制的图像。
- image.HMIRROR¶
水平镜像由
draw_image
绘制的图像。
- image.TRANSPOSE¶
转置(交换x/y)由
draw_image
绘制的图像。
- image.CENTER¶
将要绘制的图像居中绘制到其绘制的图像/画布中。传递的任何x/y偏移量将通过该偏移量将要绘制的图像从中心移动。
- image.EXTRACT_RGB_CHANNEL_FIRST¶
使用
draw_image
从RGB图像中提取RGB通道,首先提取通道,然后进行缩放,以避免任何伪影。
- image.APPLY_COLOR_PALETTE_FIRST¶
使用
draw_image
将颜色查找表应用于图像时,首先应用颜色查找表,然后进行缩放,以避免任何伪影。
- image.SCALE_ASPECT_KEEP¶
将要绘制的图像缩放到绘制的图像/画布内部,同时保持纵横比。除非图像的纵横比匹配,否则绘制的图像将不完全覆盖绘制的图像/画布。传递的任何x_scale/y_scale值还将缩放缩放后的图像。
- image.SCALE_ASPECT_EXPAND¶
将要绘制的图像缩放以填充绘制的图像/画布,同时保持纵横比。除非图像的纵横比匹配,否则将裁剪绘制的图像。传递的任何x_scale/y_scale值还将缩放缩放后的图像。
- image.SCALE_ASPECT_IGNORE¶
将要绘制的图像缩放以填充绘制的图像/画布。这不会保持绘制的图像的纵横比。传递的任何x_scale/y_scale值还将缩放缩放后的图像。
- image.ROTATE_90¶
将图像旋转90度(这只是
image.VFLIP
与image.TRANSPOSE
进行“或”运算)。
- image.ROTATE_180¶
将图像旋转180度(这只是
image.HMIRROR
与image.VFLIP
进行“或”运算)。
- image.ROTATE_270¶
将图像旋转270度(这只是
image.HMIRROR
与image.TRANSPOSE
进行“或”运算)。
- image.BLACK_BACKGROUND¶
在黑色目标图像上绘制图像时加快
draw_image
的速度,当使用需要读取源像素和目标像素的alpha效果时,跳过读取目标像素。
- image.SEARCH_EX¶
详尽的模板匹配搜索。
- image.SEARCH_DS¶
更快的模板匹配搜索。
- image.EDGE_CANNY¶
使用Canny边缘检测算法进行图像边缘检测。
- image.EDGE_SIMPLE¶
使用简单的阈值高通滤波算法进行图像边缘检测。
- image.CORNER_FAST¶
针对 ORB 关键点的更快、精度更低的角点检测算法。
- image.CORNER_AGAST¶
针对ORB关键点的较慢且准确度较高的角点检测算法。
- image.TAG16H5¶
TAG1H5标签族位掩码枚举。用于AprilTags。
- image.TAG25H7¶
TAG25H7标签族位掩码枚举。用于AprilTags。
- image.TAG25H9¶
TAG25H9标签族位掩码枚举。用于AprilTags。
- image.TAG36H10¶
TAG36H10标签族位掩码枚举。用于AprilTags。
- image.TAG36H11¶
TAG36H11标签族位掩码枚举。用于AprilTags。
- image.ARTOOLKIT¶
ARTOOLKIT标签族位掩码枚举。用于AprilTags。
- image.EAN2¶
EAN2条形码类型枚举。
- image.EAN5¶
EAN5条形码类型枚举。
- image.EAN8¶
EAN8条形码类型枚举。
- image.UPCE¶
UPCE条形码类型枚举。
- image.ISBN10¶
ISBN10条形码类型枚举。
- image.UPCA¶
UPCA条形码类型枚举。
- image.EAN13¶
EAN13条形码类型枚举。
- image.ISBN13¶
ISBN13条形码类型枚举。
- image.I25¶
I25条形码类型枚举。
- image.DATABAR¶
DATABAR条形码类型枚举。
- image.DATABAR_EXP¶
DATABAR_EXP条形码类型枚举。
- image.CODABAR¶
CODABAR条形码类型枚举。
- image.CODE39¶
CODE39条形码类型枚举。
- image.PDF417¶
PDF417条形码类型枚举 - 未来(例如,目前无法正常工作)。
- image.CODE93¶
CODE93条形码类型枚举。
- image.CODE128¶
CODE128条形码类型枚举。