当前位置: 首页 > article >正文

【CanMV K230】边缘检测

【CanMV K230】边缘检测

  • 1.啥是边缘检测
  • 2.边缘检测应用领域
    • 1.特征提取
    • 2.图像简化
    • 3.结构分析
    • 4.提升图像质量
    • 5.促进后续处理
    • 6.增强系统性能
    • 7.降低计算复杂度
  • 3. K230应用
    • 相关函数
    • 官方例程
    • HDMI屏幕使用边缘检测

请添加图片描述
本篇内容:

  1. 什么是边缘检测
  2. 边缘检测应用领域
  3. K230应用(包含相应函数及例程)

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


我们熟悉了K230两个主要硬件(摄像头和显示器)的使用方法后,可以使用视觉例程了。分享加快了哦。

1.啥是边缘检测

边缘检测是图像处理中的一项基本任务,它涉及到识别图像中亮度或颜色发生突变的边界。这些边界通常对应于物体的轮廓,是图像分析和计算机视觉中的重要特征。
边缘检测算法的目的是从图像中提取这些边界信息,以便进行进一步的处理和分析

2.边缘检测应用领域

边缘检测算法通常基于图像的一阶或二阶导数来工作。我们只需知晓应用领域,原理看自身需求。

在这里插入图片描述
图片来源于Py巡航机↑

主要应用于以下领域:

1.特征提取

边缘是图像中亮度变化最显著的部分,它们通常对应于物体的轮廓、不同区域的边界等。通过边缘检测,可以从图像中提取出这些重要的特征信息,为后续处理如图像分割、目标识别等提供基础。
在这里插入图片描述

2.图像简化

边缘检测后的图像往往比原始图像更为简洁,只保留了重要的边缘信息,去除了大量冗余的像素点。这种简化有助于减少计算量,提高处理速度,并使得图像更易于分析和理解。
在这里插入图片描述

3.结构分析

边缘检测可以帮助我们分析图像中的结构信息,如物体的形状、大小、方向等。这些信息对于图像理解、场景重建等任务至关重要。
在这里插入图片描述

4.提升图像质量

边缘检测可以突出图像中的轮廓信息,使得图像更加清晰、易于观察。这对于需要高精度图像处理的应用场景尤为重要,如医学影像分析、遥感图像处理等。
在这里插入图片描述

5.促进后续处理

边缘检测是许多图像处理任务的预处理步骤,如图像分割、目标检测、目标跟踪等。通过边缘检测,可以更容易地识别出图像中的目标对象,并为后续处理提供准确的定位信息。
在这里插入图片描述

6.增强系统性能

在机器视觉、自动驾驶等领域,边缘检测是实现高精度目标识别和场景理解的关键技术之一。通过准确的边缘检测,可以提高系统的识别准确率和鲁棒性,从而增强整个系统的性能。
在这里插入图片描述

7.降低计算复杂度

由于边缘检测后的图像更为简洁,因此在后续处理中可以减少计算量,降低计算复杂度。这对于实时性要求较高的应用场景尤为重要,如视频监控、自动驾驶等。

3. K230应用

相关函数

find_edges对象
构造函数

image.find_edges(edge_type[, threshold])

边缘检测,将图像变为黑白,边缘保留白色像素。

参数说明
edge_type处理方式2个 ↓
image.EDGE_SIMPLE简单的阈值高通滤波算法;
image.EDGE_CANNYCanny 边缘检测算法;
threshold包含高、低阈值的二元组,默认是(100,200),仅支持灰度图像。

官方例程

'''
实验名称:边缘检测
实验平台:01Studio CanMV K230
教程:wiki.01studio.cc
说明:推荐使用320x240以下分辨率,分辨率过大会导致帧率下降。
'''

import time, os, sys, gc

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

try:

    sensor = Sensor(width=1280, height=960) #构建摄像头对象,将摄像头长宽设置为4:3
    sensor.reset() #复位和初始化摄像头
    sensor.set_framesize(width=320, height=240) #设置帧大小为LCD分辨率(320x240),默认通道0
    sensor.set_pixformat(Sensor.GRAYSCALE) #设置输出图像格式,默认通道0

    Display.init(Display.ST7701, to_ide=True) #同时使用3.5寸mipi屏和IDE缓冲区显示图像,800x480分辨率
    #Display.init(Display.VIRT, sensor.width(), sensor.height()) #只使用IDE缓冲区显示图像

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

    sensor.run() #启动sensor

    clock = time.clock()

    while True:

        os.exitpoint() #检测IDE中断

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

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

        #使用 Canny 边缘检测器
        img.find_edges(image.EDGE_CANNY, threshold=(50, 80))

        # 也可以使用简单快速边缘检测,效果一般,配置如下
        #img.find_edges(image.EDGE_SIMPLE, threshold=(100, 255))

        #Display.show_image(img) #显示图片

        #显示图片,仅用于LCD居中方式显示
        Display.show_image(img, x=round((800-sensor.width())/2),y=round((480-sensor.height())/2))


        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()
注意事项说明
1sensor = Sensor(width=1280, height=960)#构建摄像头对象,将摄像头长宽设置为4:3
2sensor.set_framesize(width=640, height=480)#设置帧大小为(width=640, height=480)太大了就显示不出来了
3sensor.set_pixformat(Sensor.GRAYSCALE) #设置输出图像格式,默认通道0

HDMI屏幕使用边缘检测

'''
实验名称:边缘检测测试
实验平台:01Studio CanMV K230
说明:实现图像在HDMI显示器进行边缘检测
测试人:咸鱼浆 2024年9月2日21:02:15
'''

import time, os, sys, gc

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

try:

    sensor = Sensor(width=1280, height=960) #构建摄像头对象,将摄像头长宽设置为4:3
    sensor.reset() #复位和初始化摄像头
    sensor.set_framesize(width=640, height=480) #设置帧大小为(width=640, height=480)太大了就显示不出来了,默认通道0
    sensor.set_pixformat(Sensor.GRAYSCALE) #设置输出图像格式,默认通道0

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

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

    sensor.run() #启动sensor


    while True:
        os.exitpoint() #检测IDE中断
        ################
        ## 这里编写代码 ##
        ################
        img = sensor.snapshot() #拍摄一张图
        #使用 Canny 边缘检测器
        img.find_edges(image.EDGE_CANNY, threshold=(50, 80))

        # 也可以使用简单快速边缘检测,效果一般,配置如下
        #img.find_edges(image.EDGE_SIMPLE, threshold=(100, 255))
        # 在HDMI屏幕上居中显示
        Display.show_image(img, x=round((1920-sensor.width())/2),y=round((1080-sensor.height())/2))



        #Display.show_image(img) #显示图片




###################
# 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()

在这里插入图片描述


http://www.kler.cn/news/290401.html

相关文章:

  • 羊大师:白露养生经,羊奶不可少
  • docker实战基础一 (Docker基础命令)
  • 【云原生】Helm来管理Kubernetes集群的详细使用方法与综合应用实战
  • C++实现简易俄罗斯方块小游戏
  • Apache SeaTunnel Zeta 引擎源码解析(一)Server端的初始化
  • 心觉:如何填平想象和愿望之间的鸿沟?
  • Docker设置socks5代理
  • 大模型超详细解读汇总
  • 一个“改造”的工厂背后:中国电商的AI重构
  • 赛码网牛客在acm模式下利用node.js处理多行输入方法
  • 视频结构化从入门到精通——图像算法类型介绍
  • LuaJit分析(三)luajit字节码文件格式
  • 【C++】string的模拟实现
  • 1119 Pre- and Post-order Traversals
  • Django学习(二)
  • 基因对应身体的需求 平衡饮食的重要性 第四篇
  • 8个优质视频素材库,商用无忧
  • AT+MQTT指令连接华为云实现数据上传
  • 使用linux命令导出mysql数据为CSV文件
  • 【开源风云】从若依系列脚手架汲取编程之道(三)
  • 低代码表单 FormCreate 中组件的生成规则详解
  • 机器学习和深度学习中常见损失函数,包括损失函数的数学公式、推导及其在不同场景中的应用
  • 从python应用app向微软Microsoft Teams Channel发送消息message
  • Kafka3.x 使用 KRaft 模式部署 不依赖 ZooKeeper
  • Redis数据结构与连接
  • 快速掌握GPTEngineer:用AI创建网页应用的实用教程
  • 从laborer一词掌握单词记忆的秘诀
  • 《NLP自然语言处理》—— 关键字提取之TF-IDF算法
  • 代码随想录八股训练营第三十一天| C++
  • flutter 提示框2 Dialog