首页 > 其他分享 >Net AI学习笔记系列第五章 OpenCVSharp实操——图片中物体轮廓查找描绘

Net AI学习笔记系列第五章 OpenCVSharp实操——图片中物体轮廓查找描绘

时间:2024-06-08 15:58:17浏览次数:16  
标签:Mat AI 物体 System 查找 实操 OpenCVSharp using 轮廓

.Net AI学习笔记系列

第五章 OpenCVSharp实操——图片中物体轮廓查找描绘


文章目录


前言

本文主要介绍使用OpenCVSharp中的 FindContours方法识别和提取图像中物体边缘轮廓,并用DrawContours方法描绘轮廓。


一、OpenCVSharp实操——图片中物体轮廓查找描绘

示例展示了一步一步在一张大图中识别查找物体的边缘轮廓,并将轮廓描绘出来。

二、步骤

1.开发工具

	VS2019+.net 4.8+OpenCvSharp4

2.引入库

Install-Package OpenCvSharp4

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;
using OpenCvSharp.Extensions;

3.示例代码

代码如下(示例):

//查找轮廓
  private void button1_Click(object sender, EventArgs e)
  {
      //原图像
      Mat src = BitmapConverter.ToMat((Bitmap)this.pictureBox1.Image);

      Mat srcGray = new Mat();
      Cv2.CvtColor(src, srcGray, ColorConversionCodes.BGR2GRAY);

      //二值化
      Mat binaryImg = new Mat();
      double minVal, maxVal;
      Cv2.MinMaxLoc(srcGray, out minVal, out maxVal);
      Cv2.Threshold(srcGray, binaryImg, (minVal + maxVal) / 1.4, 255, ThresholdTypes.Binary);

      // 形态学开操作
      Mat kernel = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(3, 3));
      Mat mb = new Mat();
      Cv2.MorphologyEx(binaryImg, mb, MorphTypes.Open, kernel, new OpenCvSharp.Point(-1, -1), 3, BorderTypes.Default, Scalar.All(0));

      // 边缘检测 + 轮廓
      int threshold = 100;
      Mat cannyOutput = new Mat();
      Cv2.Canny(mb, cannyOutput, threshold, threshold * 2, 3);
      Cv2.FindContours(cannyOutput, out contours, out hierarchy, RetrievalModes.Tree, ContourApproximationModes.ApproxSimple);

      //显示结果
      this.pictureBox2.Image = BitmapConverter.ToBitmap(cannyOutput);
      this.pictureBox2.Refresh();
  }
 //描绘轮廓
   private void button2_Click(object sender, EventArgs e)
   {
       Mat cannyOutput = BitmapConverter.ToMat((Bitmap)this.pictureBox2.Image);
       // 画轮廓
       Mat drawing = new Mat(cannyOutput.Size(), MatType.CV_8UC3, Scalar.Black);
       Random rng = new Random();
       int index = 0;
       foreach (OpenCvSharp.Point[] contour in contours)
       {
           Scalar color = new Scalar(rng.Next(256), rng.Next(256), rng.Next(256));
           Cv2.DrawContours(drawing, contours, index, color, 2, LineTypes.Link8, hierarchy, 0);

           index++;
       }

       //显示结果
       this.pictureBox2.Image = BitmapConverter.ToBitmap(drawing);
       this.pictureBox2.Refresh();
   }

4.运行效果

在这里插入图片描述

总结

在OpenCV中,查找轮廓(Contour Detection)是一种用于识别和提取图像中物体边缘的技术

1.物体识别:
通过查找轮廓,可以识别图像中的物体形状和大小,从而实现对物体的分类和识别。例如,在自动驾驶、机器视觉和图像处理领域,查找轮廓可以帮助识别道路标志、交通信号灯、行人等。
2.图像分割:
查找轮廓可以用于将图像分割成多个区域,每个区域对应一个物体或物体的一部分。这有助于进一步处理和分析图像中的各个区域。
3.几何特征提取:
通过查找轮廓,可以提取物体的几何特征,如面积、周长、质心、凸包等。这些特征可以用于后续的图像处理和分析。
4.形状匹配:
查找轮廓可以用于比较两个或多个物体的形状,以确定它们之间的相似性或差异性。这在模式识别、图像检索和图像分类等领域具有重要应用价值。
5.手势识别:
在计算机视觉和机器学习领域,查找轮廓可以用于识别手势,从而实现基于手势的交互。
6.运动检测:
通过比较连续帧之间的轮廓变化,可以检测图像中的运动物体。这在视频监控、安防监控和运动跟踪等领域具有广泛应用。

标签:Mat,AI,物体,System,查找,实操,OpenCVSharp,using,轮廓
From: https://blog.csdn.net/brooth123/article/details/139547211

相关文章

  • AI魔法相机:实时3D重建与场景魔法化
     一、产品概述AI魔法相机是一款创新的硬件产品,它结合了AI技术和3D重建扫描技术,能够实时捕捉并重建3D场景和物理世界。用户只需通过简单的点击操作,即可捕捉现实物体或环境,并将其无缝融合到任何场景中,创造出全新的想象现实。二、核心功能实时捕捉:一键式操作,迅速捕捉现实世......
  • C++:Traits编程技法在STL迭代器中的应用
    文章目录迭代器相应型别Traits(特性)编程技法——STL源代码门钥迭代器相应型别一:value_type迭代器相应型别二:difference_type迭代器相应型别三:reference_type迭代器相应型别四:pointer_type迭代器相应型别五:iterator_category以`advanced()`为例取消单纯传递调用的函数以`......
  • 某大型医院IBM 3650服务器 raid重组案例——数据完美修复
    我们今天谈的是一个来自四川的大型三甲医院的服务器数据恢复的真实的一个案例,是一台IBM的3650服务器,一共六块硬盘坏了,有两块硬盘是300GB,一共是有六块盘,两块盘是曝光灯离线了,导致这个医院的挂号系统,诊疗系统全部瘫痪,所有数据全部丢失,医院属于一个停摆的状态,医院一旦这种服务器损坏......
  • Preview failedUnable to start the previewer. openPreviewerLog to check for detai
    DevEcostudio预览器报错 PreviewfailedUnabletostartthepreviewer.openPreviewerLogtocheckfordetails.有两种原因1.main_page.json     src下的路径是否重复        2.struct关键字声明自定义组件名称是否重复我自己排查出来的......
  • 读AI未来进行式笔记06自动驾驶技术
    1.      跃层冲击1.1.        每个社会其实都处于不同的楼层,往往处于更低楼层的社会,要承受来自更高楼层的社会发展带来的更大冲击2.      驾驶2.1.        开车时最关键的不是车,而是路2.2.        人是比机器更脆弱的生命,最微不足......
  • OpenAI正式发布第一个官方.NET版本库的测试版
    尽管Microsoft和OpenAI长期以来一直是紧密相连的合作伙伴,但他们现在才开始为.NET开发人员发布官方OpenAI库,加入现有的社区库。这项工作的第一个测试版是支持.NET6和.NETStandard2.0的OpenAINuGet包,现在是2.0.0-beta.3[1]版本,列出了大约872,000次下载。在......
  • 文字游侠AI:一键创作头条爆文!(附渠道和保姆级教程)
    在互联网的迅猛发展中,自媒体已然成为一条崭新的职业路径,吸引着越来越多的人通过各类平台分享观点与知识,同时获取相应的收益。今日头条便是一个极为出色的自媒体平台,旗下的图文项目更是一条实现收益的有效途径。对于众多非专业写作爱好者来说,如何快速产出原创文章并从自媒体......
  • 【6月最新版本】ChatGPT商业运营网站源码,Midjourney绘画系统,支持AI换脸+GPTs+GPT语音
    【6月最新版本】ChatGPT商业运营网站源码,Midjourney绘画系统,支持AI换脸+GPTs+GPT语音对话+DALL-E3文生图+文档分析+Suno-AI音乐生成文章目录一、文章前言《SparkAI系统介绍文档-渐进式AIGC系统》系统核心功能二、系统演示三、系统功能模块3.1AI全模型支持/插件系统A......
  • Spring AI 第二讲 之 Chat Model API 第八节Anthropic 3 Chat
    AnthropicClaude是一系列基础人工智能模型,可用于各种应用。对于开发人员和企业来说,您可以利用API访问,直接在Anthropic的人工智能基础架构之上进行构建。SpringAI支持用于同步和流式文本生成的Anthropic消息API。Anthropic的Claude模型也可通过AmazonBedrock......
  • 使用 ISIC 快速申请 JetBrain 学生免费产品
    此篇文章适合急需通过学生优惠使用JetBrain产品并且愿意花费50(申请国际电子学生证ISIC需要50)的学生。需要等待时间1-3天,主要是等待ISIC的时间,只要ISIC发放ISICname和ISICID,将其填写到JetBrain的申请中,按JetBrain指定步骤完成即可,不需要人工审核。(如果时......