OpenMV图像处理的方法1

OpenMV图像处理的方法

图像处理这一部分在Maixpy里面也接触过,一次生二次熟,刚好查漏补缺一下啊,这个OpenMv的博客肯定是那个长头发的姐姐写的,说话方式和语气词都和视频里面一样,而且只有女生才会写的这么细吧,太适合小白我了,啊哈,继续学习。

感光元件

sensor模块,是用于设置感光元件的参数。基本上新建一个文件夹的时候,都会自动生成一段代码,就是在设置感光元件的参数,如下:
在这里插入图片描述

import sensor#引入感光元件的模块
# 设置摄像头
sensor.reset()#初始化感光元件
sensor.set_pixformat(sensor.RGB565)#设置像素模式为彩色
sensor.set_framesize(sensor.QVGA)#设置图像的大小
sensor.skip_frames()#跳过n张照片,在更改设置后,跳过一些帧,等待感光元件变稳      定。

# 一直拍照
while(True):
    img = sensor.snapshot()#拍摄一张照片,img为一个image对象

注:在使用颜色追踪时,需要关闭自动增益sensor.set_auto_gain()和自动白平衡sensor.set_auto_whitebal() ,开启(True)或者关闭(False)。

除了开头常用到的,还有以下两点

设置窗口ROI
sensor.set_windowing(roi),图像处理中的术语为“感兴趣区”,就是在要处理的图像中提取出的要处理的区域。
如下,选取高分辨率区域。

sensor.set_framesize(sensor.VGA) # 高分辨率
sensor.set_windowing((640, 80)) #取中间的640*80区域

设置翻转
水平方向翻转:sensor.set_hmirror(True)
垂直方向翻转:sensor.set_vflip(True)

图像的基本运算

获取/设置像素点

获取像素点 image.get_pixel(x, y)
对于灰度图: 返回(x,y)坐标的灰度值
对于彩色图: 返回(x,y)坐标的(r,g,b)的tuple

设置像素点 image.set_pixel(x, y, pixel)
eg :

img = sensor.snapshot()
img.get_pixel(10,10)
img.set_pixcel(10,10,(255,0,0))#设置坐标(10,10)的像素点为红色(255,0,0)

获取图像的宽度和高度

image.width() 返回图像的宽度(像素)
image.height() 返回图像的高度(像素)
image.format() 灰度图会返回 sensor.GRAYSCALE,彩色图会返回 sensor.RGB565。
image.size() 返回图像的大小(byte)

感觉又强制性得复习了单词,英语在手,天下所有啊。
在这里插入图片描述

图像的运算

image.invert() 取反,对于二值化的图像,0(黑)变成1(白),1(白)变成0(黑)。

注:图像可以是另一个image对象,或者是从 (bmp/pgm/ppm)文件读入的image对象。两个图像都必须是相同的尺寸和类型(灰度图/彩色图)。

image.nand(image) 与另一个图片进行与非(NAND)运算。

image.nor(image) 与另一个图片进行或非(NOR)运算。

image.xor(image) 与另一个图片进行异或(XOR)运算。

image.xnor(image) 与另一个图片进行异或非(XNOR)运算。

image.difference(image) 从这张图片减去另一个图片。比如,对于每个通道的每个像素点,取相减绝对值操作。这个函数,经常用来做移动检测

图像的统计信息Statistics

roi的格式是(x, y, w, h)的tupple.
x:ROI区域中左上角的x坐标
y:ROI区域中左上角的y坐标
w:ROI的宽度
h:ROI的高度
roi是目标区域。注意,这里的roi,bins之类的参数,一定要显式地标明,
eg:

img.get_statistics(roi=(0,0,10,20))

注:img.get_statistics((0,0,10,20)),ROI不会起作用
长发姐姐已经总结得很通俗了,我就搬过来记录一下。
灰度
statistics.mean() 返回灰度的平均数(0-255) (int)。你也可以通过statistics[0]获得。
statistics.median() 返回灰度的中位数(0-255) (int)。你也可以通过statistics[1]获得。
statistics.mode() 返回灰度的众数(0-255) (int)。你也可以通过statistics[2]获得。
statistics.stdev() 返回灰度的标准差(0-255) (int)。你也可以通过statistics[3]获得。
statistics.min() 返回灰度的最小值(0-255) (int)。你也可以通过statistics[4]获得。
statistics.max() 返回灰度的最大值(0-255) (int)。你也可以通过statistics[5]获得。
statistics.lq() 返回灰度的第一四分数(0-255) (int)。你也可以通过statistics[6]获得。
statistics.uq() 返回灰度的第三四分数(0-255) (int)。你也可以通过statistics[7]获得。

LAB三个通道:

l_mean,l_median,l_mode,l_stdev,l_min,l_max,l_lq,l_uq,
a_mean,a_median,a_mode,a_stdev,a_min,a_max,a_lq,a_uq,
b_mean,b_median,b_mode,b_stdev,b_min,b_max,b_lq,b_uq,
平均数,中位数,众数,标准差,最小值,最大值,第一四分数,第三四分数。

例程:检测左上方的区域中的颜色值(摄像头寻找维尼眼睛晃动了,颜色值不稳定)
在这里插入图片描述

画图

比如用在表示已找到的颜色模块。这个和那个寻找绿色的例程很像。其中的color关键字必须显示的标明color=

image.draw_line((10,10,20,30), color=(255,0,0))
image.draw_rectangle(rect_tuple, color=(255,0,0))

画线
image.draw_line(line_tuple, color=White) 在图像中画一条直线。颜色默认为白色。
line_tuple的格式是**(x0, y0, x1, y1)**,意思是(x0, y0)到(x1, y1)的直线。
画框
image.draw_rectangle(rect_tuple, color=White) 在图像中画一个矩形框。
rect_tuple 的格式是 (x, y, w, h)
画圆
image.draw_circle(x, y, radius, color=White) 在图像中画一个圆。
x,y是圆心坐标。
radius是圆的半径。
画十字
image.draw_string(x, y, text, color=White) 在图像中写字 8x10的像素。
x,y是坐标。
使用\n, \r, and \r\n会使光标移动到下一行。
text是要写的字符串。

例程:

import sensor, image, time

sensor.reset() # 初始化摄像头
sensor.set_pixformat(sensor.RGB565) # 格式为 RGB565.
sensor.set_framesize(sensor.QQVGA)
sensor.skip_frames(10) # 跳过10帧,使新设置生效
while(True):
    img = sensor.snapshot()         # Take a picture and return the image.
    img.draw_line((20, 30, 40, 50))
    img.draw_line((80, 50, 100, 100), color=(255,0,0))
    img.draw_rectangle((20, 30, 41, 51), color=(255,0,0))
    img.draw_circle(50, 50, 30)
    img.draw_cross(90,60,size=10)
    img.draw_string(10,10, "hello world!")

在这里插入图片描述

  • 9
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值