【CanMV K230】线段检测

news2024/9/22 13:44:40

【CanMV K230】线段检测

  • 什么是线段检测
  • 线段检测应用领域
    • 1.地图解析中的道路、建筑轮廓提取
    • 2.计算机视觉中的物体识别和跟踪。
    • 3.机器人导航和环境理解。
    • 4.图像分割和特征点提取。
    • 5.建筑测量和图像重建。
    • 6.OCR(光学字符识别)预处理。
    • 7.行人检测和交通标志识别。
    • 8.高铁电机机车顶部图像检测系统,如受电弓检测程序。
    • 9,遥感图像中几何形状明显的目标检测。
  • K230应用
    • 函数
    • 例程

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

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

B站视频链接:已做成合集 (求去点赞,或者)
抖音链接:已做成合集


什么是线段检测

线段检测是图像处理领域中的一项技术,它涉及到识别和定位图像中的直线段。线段检测算法的目的是从数字图像中提取线性结构,这些结构可以是实际的物理线条,也可以是图像中的边缘或轮廓。

线段检测应用领域

线段检测技术在多个领域都有应用,主要包括:

1.地图解析中的道路、建筑轮廓提取

在这里插入图片描述

2.计算机视觉中的物体识别和跟踪。

在这里插入图片描述

3.机器人导航和环境理解。

在这里插入图片描述

4.图像分割和特征点提取。

在这里插入图片描述

5.建筑测量和图像重建。

在这里插入图片描述

建筑测量

6.OCR(光学字符识别)预处理。

在这里插入图片描述

7.行人检测和交通标志识别。

在这里插入图片描述

8.高铁电机机车顶部图像检测系统,如受电弓检测程序。

在这里插入图片描述

9,遥感图像中几何形状明显的目标检测。

在这里插入图片描述

这些应用展示了线段检测在自动化、机器视觉、地理信息系统和安全监控等领域的重要性和多功能性。

K230应用

函数

find_line_segments对象

构造函数

image.find_line_segments([roi[, merge_distance=0[, max_theta_difference=15]]])

线段识别函数。返回一个 image.line 线段对象列表。

参数说明
roi:识别区域(x,y,w,h),未指定则默认整张图片。
merge_distance两条线段间可以相互分开而不被合并的最大像素;
max_theta_differenc将少于这个角度值的线段合并。

例程

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

import time, os, sys

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

enable_lens_corr = False # 设为True可以获得更直的线段

try:

    sensor = Sensor(width=1280, height=960) #构建摄像头对象,将摄像头长宽设置为4:3
    sensor.reset() #复位和初始化摄像头
    sensor.set_framesize(width=320, height=240) #设置帧大小,默认通道0
    sensor.set_pixformat(Sensor.RGB565) #设置输出图像格式,默认通道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() #拍摄一张图片

        if enable_lens_corr: img.lens_corr(1.8) # for 2.8mm lens...

        # `merge_distance` 控制相近的线段是否合并.  数值 0 (默认值)表示不合并。数值
        #为1时候表示相近1像素的线段被合并。因此你可以通过改变这个参数来控制检测到线
        #段的数量。

        # `max_theta_diff` 控制相差一定角度的线段合并,默认是15度,表示15度内的线
        # 段都会合并

        for l in img.find_line_segments(merge_distance = 0, max_theta_diff = 5):

            img.draw_line(l.line(), color = (255, 0, 0), thickness=2)
            print(l)

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

在这里插入图片描述

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

import time, os, sys

from media.sensor import * #导入sensor模块,使用摄像头相关接口
from media.display import * #导入display模块,使用display相关接口
from media.media import * #导入media模块,使用meida相关接口
enable_lens_corr = False # 设为True可以获得更直的线段
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.RGB565) #设置输出图像格式,默认通道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 边缘检测器
        if enable_lens_corr: img.lens_corr(1.8) # for 2.8mm lens...

        # `merge_distance` 控制相近的线段是否合并.  数值 0 (默认值)表示不合并。数值
        #为1时候表示相近1像素的线段被合并。因此你可以通过改变这个参数来控制检测到线
        #段的数量。

        # `max_theta_diff` 控制相差一定角度的线段合并,默认是15度,表示15度内的线
        # 段都会合并

        for l in img.find_line_segments(merge_distance = 0, max_theta_diff = 5):

            img.draw_line(l.line(), color = (255, 0, 0), thickness=2)
            print(l)

        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.coloradmin.cn/o/2111249.html

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

相关文章

html+css+js网页设计 宝石及材料与工艺学专业知识科普与学习11个页面 带报告

htmlcssjs网页设计 宝石及材料与工艺学专业知识科普与学习11个页面 带报告 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&a…

免费分享:2014-2018年全球5.0级及以上地震正式报目录数据集

数据详情 本数据集为2014年—2018年中国台网正式目录(统一编目目录)全球5.0及以上地震6459次地震数据,属性字段包含发震时刻、经度、纬度、深度、地震类型、震级、参考位置、事件类型等。 数据属性 数据名称:全球5.0级及以上地震…

【数学建模】2024数学建模国赛B题(word论文+matlab):生产过程中的决策问题

详情请见:https://mbd.pub/o/bread/mbd-ZpqblZ5u 文章目录 一、问题二、解答2.1 问题一2.2 问题二2.3 问题三2.4 问题四 一、问题 某企业生产某种畅销的电子产品,需要分别购买两种零配件(零配件1和零配件2),在企业将两…

gcn(从空间域理解)

一、背景 常见的神经网络,如BP神经网络可以用来处理表格型的数据,卷积神经网络可以用来处理图片数据,循环神经网络则可以用来处理序列数据,这些数据都是结构化的数据,当我们需要处理的数据为图这种非结构化的数据&…

黑马点评9——附近商户-GEO数据结构

文章目录 GEO数据结构的基本用法导入店铺数据结构到GEO实现附件商户功能 GEO数据结构的基本用法 导入店铺数据结构到GEO 数据库里没法实现按照地理坐标排序等复杂的搜索功能,我们把数据存到redis中,只需要保存id和对应的x以及y的坐标,就可以…

一键部署Phi 3.5 mini+vision!多模态阅读基准数据集MRR-Benchmark上线,含550个问答对

小模型又又又卷起来了!微软开源三连发!一口气发布了 Phi 3.5 针对不同任务的 3 个模型,并在多个基准上超越了其他同类模型。 其中 Phi-3.5-mini-instruct 专为内存或算力受限的设备推出,小参数也能展现出强大的推理能力&#xff…

使用Cskin时候 遇到按钮有默认阴影问题解决

使用Cskin时候 遇到按钮有默认阴影 设置 DrawType 属性就可以了

【应用】浅谈大模型的应用场景

在人工智能(AI)的发展历程中,大模型无疑是一个重要的里程碑。这类模型通过海量数据的训练,其参数量都达到了千亿甚至万亿的规模,具备了强大的语言理解和生成能力,能够完成各种复杂的自然语言处理任务。 大模型在各种领域都有广泛的…

Web day0906

ok了家人们,今天开始学习javaweb,我们一起看看吧 一.WEB开发介绍 1.1 WEB介绍 Web ( World Wide Web )即全球广域网,也称为万维网。简 单说,能够通过浏览器访问的网站。在我们日常的生活中,经…

【JAVA基础】StringUtils.isEmpty、StringUtils.isBlank()、Objects.isNull()三者区别

📝个人主页🌹:个人主页 ⏩收录专栏⏪:日常经验 🌹🌹期待您的关注 🌹🌹,让我们共同进步! 总是区分不清楚这几个的差别:我们来直接验证一下&#…

【机械手控制】基于matlab 4-RPR平面机械手的可操作性、工作空间分析和路径跟踪【含Matlab源码 7422期】

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信或扫描文章底部QQ二维码。 🍎个人主页:Matlab凤凰涅槃 🏆代码获取方式:扫描文章底部QQ二维码 ⛳️座右铭&…

U盘数据危机应对:详解文件或目录损坏无法读取的恢复之道

在数字化信息日益重要的今天,U盘作为便携存储设备,几乎成为了每个人工作和生活中的必需品。然而,当U盘突然遭遇文件或目录损坏且无法读取的困境时,我们往往面临数据丢失的风险,这不仅影响工作效率,还可能造…

【开学季】智慧城市入门教程福利放送,零基础入门三维WebGIS

步入九月,不知道有多少同学还没享受够假期 就要开始返校“直面天命” 各种大朋友、小朋友;大一萌新、学长学姐们也 都陆陆续续返校 小编整理了新中地公开课教程 帮助大家丝滑入门大学学习 这份开学礼包,请注意查收! WebGIS三…

Xinstall如何用一个包打通多个推广路径?

在移动互联网时代,App的推广和运营对于开发者而言是一项至关重要的任务。然而,面对繁多的推广渠道,如何高效地管理和评估各个渠道的效果,成为了摆在开发者面前的一大难题。今天,我们就来科普一下,如何通过X…

13条自动化测试框架设计原则

1、代码规范 测试框架随着业务推进,必然会涉及代码的二次开发,所以代码编写应符合通用规范,代码命名符合业界标准,并且代码层次清晰。特别在大型项目、多人协作型项目中,如果代码没有良好的规范,那么整个框…

计算机毕业设计选题推荐-博物馆管理系统-Java/Python项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Helm Deploy Online Rancher v2.9.1

文章目录 准备安装查看下载 准备 $ kubectl get node NAME STATUS ROLES AGE VERSION kube-master01 Ready control-plane 19d v1.29.5 kube-node01 Ready <none> 19d v1.29.5 kube-node02 Ready <none&…

嵌入式学习(链式栈和链式队列)

栈&#xff08;stack&#xff09;是一种只能在一端插入或删除操作的线性表。 栈只能在表尾插入或删除元素&#xff0c;表尾就是栈的栈顶&#xff0c;表头就是栈底 栈的主要特点&#xff1a;LIFO(last in first out) "后进先出" 栈可以采用顺序存储结构(顺序栈) 和…

备战秋招60天算法挑战,Day33

题目链接&#xff1a; https://leetcode.cn/problems/longest-increasing-subsequence/ 视频题解&#xff1a; https://www.bilibili.com/video/BV1RRvheFEog/ LeetCode 300. 最长递增子序列 题目描述 给你一个整数数组nums &#xff0c;找到其中最长严格递增子序列的长度。 …

Vue——day10之指令

目录 内置指令 v-text指令 v-html指令 v-cloak指令 v-once指令 v-pre指令 整体代码示例 自定义指令 整体代码演示 总结 内置指令 v-text指令 v-text指令是Vue.js中的一种指令&#xff0c;它用于将元素的textContent设置为指定的值。它的使用方式是在元素上添加v-tex…