【CanMV K230】摄像头使用

news2024/11/14 13:53:18

【CanMV K230】摄像头使用

  • 摄像头
  • Sensor对象
    • 构造函数
    • 1.1 sensor.reset()
    • 1.2 .sensor.set_framesize
    • 1.3 sensor.set_pixformat
    • 1.4 sensor.set_hmirror(enable) (略)
    • 1.5 sensor.set_vflip(enable)(略)
    • 1.6 sensor.run
    • 1.7 sensor.snapshot()
  • 例程使用

在这里插入图片描述

从今天开始进行视觉实战~本篇我们来学习K230摄像头使用

B站视频链接:已做成合集
抖音链接:已做成合集


摄像头

摄像头是整个机器视觉应用的基础。今天我们就通过示例代码来看看CanMV K230是如何使用摄像头的。

在这里插入图片描述
默认的摄像头型号是2093(TYS-2093-V31),除此之外还支持OV5647。

CanMV K230使用camera模块实现摄像头采集图像功能,
K230硬件支持3路sensor输入(CSI接口),每个sensor设备均可独立完成图像数据采集捕获处理,并可以同时输出3路图像数据。如下图:
在这里插入图片描述

sensor 0,sensor 1,sensor 2表示三个图像传感器;Camera Device 0,Camera Device 1,Camera Device 2表示三个sensor设备;output channel 0,output channel 1,output channel 2表示sensor设备的三个输出通道。三个图像传感器可以通过软件配置映射到不同的sensor 设备。

那么这个CSI在板子上有标注,我们默认使用的是CSI2
在这里插入图片描述

Sensor对象

这里要着重说明一下此函数如何使用

构造函数

from media.sensor import * #导入sensor模块,使用摄像头相关接口

sensor = Sensor(id,[width, height, fps])
参数名称描述说明
idcsi 端口, 支持0-22:CSI2默认值,开发板上的摄像头
widthsensor最大输出图像宽度可选,默认1920
heightsensor最大输出图像高度可选,默认1080
fpssensor最大输出图像帧率可选,默认实用就行

举例

sensor = Sensor()
sensor = Sensor( witdh = 1280, height = 720, fps = 60)
sensor = Sensor( witdh = 640, height = 480)

使用方法

1.1 sensor.reset()

sensor.reset()  [riːˈset] 

复位和初始化摄像头。
在构造Sensor对象之后,必须调用本函数才能继续其他操作

1.2 .sensor.set_framesize

设置指定通道的输出图像尺寸
用户可使用framesize或通过指定width[wɪdθ]&height[haɪt] 来设置输出图像尺寸

sensor.set_framesize(framesize = FRAME_SIZE_INVAILD, [width, height],chn = CAM_CHN_ID_0, alignment=0, **kwargs)
参数名称描述
framesizesensor输出图像尺寸
chnsensor输出通道号 CAM_CHN_ID_(0-2)
width输出图像宽度
height输出图像高度
# 配置sensor设备0,输出通道0, 输出图尺寸为640x480
sensor.set_framesize(chn = CAM_CHN_ID_0, width = 640, height = 480)

# 配置sensor设备0,输出通道1, 输出图尺寸为320x240
sensor.set_framesize(chn = CAM_CHN_ID_1, width = 320, height = 240)

# 配置sensor设备0,输出通道1, 输出模式HD
sensor.set_framesize(chn = CAM_CHN_ID_1, Sensor.HD)
framesize: 通道图像输出尺寸。


chn: 通道编号。每个摄像头设备有3个通道。

CAM_CHN_ID_0 : 通道0;
CAM_CHN_ID_1 : 通道1;
CAM_CHN_ID_2 : 通道2

自定义尺寸可以通过[width, height]参数设置,如: width=800, height=480 。 注意framesize和
[width, height]只使用其中一种方式设置。

输出图像尺寸不能超过摄像头实际输出

不同输出通道最大可输出图像尺寸由硬件限制。

1.3 sensor.set_pixformat

设置指定sensor设备和通道的输出图像格式

sensor.set_pixformat[pɪksˈfɔːmæt] (pix_format, chn = CAM_CHN_ID_0)
参数名称描述
pix_format输出图像格式
chn_numsensor输出通道号
**CAM_CHN_ID_0 : 通道0;CAM_CHN_ID_1 : 通道1;CAM_CHN_ID_2 : 通道2;
pix_format:图像格式
	- sensor.GRAYSCAL : 灰度图像,每像素8位(1字节),处理速度快。
	- sensor.RGB565 : 每像素为16位(2字节),5位用于红色,6位用于绿色,5位用于蓝色,处理速度比灰度图像要慢。
	- sensor.RGB888
	- sensor.RGBP888
	- sensor.YUV420SP

1.4 sensor.set_hmirror(enable) (略)

 sensor.set_hmirror(enable)

设置摄像头画面水平镜像。

enable: 格式

  • 1(True) : 开启水平镜像;
  • 0 (False) : 关闭水平镜像。

1.5 sensor.set_vflip(enable)(略)

sensor.set_vflip(enable)

设置摄像头画面垂直翻转。

enable: 格式

  • 1 : 开启垂直翻转;
  • 0 : 关闭垂直翻转。

1.6 sensor.run

sensor.run()

摄像头启动!

必须在MediaManager.init()之前调用

1.7 sensor.snapshot()

 sensor.snapshot[ˈsnæpˌʃɒt] ()

使用相机拍摄一张照片,并返回 image 对象。

例程使用

了解这些我们直接看官方代码

'''
实验名称:摄像头使用
实验平台:01Studio CanMV K230
说明:实现摄像头图像采集显示
'''

import time, os, sys

from media.sensor import * #导入sensor模块,使用摄像头相关接口
from media.display import * #导入display模块,使用display相关接口
from media.media import * #导入media模块,使用meida相关接口

try:

    sensor = Sensor() #构建摄像头对象
    sensor.reset() #复位和初始化摄像头
    sensor.set_framesize(Sensor.FHD) #设置帧大小FHD(1920x1080),默认通道0
    sensor.set_pixformat(Sensor.RGB565) #设置输出图像格式,默认通道0

    #使用IDE缓冲区输出图像,显示尺寸和sensor配置一致。
    Display.init(Display.VIRT, sensor.width(), sensor.height())

    MediaManager.init() #初始化media资源管理器

    sensor.run() #启动sensor

    clock = time.clock()

    while True:


        os.exitpoint() #检测IDE中断

        ################
        ## 这里编写代码 ##
        ################
        clock.tick()

        img = sensor.snapshot() #拍摄一张图

        Display.show_image(img) #显示图片

        print(clock.fps()) #打印FPS


###################
# IDE中断释放资源代码
###################
except KeyboardInterrupt as e:
    print("user stop: ", e)
except BaseException as e:
    print(f"Exception {e}")
finally:
    # sensor stop run
    if isinstance(sensor, Sensor):
        sensor.stop()
    # deinit display
    Display.deinit()
    os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)
    time.sleep_ms(100)
    # release media buffer
    MediaManager.deinit()

点击运行代码,可以看到在右边显示摄像头实时拍摄情况,下方则显示RGB颜色直方图。

在这里插入图片描述

由于CanMV K230 MicroPython底层基于Linux + RTOS实现,因此可以看到代码中出现一些辅助中断等代码,这些代码相对固定,本节中核心代码如下,非常简洁:

	sensor = Sensor() #构建摄像头对象
    sensor.reset() #复位和初始化摄像头
    sensor.set_framesize(Sensor.FHD) #设置帧大小FHD(1920x1080),默认通道0
    sensor.set_pixformat(Sensor.RGB565) #设置输出图像格式,默认通道0

    #使用IDE缓冲区输出图像,显示尺寸和sensor配置一致。
    Display.init(Display.VIRT, sensor.width(), sensor.height())

    MediaManager.init() #初始化media资源管理器

    sensor.run() #启动sensor

    clock = time.clock()

    while True:


        os.exitpoint() #检测IDE中断

        ################
        ## 这里编写代码 ##
        ################
        clock.tick()

        img = sensor.snapshot() #拍摄一张图

        Display.show_image(img) #显示图片

        print(clock.fps()) #打印FPS

由于我们刚学,先照搬官方教程。等我们会了之后,可以自行缩减代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2082342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

56.基于IIC协议的EEPROM驱动控制(3)跨时钟域处理

(1)跨时钟域处理:在使用低频时钟去采集高频信号时,会出现采集不正确的现象,因此需要进行跨时钟域处理。 多比特信号的跨时钟域处理可以使用FIFO、RAM等IP核进行处理; 单比特信号低频到高频可以使用打拍的方…

GitLab私有代码仓库搭建与使用

文章目录 一、安装GitLab1、下载安装2、修改配置3、启动gitlab4、登录 二、使用1、ssh-key 参考资料 一、安装GitLab 1、下载安装 gitlab-ce的rpm包清华源地址: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/?CN&OD 本次使用gitlab-ce-17.1.1-c…

近500个自然助眠冥想白噪音ACCESS\EXCEL数据包

今天这份数据是从一款特别简单好用助眠辅助应用软件中提取出来的MP3数据包,包含很多纯净音乐、助眠音乐、冥想音乐,可以帮助用户轻松进行多种白噪音音乐播放,帮助用户更好进行压力释放,感受更多舒适身心纯音乐体验。分类非常多&am…

【Java】数据类型与变量(一)

目录 1.字面常量 1.1什么是常量 1.2字面常量的分类: 2.数据类型 2.1基本数据类型 2.2一个小问题:什么是字节? 1.字面常量 1.1什么是常量 在一篇文章HelloWorld程序中,System.Out.println("Hello World");语句,不论程序何时运…

上网行为管理是什么?上网行为管理系统分享(六款上网行为管理系统介绍)2024年必备!

早期的上网行为管理系统,主要是对一些网站进行拦截,但企业数据泄露的现象仍旧普遍,敌人不止黑客。在激烈的商业竞争中,面对利益的诱惑,掌握着公司重要数据的员工也是不可控的危险因素。 本文将深入探讨上网行为管理的概…

2008-2024年荣威汽车维修手册和电路图线路图接线图资料更新

经过整理,2009-2024年名爵汽车全系列已经更新至汽修帮手资料库内,覆盖市面上99%车型,包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传感器、保险丝盒图解对照表…

程序员阿龙【精选】计算机毕业设计之:基于java房屋租赁网站管理系统

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

【Datawhale X 李宏毅苹果书 AI夏令营】Task2笔记

第三章:深度学习基础 本章前部分的内容见:【Datawhale X 李宏毅苹果书 AI夏令营】Task1笔记-CSDN博客 3.6 分类 分类与回归的关系 假设三个类本身没有特定的关系,类 1 是 1,类 2 是 2 类 3 是 3。这种情况需要引入独热&#xff…

kubernetes培训

基本概念 Node 节点可以是物理机或虚拟机,每个节点上都运行着容器运行时环境; Pod Pod是k8s中的最小调度单元,一个Pod可以包含一个或多个容器,同一Pod内的容器共享存储卷和网络空间。容器则是轻量级、可移植的执行单元&#xf…

四、LogicFlow 自定义左侧菜单Menu

目录 前文LogicFlow 介绍实现基础界面框架实现左侧菜单组件将左侧菜单引入到demo组件中最后 前文 这篇相对来讲就稍微平凡了一点,只要有前端的一些基础就能够轻松完成上图中左侧的菜单,但是为了能够让前后文章能够连贯起来,所以还是要厚着脸…

一文彻底搞懂ZooKeeper选举机制

原文阅读:【巨人肩膀社区博客分享】一文彻底搞懂ZooKeeper选举机制 1. ZooKeeper 集群 ZooKeeper 是一个高性能分布式的开源协调服务,用于构建分布式应用程序和服务。 一个 ZooKeeper 集群通常由多个 ZooKeeper 服务器组成,这些服务器分布在…

C语言基础(二十三)

在C语言中,修改链表中的数据涉及遍历链表以找到要修改的元素,然后更新该元素的值。链表是一种动态数据结构,它由一系列节点组成,每个节点包含数据部分和指向列表中下一个节点的指针(双向链表,还会有指向前一…

<Rust>egui学习之小部件(四):如何在窗口中添加滑动条部件?

前言 本专栏是关于Rust的GUI库egui的部件讲解及应用实例分析,主要讲解egui的源代码、部件属性、如何应用。 环境配置 系统:windows 平台:visual studio code 语言:rust 库:egui、eframe 概述 本文是本专栏的第四篇博…

Ubuntu 24.04 安装 intel 编译器

目录 1.采用用户界面 GUI 安装英特尔基本工具包 Intel oneAPI Base Toolkit 1.1 下载离线英特尔基本工具包 1.2 安装英特尔基本工具包 1.3 英特尔基本工具包 Intel oneAPI Base Toolkit 环境设置 2.安装英特尔基本工具包 Intel HPC Toolkit 2.1 下载离线英特尔高性能计算…

智能座舱高通8155摄像头方案

高通汽车开发平台 (ADP)基于8155的多媒体硬件框图如下所示:有4个4路CSI摄像头处理通路,2个4路DSI屏幕处理通路,1个DisplayPort。 基于摄像头的详细方案如下:可以处理4路MAX9296解串后信号。 再深入细化基于…

Java10 集合

集合 集合集合接口等级:Collection:单例集合接口,将数据一个一个存储,存储的是值。ArrayList类:泛型集合Linkedlist集合:Vector集合:Stack集合:Vetor的子类 Set接口:存储是无序的&am…

【使用 Python 进行截图的两种方法】

在 Python 中,可以使用 pyautogui 和 Pillow 进行截图 使用 pyautogui 进行截图时,其提供了方便的函数。例如,使用 pyautogui.screenshot() 函数可以获取整个屏幕的截图,该函数返回一个包含屏幕截图的图像对象。如果不想截取整个…

最大噪音值甚至受法规限制,如何基于LBM算法有效控制风扇气动噪音

风扇的气动噪声 在工业设备行业,最大噪音值受法规限制。在很多使用风扇冷却的设备上,风扇噪声通常是这些设备工作噪声的最大贡献量。而在家电民用行业,例如空调、空气净化器、油烟机等,其噪音大小直接关系到用户的体验感受&#x…

从零开始掌握容器技术:Docker的奇妙世界

容器技术在当今的云计算和软件开发领域中扮演着越来越重要的角色。如果你是一名计算机专业的学生或从事IT行业的从业者,可能已经听说过Docker这个词。它在软件开发、部署、运维等环节中大放异彩,但对于刚接触这个概念的朋友来说,可能还是有些…

【乐企】有关乐企能力测试接口对接(详细)

1、申请密钥 2、验证本地服务器与乐企服务器的连通性 乐企服务器生产和测试域名均为:https://lqpt.chinatax.gov.cn:8443。开发者可以在“能力中心”查看基础公用能力详情,按照能力接入和开发指引完成接口对接,验证服务器连通性和证书配置正确…