精华内容
下载资源
问答
  • OpenMV参数标定

    千次阅读 2017-11-30 22:25:09
    相机参数分为内参(4个) 、畸变参数(径向和切向共5个)和外参 (平移和旋转共6个) 所谓相机内参数误差即针孔成像模型下由于中心轴安装问题造成的精度误差 矩阵表示(A) [fx 0 cx; 0 fy cy; 0 0 1]   畸变(distortion)是...

    相机参数分为内参(4个) 、畸变参数(径向和切向共5个)和外参 (平移和旋转共6个)

    所谓相机内参数误差即针孔成像模型下由于中心轴安装问题造成的精度误差

    矩阵表示(A) [fx 0 cx; 0 fy cy; 0 0 1]

     

    畸变(distortion)是对直线投影(rectilinear projection)的偏移

    所谓相机畸变误差即使用透镜(针孔成像采光效率不高)造成:

    径向畸变    由于透镜形状,在成像仪中心(光学中心)的畸变为0,但越靠近边缘畸变越严重,参数为k1、k2、k3,其中k3是可选参数

    切向畸变    相机安装过程中,当透镜不完全平行于图像平面的时候会产生旋转和平移,对外参数(旋转角度和平移方向)产生直接影响

     

    专业术语:

    内参矩阵      Intrinsic Matrix

    焦距          Focal Length

    主点          Principal Point

    径向畸变      Radial Distortion

    切向畸变      Tangential Distortion

    旋转矩阵      Rotation Matrices

    平移向量      Translation Vectors

    平均重投影误差    Mean Reprojection Error

    重投影误差    Reprojection Errors

    重投影点       ReprojectedPoints

     

    世界坐标系(world coordinate)(xw,yw,zw) 也称为测量坐标系,三维直角坐标系,以其为基准描述相机和待测物体的空间位置,根据实际情况自由确定

     

    相机坐标系(camera coordinate)(xc,yc,zc)   三维直角坐标系,原点位于镜头光心处,x、y轴分别与相面的两边平行,z轴为镜头光轴,与像平面垂直

     

    像素坐标系(pixel coordinate) uov         二维直角坐标系,反映相机CCD/CMOS芯片中像素的排列情况,原点o位于图像的左上角,u轴、v轴分别于像面的两边平行,坐标轴单位为像素,像素坐标系不利于坐标变换,需建立图像坐标系XOY,其坐标轴的单位通常为毫米(mm),原点为相机光轴与相面的交点 (主点,图像中心点),X、Y轴分别与u、v轴平行,故坐标系实为平移关系,即可通过平移得到

     

    Matlab标定方案

    1、打印一张棋盘格,把它贴在一个平面上,作为标定物。

    2、通过调整标定物或摄像机的方向,为标定物拍摄一些不同方向的照片。

    3、从照片中提取棋盘格角点。

    4、估算理想无畸变的情况下,五个内参和六个外参。

    5、应用最小二乘法估算实际存在径向畸变下的畸变系数。

    6、极大似然法,优化估计,提升估计精度。

    打开matlab,找到“Camera Calibrator”并打开

    在新窗口中选择添加图片“Add Images”

    添加图片之后,设置棋盘格的实际大小之后,点击ok

    点击“Calibrate”开始计算

    点击“Export Camera Parameters”,输出到matlab命令窗口

     

    实际使用时拍摄图像组的视野相类似,角度和位置略有不同,主要改变拍摄角度,matlab会自行选择较好的图片序列来进行计算,为获得完整的参数,需要为RadialDistortion选中3 Coefficients,并勾选TangentialDistortion

    运行时使用了6张320*240-jpeg图像,棋盘格间距为28.5mm,获得参数如下:

    cameraParams.IntrinsicMatrix

        281.1436        0       0

             0      280.4285    0

       160.9044     106.9604 1.0000

    cameraParams.TangentialDistortion

    0.0039   0.0011

    cameraParams.RadialDistortiOpenMVon

    -0.4402   0.1956   -0.0326

    fx  281.1436

    fy  280.4285

    cx  160.9044

    cy  106.9604

    k1  0.0039

    k2  0.0011

    p1  -0.4402

    p2  0.1956

    k3  -0.0326

    展开全文
  • OpenMV新手上路1 -- OpenMV简介、参数描述

    万次阅读 多人点赞 2020-07-07 17:27:00
    OpenMV项目创造一款低价,可扩展,支持Python的机器视觉模块,这个模块的目标是成为“机器视觉世界的Arduino “ 简介 1.什么是OpenMV? 简单的说就是一款可编程的摄像头模组,以OpenMV国内代理–星瞳科技的OpenMV...

    OpenMV项目创造一款低价,可扩展,支持Python的机器视觉模块,这个模块的目标是成为“机器视觉世界的Arduino “
    在这里插入图片描述


    简介

    1.什么是OpenMV?

    简单的说就是一款可编程的摄像头模组,以OpenMV国内代理–星瞳科技的OpenMV产品来说,只需要针对应用场景编写程序逻辑即可实现复杂的视觉处理功能,因为复杂的机器视觉算法已经由厂家解决了
    在这里插入图片描述
    博主手头的OpenMV型号为OpenMV3 Cam M7,30万像素,足以完成一些简单的视觉识别功能

    2.OpenMV能做什么?

    如上所说,简单的图像识别或更再进阶的视觉处理等,如颜色识别,形状识别,矩阵识别,机器人巡线,圆形识别,直线识别,人脸识别,眼球识别,边缘检测等
    部分功能需要搭配OpenMV其他配件实现

    3.学习OpenMV需要什么准备?

    OpenMV搭载了microPython解释器,这就需要有些编程基础去编写程序逻辑实现功能了,即至少需要明白 if else 这些逻辑关键词,以及变量赋值简单运算等,同时对硬件的IO,串口,I2C等有一点了解
    OpenMV有专属的编译平台 – OpenMV IDE,编译平台支持Python语言进行编程调试,并带有多种OpenMV示例,对于新手学习来说再好不过了

    4.OpenMV不适用于哪些地方?

    • 高像素任务,OpenMV(以型号OpenMV3 Cam M7为例)只有30万像素,通常使用320_240的分辨率来处理图像,OpenMV3 Cam M7采集图像采集图像分辨率最高可以达到640_480,无法获得更高的像素。(后续可能会有高像素型号发布
    • 复杂算法,比如OCR识别,车牌识别,猫狗分类,深度学习之类的。

    参数

    1.摄像头参数

    STM32F765VI ARM Cortex M7 处理器,216 MHz ,512KB RAM,2 MB flash. 所有的 I/O 引脚输出 3.3V 并且 5V 耐受。这个处理器有以下的IO接口

    • 全速 USB (12Mbs) 接口,连接到电脑。当插入OpenMV摄像头后,你的电脑会出现一个虚拟COM端口和一个“U盘”
    • μSD卡槽拥有100Mbs读写,这允许你的OpenMV摄像头录制视频,和把机器视觉的素材从SD卡提取出来
    • 一个SPI总线高达54Mbs速度,允许你简单的把图像流数据传给LCD扩展板,WiFi扩展板,或者其他控制器
    • 一个 I2C总线,CAN总线, 和一个异步串口总线 (TX/RX) ,用来链接其他控制器或者传感器
    • 一个12-bit ADC 和一个12-bit DAC
    • 3个 I/O 引脚用于舵机控制
    • 所有的IO口都可以用于,中断和PWM(板子上有10个I/O引脚)
    • 一个RGB LED(三色), 两个高亮的 850nm IR LED(红外)

    2.目前可完成的应用

    • Frame Differencing帧差分算法
    • Color Tracking颜色追踪
    • Marker Tracking标记跟踪
    • Face Detection人脸检测
    • Eye Tracking眼动跟踪
    • Optical Flow光流
    • QR Code Detection/Decoding二维码检测/解码
    • Data Matrix Detection/Decoding矩阵码检测/解码
    • Linear Barcode Decoding条形码
    • AprilTag Tracking标记跟踪
    • Line Detection直线检测
    • Circle Detection圆形检测
    • Rectangle Detection圆形检测
    • Template Matching模板匹配
    • Image Capture图像捕捉
    • Video Recording视频录制

    3.引脚定义

    在这里插入图片描述

    4.尺寸

    在这里插入图片描述

    5.规格

    分类参数
    处理器ARM® 32-bit Cortex®-M7 CPU
    w/ Double Precision FPU
    216 MHz (462 DMIPS)
    Core Mark Score: 1082
    (compare w/ Raspberry Pi Zero: 2060)
    RAM Layout128KB .DATA/.BSS/Heap/Stack
    384KB Frame Buffer/Stack
    (512KB Total)
    Flash Layout32KB Bootloader
    96KB Embedded Flash Drive
    1920KB Firmware
    (2MB Total)
    支持的图像格式Grayscale
    RGB565
    JPEG (and BAYER)
    最大支持的像素Grayscale: 640×480 and under
    RGB565: 320×240 and under
    Grayscale JPEG: 640×480 and under
    RGB565 JPEG: 640×480 and under
    镜头信息焦距: 2.8mm
    光圈: F2.0
    尺寸: 1/3″
    视角: 115°
    安装: M12*0.5
    红外滤光片(截断红外光): 650nm (可拆卸)
    电气信息所有引脚均可承受5V电压,输出电压为3.3V。所有引脚都可以提供最高25mA的拉电流(source)或灌电流(sink)。在ADC或DAC模式下,P6不能承受5V电压。引脚总共可提供最高120mA的拉电流(source)或灌电流(sink)。VIN可以在3.6V和5V之间。不要从OpenMV Cam的3.3V引脚输出超过250mA的电流。
    重量16g
    长度45mm
    宽度36mm
    高度30mm

    6.功耗

    空闲 – 无SD卡110mA @ 3.3V
    空闲 – 有SD卡110mA @ 3.3V
    运行 – 无SD卡190mA @ 3.3V
    运行 – 有SD卡200mA @ 3.3V

    7.温度范围

    存储-40°C to 125°C
    运行-20°C to 70°C
    展开全文
  • OpenMV自学笔记

    千次阅读 2020-09-11 16:51:09
    #OpenMV自学笔记 ##目的 学习OpenMV是为了准备农业机器人大赛,也是为了后续课题中使用图像处理。主要目的是:使用OpenMV识别到物体(色块),并将色块信息(位置、大小等)输出到STM32单片机上,通过单片机操纵机械...

    OpenMV自学笔记1

    目的

    学习OpenMV是为了准备农业机器人大赛,也是为了后续课题中使用图像处理。主要目的是:使用OpenMV识别到物体(色块),并将色块信息(位置、大小等)输出到arduino单片机上,通过单片机操纵机械臂对物体进一步操作。

    笔记内容

    主要学习星瞳科技的OpenMV教程,以下为笔记内容:

    寻找色块

    目的:找到色块。
    示例位置:文件->示例->Color-Tracking->single_color rgb565 blob tracking.py
    for blob in img.find_blobs(thresholds, roi=Auto, x_stride=2, y_stride=1, invert=False, area_threshold=10, pixels_threshold=10, merge=False, margin=0, threshold_cb=None, merge_cb=None)
    这里参数众多,以下只记录对我有用的部分,完整查看link
    1.for blob in img.find_blobs:即使用for循环遍历一个snapshot中的所有色块进行操作,其中blob为变量单个色块,find_blobs为列表,包含很多blob。
    2.thresholds:颜色的阈值,这个参数是一个列表,可以包含多个颜色,可使用阈值编辑器(工具->机器视觉->阈值编辑器->帧缓冲区 将所选物体调为白色,复制下方LAB阈值到thresholds中)选择所要颜色(这里也可以在IDE右方帧缓冲区框出色块,看着直方图LAB色彩空间调节)。
    3.x_stride与y_stride:色块在XY方向上的最小像素宽度,过滤掉过小色块。
    4.area_threshold:面积阈值,如果色块被框起来的面积小于这个值,会被过滤掉。
    5.pixels_threshold:像素个数阈值,如果色块像素数量小于这个值,会被过滤掉。

    对blob对象操作

    目的:获得色块大小、像素坐标系位置等信息。
    blob有多个方法:

    返回值代码
    色块的外框的宽度w(int)blob.w()或blob[2]
    色块的外框的高度h(int)blob.h() 或blob[3]
    色块的像素数量(int)blob.pixels() 或blob[4]
    色块的外框的中心x坐标(int)blob.cx() 或blob[5]
    色块的外框的中心y坐标(int)blob.cy() 或blob[6]
    色块的外框的面积blob.area()

    AprilTag标记跟踪

    目的:通过计算将获得的像素坐标系转换成现实中的平面坐标系(高度一定)。
    由于镜头会有畸变,因此需要对OpenMV进行标定,OpenMV自带函数库中只有image.lens_corr([strength=1.8[, zoom=1.0]])命令可以对镜头畸变进一步校正(也可购买无畸变镜头),链接如下:
    link
    link
    对OpenMV标定后需要通过AprilTag获得像素坐标系与现实平面坐标系的转化计算方法。
    制作AprilTag:工具->机器视觉->AprilTag生成器->TAG36H11(推荐),输入需要的AprilTag数,保存图片并打印出来(大小无所谓)。
    使用link中最下方的代码,并参看“AprilTag标记追踪”视频教程,获得转化计算公式。

    openMV与arduino通讯并输出XY坐标

    目的:通过openMV识别到物体位置,将其xy方向坐标发送至arduino单片机。
    星瞳科技给出三种openMV与arduino通讯方式,分别为:
    I2C(INTER IC BUS:意为IC之间总线)
    SPI(Serial Peripheral Interface:串行外设接口)
    UART(Universal Asynchronous Receiver Transmitter:通用异步收发器)
    具体例程链接如下:
    I2C: link
    SPI: link
    UART: link
    具体区别不是很懂,打算边用边试。

    经过一天挠头最终选用UART通讯方式,因为不会改I2C和ISP例程中的(转为发送int类型的xy坐标值):

    text = "Hello World!\n"
    data = ustruct.pack("<%ds" % len(text), text)
    

    其中:
    使用 “ustruct” 来生成需要发送的数据包
    “<” 把数据以小端序放进struct中
    “%ds” 把字符串放进数据流,比如:“13s” 对应的 “Hello World!\n” (13 chars).
    ustruct.pack(fmt, v1, v2, …)
    按照格式字符串 fmt 压缩参数 v1, v2, … 。返回值是参数编码后的字节对象。
    len()
    返回对象(字符、列表、元组等)长度或项目个数。
    本来是改为ustruct.pack("<ii", blob.cx(),blob.cy()),但输出为乱码,所以放弃(麻烦有懂的大神搞一下)。

    以下为识别红色并发送坐标值至arduino的openMV程序

    import sensor, image, time, math
    from pyb import UART
    
     # UART 3, and baudrate.
    uart = UART(3, 19200)
    
    threshold_index = 0 # 0 for red, 1 for green, 2 for blue
    
    # Color Tracking Thresholds (L Min, L Max, A Min, A Max, B Min, B Max)
    # The below thresholds track in general red/green/blue things. You may wish to tune them...
    thresholds = [(30, 100, 15, 127, 15, 127), # generic_red_thresholds
                  (30, 100, -64, -8, -32, 32), # generic_green_thresholds
                  (0, 30, 0, 64, -128, 0)] # generic_blue_thresholds
    
    sensor.reset()
    sensor.set_pixformat(sensor.RGB565)
    sensor.set_framesize(sensor.QVGA)
    sensor.skip_frames(time = 2000)
    sensor.set_auto_gain(False) # must be turned off for color tracking
    sensor.set_auto_whitebal(False) # must be turned off for color tracking
    clock = time.clock()
    
    while(True):
        clock.tick()
        img = sensor.snapshot()
        for blob in img.find_blobs([thresholds[threshold_index]], pixels_threshold=200, area_threshold=200, merge=True):
            # These values depend on the blob not being circular - otherwise they will be shaky.
            if blob.elongation() > 0.5:
                img.draw_edges(blob.min_corners(), color=(255,0,0))
                img.draw_line(blob.major_axis_line(), color=(0,255,0))
                img.draw_line(blob.minor_axis_line(), color=(0,0,255))
            # These values are stable all the time.
            img.draw_rectangle(blob.rect())
            img.draw_cross(blob.cx(), blob.cy())
            # Note - the blob rotation is unique to 0-180 only.
            img.draw_keypoints([(blob.cx(), blob.cy(), int(math.degrees(blob.rotation())))], size=20)
            #print(clock.fps())
            x=blob.cx()
            y=blob.cy()
            uart.write("x=%d,y=%d" %(x,y))
        if (uart.any()):
            print(uart.read())
        time.sleep(1000)
        uart.write("send over!")
        
    
    import sensor, image, time, math
    
    # Only blobs that with more pixels than "pixel_threshold" and more area than "area_threshold" are
    # returned by "find_blobs" below. Change "pixels_threshold" and "area_threshold" if you change the
    # camera resolution. "merge=True" merges all overlapping blobs in the image.
    
    while(True):
        clock.tick()
        img = sensor.snapshot()
        for blob in img.find_blobs([thresholds[threshold_index]], pixels_threshold=200, area_threshold=200, merge=True):
            # These values depend on the blob not being circular - otherwise they will be shaky.
            if blob.elongation() > 0.5:
                img.draw_edges(blob.min_corners(), color=(255,0,0))
                img.draw_line(blob.major_axis_line(), color=(0,255,0))
                img.draw_line(blob.minor_axis_line(), color=(0,0,255))
            # These values are stable all the time.
            img.draw_rectangle(blob.rect())
            img.draw_cross(blob.cx(), blob.cy())
            # Note - the blob rotation is unique to 0-180 only.
            img.draw_keypoints([(blob.cx(), blob.cy(), int(math.degrees(blob.rotation())))], size=20)
        print(clock.fps())
    

    以下为配套arduino的程序

     void setup() {
       // put your setup code here, to run once:
       Serial.begin(19200);
     }
     
     void loop() {
       // put your main code here, to run repeatedly:
       if (Serial.available()) {
         // Read the most recent byte
         byte byteRead = Serial.read();
         // ECHO the value that was read
         Serial.write(byteRead);
       }
     }
    
    展开全文
  • 官方OpenMV4.zip

    2019-09-30 12:22:17
    stm32h743,最新的openmv4代,带原理图pcb图,全开源项目,可打板使用,用python做一些简单图像识别功能
  • openmv颜色识别代码

    2019-01-22 13:35:16
    用于openmv对颜色进行识别,并且可以把识别物体的坐标发送给单片机处理。
  • 本文通过OpenMV作为是识别模块去识别被测物体(以红色小球为例),当其识别到红色小球后,判断小球中心点所在的区域信息,并将其区域标志位通过串口发送给STM32,当STM32接收到位置信息后对x轴、y轴的两个舵机参数...
  • 基于OpenMV与STM32的寻球小车 实现的小功能有: ①设别颜色小球,并自动追寻小球 ②简单测试与颜色小球的粗略距离,并且在小球10cm处停车 ③按键调节PID参数以及调节识别的颜色
  • openMVOpenMV4基础知识

    万次阅读 多人点赞 2019-07-13 17:08:43
    但是在实际使用时,这些问题可以通过在标定的过程中引入畸变参数解决,所以小孔模型仍然是目前最广泛使用的相机模型。 图像透过镜头,照在一个感光芯片上,感光芯片可以把光照的波长和强度等信息转成计算机(数字...

     

    目录

    1、模块简识

    主控:

    引脚分布及功能:

    2、图像处理背景知识

    摄像头成像原理

    像素和分辨率 

    帧率

    根据人眼的视觉效果对颜色的描述

    光源的选择一定要稳定

    镜头的焦距

    镜头的畸变

    镜头的滤片

    3、拓展

    灰度


     

    1、模块简识

    主控:

    STM32H743VI ARM Cortex M7 处理器,400 MHz ,1MB RAM,2 MB flash. 所有的 I/O 引脚输出 3.3V 并且 5V 耐受。这个处理器有以下的IO接口。

    引脚分布及功能:

    P0UART.RXDSPI2.MOSI 
    P1 UART.TXDSPI2.MISO 
    P2CAN2.TXDSPI2.SCLK 
    P3CAN2.RXDSPI2.SS 
    P4UART3.TXDIIC2.SCL 
    P5 UART3.RXDIIC2.SDA 
    P6 ADCDAC 
    3.3V3.3V输出最大250MA  
    RST低电平重置  
    BOOT连接3.3V使用DFU模式  
    SYN连接帧同步相机  
    P9舵机3定时器4通道3 
    P8舵机2定时器4通道2IIC4.SDA
    P7舵机1定时器4通道1IIC4.SCL
    VIN3.6-5V电源输入口  
    GND地线接口  

    DFU模式(英文:Device Firmware Upgrade mode;中文:设备固件升级模式)

    定时器通道问题:STM32的定时器为了方便PWM的输出有多个通道,一个定时器输出PWM波的频率不可改变,但是通过寄存器可以改变不同通道的占空比。

    • 所有的引脚可输出3.3V电压,并且可容忍5V电压
    • 所有的插脚都能吸收或发射高达25毫安的电流
    • P6脚在ADC和DAC模式中不能容忍5V
    • 所有插脚之间的总电流高达120mA
    • SD卡使用对电流有要求(待续)
    • SD卡容量2G
    • SDHC卡容量小于32G

    详细信息戳这里

    2、图像处理背景知识

    摄像头成像原理

    基本原理:小孔成像

    小孔模型是一种理想相机模型,没有考虑实际相机中存在的场曲、畸变等问题。但是在实际使用时,这些问题可以通过在标定的过程中引入畸变参数解决,所以小孔模型仍然是目前最广泛使用的相机模型。

    图像透过镜头,照在一个感光芯片上,感光芯片可以把光照的波长和强度等信息转成计算机(数字电路)可以识别的数字信号。

    像素和分辨率 

    像素:感光元件是有很多个感光点构成的,比如有640*480个点,每个点就是一个像素,把每个点的像素收集整理起来,就是一副图片,那么这张图片的分辨率就是640*480。

    帧率

    一秒内图像刷新的次数

    根据人眼的视觉效果对颜色的描述

    详细信息戳这里

    色域分类属性
    HSB色相,亮度,饱和度
    RGB红,绿,蓝
    CMYKC为cyan的英文缩写,即青色,M为Magenta的缩写,即洋红,Y为Yellow的英文缩写,即黄色,K为 black的英文缩写,即黑色
    LAB
     
    一个通道是亮度,即L。另外两个是色彩通道,用A和B来表示

     

    tips:openMV中查找色块算法中使用的是LAB:

    Lab颜色空间中,L亮度;a的正数代表红色,负端代表绿色;b的正数代表黄色,负端代表蓝色。不像RGB和CMYK色彩空间,Lab颜色被设计来接近人类视觉。因此L分量可以调整亮度对,修改a和b分量的输出色阶来做精确的颜色平衡。

     

    • 色相,就是各种色彩的相貌,比如红,黄,绿,蓝等,它是色 彩的首要特征,是区别各种不同色彩的最准确的标准,不同的色彩肯定拥有不同的色相,事实上任何黑白灰以外的颜色都有色相的特征,而色相也是由原色,间色和 复色来构成的。人的眼睛可以分辨出约180中不同色相的颜色。
    • 亮度,就色彩而言,它指的是颜色的明亮程度,同一种颜色,有亮调和暗调之分,一种纯色的亮度等于中度灰的亮度,但是一种纯色的明度等于白色的明度
    • 饱和度,就是色彩的鲜艳程度,也称色彩的纯度,饱和度取决于该 颜色中含色成分和消色成分(灰色)的比例,含色成分越大,饱和度越大,颜色就越艳丽;消色成分越大,饱和度越小,颜色就接近于灰色。人们对色彩的直觉感 知,首先是色相,然后是它的深浅度,所以HSB色彩模式是基于人的眼睛的色彩模式
    • -----------------------------------------------------------------------------------------------------------------------------------------------------------
    • RGB分别是red,green,blue的英文缩写,即红,绿,蓝三色,在ps软件中,RGB色彩模式给图像中每一个RGB分量分配一个0~255范围 内的强度值,例如,纯蓝色的R值为0,G值为0,B值为255,白色的R,G,B值都为255,黑色则三个都为0,在RGB色彩模式下,可以产生的颜色为 256*256*256,大概为1678万种,即2的24次方,也成为24为色,所以RGB采用加法混色原理,它描述各种“光”通过各种比例来产生颜色, 光线从暗黑开始不断叠加产生颜色,基于以上理论,所以RGB是基于发光体的色彩模式。
    • -----------------------------------------------------------------------------------------------------------------------------------------------------------
    • CMYK是基于印刷的色彩模式,C为cyan的英文缩写,即青色,M为Magenta的缩写,即洋红,Y为Yellow的英文缩写,即黄色,K为 black的英文缩写,即黑色,这里选K而不是B,主要是为了区别于蓝色blue。
    • CMYK是一种依靠反光的色彩模式,人们怎样阅读报纸的内容呢?是由阳光或灯光照射到报纸上,再反射到眼中,才看到内容。它需要由外界光源,如果在黑暗房间内是无法阅读报纸的。
    • 从理论上来说,只需要CMY三种油墨就足够了,它们三个加在一起就应该得到黑色。但是由于目前制造工艺还不能造出高纯度的油墨,CMY相加的结果实际是一 种暗红色。因此还需要加入一种专门的黑墨来调和。
    • CMYK色彩模式采用减色混色原理,因为它描述的是需要使用何种油墨,通过光的反射显示出颜色。它是在一种白色介质(画板,页面等)上使用油墨来体现图像。如图:

    • 在显示器环境下工作是应该使用RGB色彩模式,如果要印刷出来的时候,在最后一步应该把RGB模式转换为CMYK模式,在CMYK模式下进行打印工作或者 印刷出来,为了快速预览CMYK模式下的显示效果,可以在RGB模式下,使用视图菜单下的校样设置,选上工作中的CMYK即可。这种打印前的模式转换,并 不是避免图像损失最佳的途径,最佳方法是将Lab模式和CMYK模式相结合使用,这样可以最大程度的减少图像失真。
    • -----------------------------------------------------------------------------------------------------------------------------------------------------------
    • RGB模式是一种发光屏幕的加色模式,CMYK模式是一种颜色反光的印刷减色模式。而Lab模式既不依赖光线,也不依赖于颜料,它是CIE组织确定的一个 理论上包括了人眼可以看见的所有色彩的色彩模式。Lab模式弥补了RGB和CMYK两种色彩模式的不足。Lab模式由三个通道组成,但不是R、G、B通道。它的一个通道是亮度,即L。另外两个是色彩通道,用A和B来表示。A通道包括的颜色是从深绿色(底亮度 值)到灰色(中亮度值)再到亮粉红色(高亮度值);B通道则是从亮蓝色(底亮度值)到灰色(中亮度值)再到黄色(高亮度值)。因此,这种色彩混合后将产生 明亮的色彩。Lab模式所定义的色彩最多,且与光线及设备无关并且处理速度与RGB模式同样快,比CMYK模式快很多。因此,可以放心大胆的在图象编辑中使用Lab模 式。而且,Lab模式在转换成CMYK模式时色彩没有丢失或被替换。因此,最佳避免色彩损失的方法是:应用Lab模式编辑图象,再转换为CMYK模式打印 输出。当将RGB模式转换成CMYK模式时,Photoshop将自动将RGB模式转换为Lab模式,再转换为CMYK模式。在表达色彩范围上,处于第一位的是Lab模式,第二位的是RGB模式,第三位是CMYK模式。要注意 LAB模式在PHOTOSHOP中很多功能都不能用,所以在ps中最常用的是RGB色彩模式。
    • 如果将RGB模式图片转换成CMYK模式时,在操作步骤上应加上一个中间步骤,即先转换成Lab模式。在非彩色报纸的排版过程中,应用Lab模式将图片转换成灰度图是经常用到的。下面是Lab模式,RGB模式,CMYK模式的关系,如图:

    下面是色环图:

    • 从色环图上可以看到,RGB模式为圆环的正三角,CMYK模式为圆环的倒三角,红色和绿色混合是黄色,红色和蓝色混合式洋红色,蓝色和绿色混合式青色,这可以从上面的加色混合图中看到,并且,红色和青色互为吸收色,蓝色和黄色互为吸收色,绿色和洋红互为吸收色,比如把一束红光照到青色的物体上,那么结果是看不到红光,因为青色把红色吸收 了,把一束白光照到青色的物体上,因为青色吸收了白光中的红色,所以反射回来的是蓝色和绿色,而蓝色和绿色混合之后是青色,所以看到的物体是青色的。

     

    光源的选择一定要稳定

    镜头的焦距

    因为图像是通过镜头的光学折射,照到感光元件上的。那么镜头就决定了,整个画面的大小和远近。一个最重要的参数就是焦距。

    镜头焦距:是指镜头光学后主点到焦点的距离,是镜头的重要性能指标。镜头焦距的长短决定着拍摄的成像大小,视场角大小,景深大小和画面的透视强弱。当对同一距离远的同一个被摄目标拍摄时,镜头焦距长的所成的象大,镜头焦距短的所成的象小。注意焦距越长,视角越小。

    镜头的畸变

    因为光学原理,在感光芯片上不同的位置,与镜头的距离不同的,简单说就是近大远小,所以在边缘会出现鱼眼效果(桶型畸变)。为了解决这个问题,可以在代码中使用算法来矫正畸变。

    注:OpenMV中使用image.lens_corr(1.8)来矫正2.8mm焦距的镜头。也可以直接使用无畸变镜头。无畸变镜头加入了额外的矫正透镜部分,价格自然会高不少。

    镜头的滤片

    我们知道,不同颜色的光,是波长不一样。在正常环境中,除了可见光,还有很多红外光,在夜视中,用的就是红外光。

    但是,在正常颜色应用中,是不需要红外光的,因为红外光也会使感光元件受到反应,就使得整个画面泛白。所以我们在镜头上放一个只能通过波长650nm以内的滤光片,就把红外光截止了

    3、拓展

    灰度

    详情请戳这

    使用黑色调表示物体,即用黑色为基准色,不同的饱和度的黑色来显示图像。

    灰度使用黑色调表示物体,即用黑色为基准色,不同的饱和度的黑色来显示图像。 每个灰度对象都具有从 0%(白色)到

    100%(黑色)的亮度值。 使用黑白或灰度扫描仪生成的图像通常以灰度显示。

    灰度条:

    灰度条

     

    展开全文
  • OPENMV和STM32的识别追踪小车(详细版)之OPENMV

    万次阅读 多人点赞 2020-02-22 16:01:57
    OPENMV和STM32的识别追踪小车(详细版) 实现:通过OPENMV识别Apriltags标签,STM32驱动小车追踪标签 博主通过一段时间的学习,做了这个比较简单的以OPENMV为摄像传感器STM32为控制器的寻物小车,不多说,直接进入...
  • OpenMv基础

    万次阅读 多人点赞 2020-02-16 18:25:34
    OpenMV是嵌入式图像处理,它帮助轻松的完成机器视觉应用。你可以通过高级语言Python脚本,这里先看一下基础语法。
  • 做电磁炮的时候写的二维舵机云台追踪的程序,openmv是颜色识别然后返回色块的x和y轴的坐标,openmv的程序得自己写,我这里只有32端的PID程序,舵机用精度越高越好。pid的参数得根据具体的硬件再做调整。
  • 这是17年国赛的板球题目电赛练习OpenMv+STM32自制板球。架子刚刚搭好,参数还没有细调,基本能够定点,走矩形。机械结构是个大坑,机械结构做得好,后面一切顺利。机械出问题,后面白费功夫。
  • openmv循迹

    千次阅读 2021-04-06 21:12:26
    水下机器人使用openmv巡线使用色块进行巡线使用findblobs进行颜色识别使用快速线性回归循迹 使用色块进行巡线 使用findblobs进行颜色识别 GeometryFeature.py class GeometryFeature: def __init__(self, img): ...
  • openmv学习之旅①

    千次阅读 2018-03-07 13:22:12
    最近入手了个OpenMv,还要感谢二姨家的平台啊。感谢装IDE这种小事就不说了。说说真正入门的操作吧。对蟒也没啥要求。我也是这样子马上上手的,当然在过程我是学习了蟒蛇的。1:绘制矩形函数说明image.draw_rectangle...
  • STM32单片机与Openmv的串口通信

    万次阅读 多人点赞 2019-03-24 21:43:31
    openmv与stm32的串口通信简谈闲话Openmv主要代码STM32单片机的配置运行效果图片如下 简谈闲话 这两天本人利用周末时间粗略的学习一下openmv的使用,目的是用openmv图像处理数据并通过串口发送数据给STM32F103的...
  • OpenMv学习

    2020-10-17 13:46:04
    简单来说,OpenMv就是一个可编程的具有摄像头的单片机,通过使用python语言,专门用作嵌入式当中的视觉...sensor.set_pixformat(sensor.RGB565) #设置为彩色,用到其它参数时再上官方文档里找,下同 sensor.set_frames
  • 学习OpenMV

    2020-07-24 08:02:59
    输出print 列表List if如果相等则是== 求积** 求和要先给sum赋值 初始为0 for 变量 in range(100) sum=sum+变量 最后要print(sum)才能得到最后的值 ...def 函数名(参数): 功能语句 return 返回值 ...
  • 基于openMV的颜色识别

    千次阅读 多人点赞 2021-05-02 21:08:07
    基于openMV的颜色识别 openMV简介 OpenMV是一个可编程的摄像头,通过Python语言可实现你想要的逻辑。而且摄像头本身也内置了一些图像处理的算法,使用起来也更加的方便,仅需要写一些简单的Python代码,即可轻松的...
  • 本系统介绍了利用MLX90614、OpenMV等芯片与器件作为采集电路,基于STM32F103的简易无接触温度测量与身份识别装置。该系统利用温度测量器件与图像采集模块相互配合,通过接收、处理系统回传的数字信号等数据,利用...
  • 凡哥带你玩转OpenMV-OpenMV中文教程

    万次阅读 多人点赞 2017-10-08 20:43:16
    OpenMV简介 By far the easiest way I’ve found to learn and use advanced computer vision. This single board can do everything from driving a car to landing a drone. 目前位置, 这是我目前发现入手...
  • Openmv(一)OpenMV图像处理的基本方法

    万次阅读 多人点赞 2020-11-08 14:53:10
    小孔成像是一种理想模型,实际镜头会存在场曲和畸变等,但可以通过在标定过程中引入畸变参数解决,仍可广泛使用。 像素和分辨率 帧率:每秒钟处理的图片数量,>20人眼分辨不出卡顿。 颜色:不同波长的电磁...
  • OpenMv基础知识

    2021-07-28 17:24:07
    # output between 0 and 255 UART UART 3 RX -> P5 (PB11) UART 3 TX -> P4 (PB10) OpenMV3 M7 / OpenMV4 H7/ OpenMV4 H7 Plus上增加: UART 1 RX -> P0 (PB15) UART 1 TX -> P1 (PB14) from pyb import UART uart =...
  • openMV使用---找到图像中的圆形

    千次阅读 多人点赞 2018-11-27 16:43:04
    openmv给的示例程序中有相关程序,今天主要对该程序进行讲解,并改进。 import sensor, image, time sensor.reset()#重启摄像头 #设置为彩色, 颜色格式为RGB565 # 也就是说,颜色存储 红色(5位),绿色(6位...
  • OpenMV色块寻找

    2021-04-05 10:19:10
    OpenMV入门,从入门到入坟>_< OpenMV官方中文参考文档 文章目录1、sensor.snapshot()拍一张照片2、image.find_lines()查找直线2、image.find_line_segments()查找线段2、image.find_blogs()查找色块3、image....
  • 二、OpenMV黑线检测2.1 OpenMV简介2.2 OpenMV详细参数2.3 OpenMV IDE安装2.4 OpenMV Cam连接2.5 OpenMV项目搭建2.5.1 OpenMV工程新建2.5.2 OpenMV颜色识别相关函数find_blobs函数阈值颜色阈值选择工具blobs是一个...
  • openmv学习之旅②之色块追踪算法的改善

    万次阅读 多人点赞 2018-06-05 13:10:12
    从上一篇openmv的学习中openmv学习之旅①我们可以很简单运用micropython在openmv上做我们想做的事情。Python这个东西用起来是很简单的,,下面来说说改善色块追踪的算法先做个改善前的分析吧:改善前:API:find_...
  • 使用openMV3与stm32进行通讯

    万次阅读 多人点赞 2019-04-21 22:59:00
    使用openMV3与stm32进行通讯 想用openMV与stm32通讯,在网上找了一大圈,最后决定使用串口 可以找到openMV的引脚资源图如下: 这里使用P4(USART3_TX)与P5(USART3_RX)脚与stm32的USART1交叉联接。 openMV的代码如下...
  • OpenMV简介

    万次阅读 2017-11-30 22:07:48
    概述 非常易用和低价的机器视觉开发组件 可以编程调用图像处理的算法进行开发 应用举例:自动追球车、巡线车、自动追脸四旋翼、追球云台 内置算法举例:滤波、颜色追踪、...性能非常强大的主控芯片STM32F7参数
  • 今晚上准备二开匿名飞控由openmv巡色块循迹,首先需要通信成功,对吧。在暑假电赛之前,我与班里同学就已做出了MV方与32方数据的通信与错误校正。然后今晚上任务是把32的代码直接移植到匿名飞控上和写出追踪代码然后...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,284
精华内容 513
关键字:

openmv参数