我们了解了图像的大小,现在来处理一下图像的颜色。毕竟我们后面有颜色识别,先了解一下图像的颜色相关知识吧~
咸鱼出品,能用就行~
选用版本:v831-m2dock-maixpy3-0.5.0-20220601
一幅完整的图像,是由红色、绿色、蓝色三个通道组成的。红色、绿色、蓝色三个通道的缩览图都是以灰度显示的。
灰度图像是一个数据占8位的颜色图像,位深度就是8,用28表示,每个存储1个像素一般可以存放8位二进制,它含会有28=256种颜色(或者256种灰度等级)。那么灰度图像中每个像素点就会有1个数值,这个数值即为像素值(范围0-255).
下图是灰度图像
如果用0~255数值表示,灰度图像就转化为了数字图像
同理呀,按照数字图像,把对应的像素值图上对应的灰白灰颜色,我们就会将其转换为对应的灰度图。
数字图像:
是以二维数字组形式表示的图像
数字图像的数据可以用矩阵来表示,这个矩阵表示形式如下。
图像的坐标和现实的坐标有些不一样,相对图像来说,左上角为图像坐标的原点,横纵轴依然是X轴Y轴,不同的是,Y轴是反方向的。相应的宽就是图像X轴的长度,高是图像的Y轴的长度。在视觉工具使用中要注意图像坐标系统。
注意:为了表示像素之间的相对和绝对位置,通常要对像素位值坐标进行约定。(玩硬件的时候按照约定的坐标去获取值即可。X轴Y轴互换也不要紧,只要你使用前约定好就行。)
又叫二值图像,即像素只有黑,白两种颜色。0表示黑色,1表示白色。
三原色RGB(红绿蓝)是计算机显示彩色图像时采用最多的模型。3通道(每个通道28)2(3*8)约为为1600万种颜色。
一、导入模块
from maix import image
#maix_vision 类是对于图像的一系列操作方法的集合
maix_vision.get_blob_color(roi = (0, 0, 0, 0), critical = 0, co = 0)
# 统计函数,得到图像选定区域的最大颜色值.
1. roi 是选定区域的矩形元组(x,y,w,h)
2. critical为返回值区域范围,简单将统计到的最大颜色值和critical相加或相减,当为0时,返回原来的色值.
3. co为返回的颜色空间模型.可选为
-0 rgb
-1 lab
-2 hsv
返回值:
- 当co为0时返回[r, g, b]
- 当co为1时返回[L - critical, A - critical, B - critical, L + critical, A + critical, B + critical]
当co为2时同1
______________________________________________________________________________________________
maix_vision.find_blobs(thresholds, roi = (0,0,0,0), x_stride = 2, y_stride = 2, invert = 0, area_threshold = 10, pixels_threshold = 10, merge = 0, margin = 0, tilt = 0, co = 1)
# 查找指定色块,返回色块位值列表。
1. thresholds 必须是元组列表. [(minL, minA, minB, maxL, maxA, maxB)]
2. roi 是感兴趣区域的矩形元组(x,y,w,h)
3. x_stride 是查找某色块时需要跳过的x像素的数量。 若已知色块较大,可增加 x_stride 来提高查找色块的速度。
4. y_stride 是查找某色块时需要跳过的y像素的数量。 若已知色块较大,可增加 y_stride 来提高查找色块的速度。
5. invert 反转阈值操作,像素在已知颜色范围之外进行匹配,而非在已知颜色范围内。
6. 若一个色块的边界框区域小于 area_threshold ,则会被过滤掉。
7. 若一个色块的像素数小于 pixels_threshold ,则会被过滤掉。
8. merge 若为True,则合并所有没有被过滤掉的色块,这些色块的边界矩形互相交错重叠。
9. margin 可在相交测试中用来增大或减小色块边界矩形的大小。例如:边缘为1、相互间边界矩形为1的色块将被合并。
10.tilt设置是否查找最小斜矩形框,为0则不查找
11.co为返回的颜色空间模型.可选为,如果不是特殊需要,请保持默认
-0 rgb
-1 lab
-2 hsv
-3 灰度
返回值:[{'x': 140, 'y': 88, 'w': 15, 'h': 7, 'pixels': 43, 'cx': 147, 'cy': 91}]
(x, y, w, h)色块的外框,pixels,色块的像素大小,(cx, cy)色块的中心点.
lab模型(写过了有兴趣自己看):LAB色彩模型
from maix import image
img=image.open('root/app/kxian.png').resize(160,240)
a=img.get_blob_color(roi = (10, 20, 20, 40), critical = 0, co = 0)
print(a) # rgb模式显示
b=img.get_blob_color(roi = (10, 20, 20, 40), critical = 0, co = 1)
print(b) # lab模式显示
c=img.get_blob_color(roi = (10, 20, 20, 40), critical = 0, co = 2)
print(c) # hsv模式显示
注意:roi按默认设置即可。
# 初始化(默认的)
maix_vision.find_blobs(thresholds, roi = (0,0,0,0), x_stride = 2, y_stride = 2, invert = 0, area_threshold = 10, pixels_threshold = 10, merge = 0, margin = 0, tilt = 0, co = 1)
# thresholds 检测目标
from maix import image
img=image.open('root/app/kxian.png').resize(160,240)
green = [(28,-36,-14,68,-5,15)]
a=img.find_blobs(green)
print(a)
roi设置范围
from maix import image
img=image.open('root/app/kxian.png').resize(160,240)
green = [(28,-36,-14,68,-5,15)]
a=img.find_blobs(green , roi = (10,10,20,20)) # roi设置范围
print(a)
参数rgb,co=0
from maix import image
img=image.open('root/app/kxian.png').resize(160,240)
green = [(0,0,0)] # 参数也为rgb
a=img.find_blobs(green,co=0) # co=0 rgb模式
print(a)