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

图像处理篇---基本OpenMV图像处理


文章目录

  • 前言
  • 1. 灰度化(Grayscale)
  • 2. 二值化(Thresholding)
  • 3. 掩膜(Mask)
  • 4. 腐蚀(Erosion)
  • 5. 膨胀(Dilation)
  • 6. 缩放(Scaling)
  • 7. 旋转(Rotation)
  • 8. 平移(Translation)
  • 9. 边缘检测(Edge Detection)
  • 10. 轮廓检测(Contour Detection)
  • 11.总结
  • 总结


前言

本文仅仅简单介绍了Openmv中常见的图像处理操作(灰度化、掩膜、二值化、腐蚀、膨胀、缩放、旋转、平移、边缘检测、轮廓检测)


1. 灰度化(Grayscale)

将彩色图像转换为灰度图像,减少计算量。

实现方法:

import sensor

sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)  # 设置为灰度模式
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)

while True:
    img = sensor.snapshot()  # 捕获灰度图像

2. 二值化(Thresholding)

将灰度图像转换为黑白图像,通过设定阈值分离目标区域。

实现方法:

import sensor

sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)

threshold = (100, 255)  # 阈值范围

while True:
    img = sensor.snapshot()
    img.binary([threshold])  # 二值化处理

3. 掩膜(Mask)

通过掩膜操作提取图像中的特定区域。

实现方法:

import sensor, image

sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)

mask = image.Image(size=(100, 100), copy_to_fb=True)  # 创建掩膜
mask.draw_rectangle(20, 20, 60, 60, color=255, fill=True)  # 在掩膜上绘制白色矩形

while True:
    img = sensor.snapshot()
    img.mask(mask)  # 应用掩膜

4. 腐蚀(Erosion)

去除图像中的细小噪声,使目标区域缩小

实现方法:

import sensor, image

sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)

while True:
    img = sensor.snapshot()
    img.erode(1)  # 腐蚀操作,参数为腐蚀次数

5. 膨胀(Dilation)

填充目标区域中的空洞,使目标区域扩大

实现方法:

import sensor, image

sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)

while True:
    img = sensor.snapshot()
    img.dilate(1)  # 膨胀操作,参数为膨胀次数

6. 缩放(Scaling)

调整图像大小。

实现方法:

import sensor, image

sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)

while True:
    img = sensor.snapshot()
    img.scale(x_scale=0.5, y_scale=0.5)  # 缩放为原来的一半

7. 旋转(Rotation)

旋转图像。

实现方法:

import sensor, image

sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)

while True:
    img = sensor.snapshot()
    img.rotation_corr(angle=45)  # 旋转45度

8. 平移(Translation)

平移图像。

实现方法:

import sensor, image

sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)

while True:
    img = sensor.snapshot()
    img.translation(x_offset=10, y_offset=10)  # 向右下方平移10像素

9. 边缘检测(Edge Detection)

检测图像中的边缘

实现方法:

import sensor, image

sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)

while True:
    img = sensor.snapshot()
    img.find_edges(image.EDGE_CANNY, threshold=(50, 80))  # Canny边缘检测

10. 轮廓检测(Contour Detection)

检测图像中的轮廓

实现方法:

import sensor, image

sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)

while True:
    img = sensor.snapshot()
    contours = img.find_contours(threshold=2000)  # 查找轮廓
    for contour in contours:
        img.draw_rectangle(contour.rect(), color=127)  # 绘制轮廓矩形框

11.总结

功能 方法 描述
灰度化 sensor.set_pixformat(sensor.GRAYSCALE) 将图像转换为灰度图
二值化 img.binary([threshold]) 将灰度图转换为黑白图
掩膜 img.mask(mask) 提取图像中的特定区域
腐蚀 img.erode(iterations) 去除噪声,缩小目标区域
膨胀 img.dilate(iterations) 填充空洞,扩大目标区域
缩放 img.scale(x_scale, y_scale) 调整图像大小
旋转 img.rotation_corr(angle) 旋转图像
平移 img.translation(x_offset, y_offset) 平移图像
边缘检测 img.find_edges() 检测图像中的边缘
轮廓检测 img.find_contours() 检测图像中的轮廓
通过以上功能,OpenMV 可以实现丰富的图像处理任务,适用于嵌入式机器视觉应用。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了Openmv中常见的图像处理操作(灰度化、掩膜、二值化、腐蚀、膨胀、缩放、旋转、平移、边缘检测、轮廓检测)

http://www.dtcms.com/a/20056.html

相关文章:

  • HackerRank C++面试,中等难度题目 - Attribute Parser
  • Bandana论文阅读
  • 复杂电磁环境下无人机自主导航增强技术研究报告——地磁匹配与多源数据融合方法,附matlab代码
  • 基于多元高斯分布的异常检测技术原理与实现
  • lean4安装
  • 论文阅读2——S波段宽波束圆极化天线设计
  • 【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析⑤】
  • 初阶数据结构:树---二叉树的链式结构
  • LeetCode1706
  • 使用 React 16+Webpack 和 pdfjs-dist 或 react-pdf 实现 PDF 文件显示、定位和高亮
  • [Java网络安全系列面试题] GET 和 POST 的区别在哪里?
  • 1441. 用栈操作构建数组 中等
  • 《当DeepSeek遇上豆包:AI大模型的华山论剑》
  • 我用 Cursor 开发了一款个人小记系统
  • B站视频同步思维导图(全)
  • 利用AI智能体创建云端文档知识库并集成第三方数据源(下)
  • 开发指南101-拖动排序
  • 细说STM32F407单片机RTC的基本原理及闹钟和周期唤醒功能的使用方法
  • kafka生产端之架构及工作原理
  • 【弹性计算】容器、裸金属
  • [C++语法基础与基本概念] std::function与可调用对象
  • 亚远景-ASPICE 4.0与敏捷开发:如何实现高效协同
  • YOLOv11-ultralytics-8.3.67部分代码阅读笔记-tuner.py
  • CAS单点登录(第7版)8.委托和代理
  • (PC+WAP) PbootCMS中小学教育培训机构网站模板 – 绿色小学学校网站源码下载
  • 1219:马走日
  • android studio下载安装汉化-Flutter安装
  • Shader示例 6: 卡渲基础 - 描边 + 着色
  • VisualStudio 2012 fatal error C1083: 无法打开包括文件:“stdio.h 找不到 sdkddkver.h
  • 【算法与数据结构】并查集详解+题目