23-凸包ConvexHull(EmguCV学习)

凸缺陷 convexityDefects 凸缺陷凸包与轮廓之间的部分称为凸缺陷。凸缺陷可用来处理手势识别等问题。 阅读详情

1、说明

1、CvInvoke.ConvexHull()函数: 寻找二维点集的凸包;
hull : VectorOfPoint类型或者VectorOfInt类型(返回凸包的点或凸包点的索引);
points : 二维点集:VectorOfPoint类型
在这里插入图片描述2、ConvexHull()函数与DrawContours()函数配合,可以用来检测物体是否存在缺陷(应用);
3、convexityDefects()函数说明:计算轮廓的凸性缺陷,可以用来做手势识别

contour : 单个轮廓,数据类型: VectorOfPoint
convexHull : 凸包索引或指针,C#中只能为索引,VectorOfInt 类型(ConvexHull()函数计算出来的)
convexityDefects :  输出结果,凸性缺陷检测结果,个人觉得应该是vector<Vec4i>类型,EmguCV中可以
使用VectorOfVectorOfInt 类或Mat 类或 VectorOfRect 类来存储该结果;依次存储起始点索引、结束点索引、
最远点索引、以及最远点到凸包的距离(像素单位):必须除去256(具有8个小数位),以得到正确的距离值。

OpenCV说明:

在这里插入图片描述在这里插入图片描述
EmguCV中说明:
在这里插入图片描述

2、 二维点集的凸包

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Emgu.CV;
using Emgu.Util;
using Emgu.CV.Structure;
using Emgu.CV.CvEnum;
using Emgu.CV.Util;
using System.Drawing;
namespace lesson23
{
    class Program
    {
        static void Main(string[] args)
        {
            ///点集的凸包
            //Mat src = Mat.Zeros(500, 500, DepthType.Cv8U, 3);  //创建黑色图像

            Mat src = new Mat(500, 500, DepthType.Cv8U, 3);
            src.SetTo(new MCvScalar(0));


            Random random = new Random();
            VectorOfPoint vPoints1 = new VectorOfPoint(); //存储随机点
            VectorOfPoint hull = new VectorOfPoint();  //存储凸包点

            while (true)
            {
                hull.Clear(); //清除上一次数据
                src.SetTo(new MCvScalar(0));
                int count = random.Next(3, 60);
                for (int i = 0; i < count;i++)  //创建随机点集
                {
                    Point[] pt = new Point[1];
                    pt[0].X = random.Next(src.Cols / 5, src.Cols * 4 / 5);
                    pt[0].Y = random.Next(src.Rows / 5, src.Rows * 4 / 5);
                    //在源图像上显示随机点集
                    CvInvoke.Circle(src, pt[0], 3, 
                        new MCvScalar(random.Next(0, 255), random.Next(0, 255), random.Next(0, 255)),-1);
                    vPoints1.Push(pt);
                }
                CvInvoke.Imshow("src", src);
                CvInvoke.ConvexHull(vPoints1, hull, false, true);
                for(int i = 0; i < hull.Size;i++)       //绘制凸包(闭合曲线)
                {
                    CvInvoke.Line(src, hull[i], hull[(i + 1) % hull.Size], new MCvScalar(255, 0, 0), 2);
                }
                CvInvoke.Imshow("result", src);

                CvInvoke.WaitKey(0);
            }
        }
    }
}

在这里插入图片描述
在这里插入图片描述

3、轮廓的凸包

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Emgu.CV;
using Emgu.Util;
using Emgu.CV.Structure;
using Emgu.CV.CvEnum;
using Emgu.CV.Util;
using System.Drawing;

namespace lesson23_1
{
    class Program
    {
        static void Main(string[] args)
        {
            ///绘制每个轮廓的凸包
            Mat src = CvInvoke.Imread("22.jpg");
            Mat dst = src.Clone();
            Mat gray_img = new Mat();
            CvInvoke.CvtColor(src, gray_img, ColorConversion.Bgr2Gray);  //转换为灰度图

            CvInvoke.Threshold(gray_img, gray_img, 100, 255, ThresholdType.BinaryInv); //转换为灰度图

            VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();
            VectorOfRect hierarchy = new VectorOfRect();   //轮廓层次结构
            //发现轮廓
            CvInvoke.FindContours(gray_img, contours, hierarchy, RetrType.Tree, ChainApproxMethod.ChainApproxNone);
            //绘制所有轮廓
            Random random = new Random();
            MCvScalar color1 = new MCvScalar(random.Next(0, 255), random.Next(0, 255), random.Next(0, 255));
            //CvInvoke.DrawContours(dst, contours, -1, color1, 2);

            VectorOfInt hull = new VectorOfInt();   //存储凸包点索引
            //VectorOfPoint hull = new VectorOfPoint();  //也可以直接存储凸包点
            for(int i = 0; i < contours.Size; i++)  //绘制凸包
            {
                CvInvoke.ConvexHull(contours[i], hull);
                MCvScalar color2 = new MCvScalar(random.Next(0, 255), random.Next(0, 255), random.Next(0, 255));

                for (int j = 0; j < hull.Size; j++)
                {
                    if (j != hull.Size - 1)
                        CvInvoke.Line(dst, contours[i][hull[j]], contours[i][hull[j + 1]], color2, 2);
                    else
                        CvInvoke.Line(dst, contours[i][j], contours[i][0], color2, 2);
                }
            }
            CvInvoke.Imshow("result", dst);

            CvInvoke.WaitKey(0);
        }
    }
}

在这里插入图片描述
在这里插入图片描述

4、缺陷检测

 static void Main(string[] args)
 {
     //缺陷检测
     Mat srcImg = CvInvoke.Imread("12.png");
     Mat result = srcImg.Clone();
     Mat gray_src = new Mat();
     Mat img1 = new Mat(srcImg.Size, DepthType.Cv8U, 1);
     Mat img2 = img1.Clone();

     CvInvoke.Imshow("input", srcImg);
     CvInvoke.CvtColor(srcImg, gray_src, ColorConversion.Bgr2Gray);
     CvInvoke.Threshold(gray_src, gray_src, 100, 255, ThresholdType.Binary);

     VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();
     VectorOfRect hierarchy = new VectorOfRect();
     CvInvoke.FindContours(gray_src, contours, hierarchy, RetrType.Tree, ChainApproxMethod.ChainApproxNone);
     CvInvoke.DrawContours(img1, contours, -1, new MCvScalar(255), 2);  //创建轮廓掩码
     CvInvoke.MedianBlur(img1, img1, 5);
     CvInvoke.Imshow("contours mask", img1);
     
     VectorOfPoint hull = new VectorOfPoint();
     for(int i = 0; i < contours.Size; i++)          //绘制凸包
     {
         CvInvoke.ConvexHull(contours[i], hull);  //计算凸包
         for (int j = 0; j < hull.Size;j++)
         {
             CvInvoke.Line(img2, hull[j], hull[(j + 1) % hull.Size], new MCvScalar(255), 2);
         }
     }
     CvInvoke.MedianBlur(img2, img2, 5);
     CvInvoke.Imshow("convex hull", img2);
     Mat diff = new Mat();
     CvInvoke.AbsDiff(img1, img2, diff);
     CvInvoke.Imshow("Diff", diff);
     //输出判断缺陷结果 :NG(Not Good)、OK
     VectorOfVectorOfPoint contours2 = new VectorOfVectorOfPoint();
     VectorOfRect hierarchy2 = new VectorOfRect();

     CvInvoke.FindContours(diff, contours2, hierarchy2, RetrType.Tree, ChainApproxMethod.ChainApproxNone);
     CvInvoke.DrawContours(result, contours2, -1, new MCvScalar(0, 0, 255), 2);      //在原图像上绘制出轮廓
     if (contours2.Size > 0)      //说明存在缺陷
     {
         CvInvoke.PutText(result, "NG", new Point(80, 100), FontFace.HersheyDuplex, 0.8, new MCvScalar(0, 0, 255), 2);
     }
     else
         CvInvoke.PutText(result, "OK", new Point(80, 100), FontFace.HersheyDuplex, 0.8, new MCvScalar(0, 255, 0), 2);
     CvInvoke.Imshow("result", result);

     CvInvoke.WaitKey(0);
 }

在这里插入图片描述
在这里插入图片描述

5、轮廓凸缺陷(ConvexityDefects())

static void Main(string[] args)
      {
           //凸包缺陷检测
           Mat srcImg = CvInvoke.Imread("mask.jpg");
           Mat dst = srcImg.Clone();
           CvInvoke.Imshow("input", srcImg);
           Mat grayImg = new Mat();

           CvInvoke.CvtColor(srcImg, grayImg, ColorConversion.Bgr2Gray);
           CvInvoke.Threshold(grayImg, grayImg, 100, 255, ThresholdType.Binary);

           VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();
           VectorOfRect hierarchy = new VectorOfRect();

           CvInvoke.FindContours(grayImg, contours, hierarchy, RetrType.External, ChainApproxMethod.ChainApproxNone);
           CvInvoke.DrawContours(dst, contours, -1, new MCvScalar(255, 0, 0), 2);

           for(int i = 0; i < contours.Size;i++)
           {
               VectorOfInt hull = new VectorOfInt();
               CvInvoke.ConvexHull(contours[i], hull);    //计算凸包                
               for (int j = 0; j < hull.Size; j++)          //绘制凸包                 
               {
                   CvInvoke.Circle(dst, contours[i][hull[j]], 5, new MCvScalar(0, 255, 0), -1);
                   CvInvoke.Line(dst, contours[i][hull[j]], contours[i][hull[(j + 1) % hull.Size]],
                               new MCvScalar(0, 255, 255), 2);
               }

               Mat defects = new Mat();
               CvInvoke.ConvexityDefects(contours[i], hull, defects);          //凸包缺陷检测 ,hull必须为索引
               Console.WriteLine("{0}", defects);
               if(!defects.IsEmpty)            //中文!与英文!不同
               {
                   //1行4列
                   using (Matrix<int> m = new Matrix<int>(defects.Rows, defects.Cols, defects.NumberOfChannels))
                   {
                       defects.CopyTo(m);   //刚开始使用Int16(Short)数据类型的矩阵,将矩阵中数据截断导致结果错误!!
                       for(int j = 0; j < m.Rows;j++)
                       {
                           int startIdx = m.Data[j, 0];  //起始点在轮廓上的索引
                           int endIdx = m.Data[j, 1];
                           int farthestIdx = m.Data[j, 2];
                           double distance = m.Data[j, 3] / 256.0;  //距离

                           Point startPoint = contours[i][startIdx];
                           Point endPoint = contours[i][endIdx];
                           Point farPoint = contours[i][farthestIdx];

                           Console.WriteLine("distance = {0}.", distance);
                           CvInvoke.Line(dst, startPoint, endPoint, new MCvScalar(128, 128, 0), 2);
                           CvInvoke.Circle(dst, farPoint, 5, new MCvScalar(0, 0, 255), -1);  //红色点为距离凸包最远点
                       }
                   }
               }
           }
           CvInvoke.Imshow("result", dst);
           CvInvoke.WaitKey(0);            
       }

在这里插入图片描述
在这里插入图片描述

【Emgu CV教程】10.5、轮廓之凸包 Emgu CV教程、轮廓、凸包、ConvexHull()函数 阅读详情

相关推荐

opencv基础52-图像轮廓学习05-凸包获取-cv2.convexHull()

逼近多边形是轮廓的高度近似,但是有时候,我们希望使用一个多边形的凸包来简化它。凸包跟逼近多边形很像,只不过它是物体最外层的“凸”多边形。凸包指的是完全包含原有轮 廓,并且仅由轮廓上的点所构成的多边形。凸包的每一处都是凸的,即在凸包内连接任意两点 的直线都在凸包的内部。在凸包内,任意连续三个点的内角小于 180°。例如,在图 12-25 中,最外层的多边形为机械手的凸包,在机械手边缘与凸包之间的部分被称为凸缺陷(Convexity Defect),凸缺陷能够用来处理手势识别等问题。

小海聊智造 3113

详解OpenCV的函数convexHull()和函数convexityDefects(),并利用它们)做凸包(凸壳)检测及凸包(凸壳)的缺陷检测

要理解凸包(凸壳)检测,首无要知道什么是凸包(凸壳),凸包(凸壳)是指如果在集合A内连接任意两个点的直线段都在A的内部,则称集合A是凸形的。简单点理解,就是一个多边型,没有凹的地方。凸包(凸壳)能包含点集中所有的点,凸包检测常应用在物体识别、手势识别及边界检测等领域。 OpenCV中提供了函数convexHull()用于对物体轮廓凸包进行检测,对形状的凸包缺陷分析时使用convexityDefe...

昊虹AI笔记 2万+

斗罗大陆叙事体系与战斗系统设计解析

在文学创作与游戏设计中,世界观构建和战斗系统设计是两大核心技术要素。世界观作为故事发生的背景框架,需要融合东西方文化元素并建立量化标准,如《斗罗大陆》中武魂觉醒与魂环等级体系。战斗系统则需突破简单数值对抗,发展出武魂特性、魂技组合与环境互动的三维体系,其中魂导器技术的引入展现了科技与魔法的创新融合。这些设计原理在RPG游戏开发、网络文学创作等领域具有广泛应用价值,特别是对需要长期运营的IP作品,完善的系统设定能有效支撑剧情延展与商业化开发。本文以现象级作品为例,剖析其武魂拟态理论和魂师工业化构思如何成就经典

weixin_29291069的博客 249

opencv中凸包运算函数convexHull()的使用

让我们先从术语的两部分来理解——“凸”和“包”。一个“凸”对象是指没有内角大于180度的对象。非凸的对象称为非凸的或凹的,下图展示了凸对象和非凸对象的例子。包指的是物体的外部或轮廓。因此,一组点或形状的凸包是一个紧贴着这些点或形状的最紧凑的凸边界。如图2所示,两个黑色形状的凸包用红色线条描绘。对于凸对象,其凸包就是其边界本身;而对于凹形状,凸包则是一个最紧致地包围它的凸边界。

jndingxin的专栏 1566

大数据面试 逻辑题

逻辑题大致分为比较逻辑题、分析逻辑题、综合逻辑题、抽象逻辑题、概括逻辑题、推理逻辑题、论证逻辑题等,由于这类题比较考验综合素质,因此也一直是各大企业笔试、面试时经常喜欢考察的题目类型之一。很多童鞋认为逻辑题很难,其实不然。多做练习,打开思路,这类题还是可以轻易化解的。 下面为大家整理了网络上最全的75道逻辑判断测试题。在每道题目下方有答案,是用白色显示的,反选就可以看到啦~ 【1】假设有一个池...

zzq_0916s的博客 4421

西门子1200与FANUC机器人Profinet通讯

近期在做发那科FANUC的通讯,会吧CC-LINK、Profibus-DP、Profinet I/O、DeviceNet、EtherNet/IP这些常用通讯做成文档发上来,大家喜欢的话可以关注 注:做对应的通讯,在机器人控制柜都需要安装对应的板卡以及软件功能 PLC项目已经归档,只需要恢复就可以看到。对应Profinet通讯的GSD文件也都在博文最后有连接 机器人柜子:R-30IB Mate 机器人主体:M-10IA 12 一、硬件介绍 机器人Profinet I/O通讯板卡:...

七兔自习室 2万+

30.凸包(Convex Hull)

1.主要内容 概念介绍 API说明 代码演示 2.概念介绍 什么是凸包(Convex Hull),在一个多变形边缘或者内部任意两个点的连线都包含在多边形边界或者内部。 正式定义:包含点集合S中所有点的最小凸多边形称为凸包 检测算法- Graham扫描法(较常用的一个算法) 3.Graham扫描法介绍 首先选择Y方向最低的点作为起始点p0 从p0开始极坐标扫描,依次添加p1….pn(排...

罗伊的博客 1087

用宝塔面板+CentOS 7.6,30分钟搞定DNF手游私服搭建(附全套资源下载)

本文详细介绍了如何使用宝塔面板和CentOS 7.6在30分钟内快速搭建DNF手游私服。通过图形化界面操作,无需复杂命令,即可完成服务端部署、MySQL数据库配置及客户端适配,适合Linux新手快速上手。

weixin_33737774的博客 596

OpenCV学习之convexHull函数的理解

1、convexhull函数的作用:     计算出图像的凸包,根据图像的轮廓点,通过函数convexhull转化成凸包的点点坐标,    从而画出图像的凸包。2、convexHull函数的调用形式    void convexHull(InputArray points,OutputArray hull,bool clockwise =  false,                      ...

xueluowutong的博客 1万+

ChatGPT Plus账号被降智?3个实用检测方法+终极解决方案(附国内支付指南)

本文针对ChatGPT Plus账号性能下降问题,提供了3个科学检测方法和系统级解决方案。通过详细分析症状、专业诊断技巧和优化策略,帮助用户有效应对GPT-4o等高级功能失效、响应质量下降等问题,特别包含国内用户关心的支付方案和账号管理建议。

weixin_42639633的博客 468

Vue 实现华视身份证读卡器功能

在www.downcc.com下载“华视cvr100驱动”安装程序; 华视电子官网有相应的文档说明和程序下载 一、服务安装 选择安装目录: 启动读卡服务: 安装成功会有如图所示: 注意事项: 安装开发包必须使用管理员权限,因为windows服务和读卡器设备驱动程序均需要管理员权限,否则会安装失败。 win10需要修改组策略才有管理员权限。 二、服务的使用 打开浏览器,输入地址http://127.0.0.1:19196/mainpage,回车 点击openDevice: 点.

zyqgt960812的博客 6501

convexHull函数

1、convexHull函数 函数的作用: 计算出图像的凸包,这里是根据图像的轮廓点,通过函数 convexHull 转化成凸包的点点的坐标, 从而画出图像的凸包。 2、 convexHull函数的调用形式 C++: void convexHull(InputArray points, OutputArray hull, bool clockwise=false, bool re

qq_18343569的博客 4203

AMBA-CHI协议详解(五)

 每个事务由许多不同的packets组成,这些数据包通过互连(interconnect)传输。packets内的一组ID域段用于提供有关包的附加信息。

Crazzy_M的博客 1960

基EmguCv/OpenCv的零件的缺陷检测

基EmguCv/OpenCv的零件的缺陷检测 思路: 对图像去噪和二值化处理; 提取外部轮廓,并填充; 提取内部轮廓并以另一种颜色填充; 外轮廓和内轮廓叠加,得到缺陷区域; 对缺陷区域做二值化处理,并提取轮廓计算缺陷面积; 标记处缺陷位置。 存在的缺陷:只能检测外测缺陷,无法检测内部缺陷。效果图 源代码(c#)using Emgu.CV; using Emgu.CV.CvEnum;

哈哈哈哈哈哈哈 1万+

使用Qt和MX Component插件实现与菱PLC的通信

在本文中,我们介绍了如何使用Qt和MX Component插件实现与菱PLC的通信。我们首先安装和配置了MX Component插件,并在Qt项目中初始化和使用MX Component来连接、读取和写入PLC的数据。安装完成后,您需要在Qt项目中配置MX Component的路径,以便Qt可以找到所需的库文件。在本文中,我们将探讨如何使用Qt和MX Component插件来实现与菱PLC的通信。在主函数中,我们将初始化MX Component,并创建一个与PLC通信的示例。在上面的代码中,我们使用了。

TlScratch的博客 995

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【OpenCV图像处理】 凸包(Convex Hull)代码实现案例

凸包检测经常应用在物体识别、手势识别及边界检测等领域,还可以应用于离散点统计时判断两个不同的点集能否被一条直线分隔开,借此也可对一幅图像中的两个目标物体判断其是否有重合,也就是判断检测出的两个凸包是否相接。

目前在做 ROS相关的工作,主要是写ROS相关和C++的学习心得 1455

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

opencv实战从0到N (14)- 凸包算法 convexity defects

opencv实战从0到N (14)- 凸包算法 convexity defects 同步个人知乎:中庸 1,凸包算法(convex hull) 凸包算法: 其实很简单,就是用一个的凸多边形围住所有的点。就好像桌面上有许多图钉,用一根紧绷的橡皮筋将它们全部围起来一样。算法详细步骤: 1. 找到所有点中纵坐标y最小的电,也就是这些点中最下面的点,记为p0。 2. 然后计算其余点与该点的连线...

AI知识搬运工 1272

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

寻找轮廓findContours()、寻找凸包convexHull()、绘制轮廓drawContours() OpenCV

参考网址: findContours函数参数详解 1. 寻找轮廓:findContours函数 (1)原型: findContours( InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset=Point()); ...

Tian_fourpieces的博客 2333

EmguCV学习笔记 VB.Net 6.2 轮廓处理

EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。教程配套文件及相关说明获得pdf教程和代码。

学习微软 .net 技术开发 2028

Emgucv点的数据类型

.net数据类型 Point() point = new Point(x,y); 有序整型坐标点 PointF() pointF = new PointF(x,y); 双精度有序坐标点Emgucv数据类型MCvPoint3D32f   TDpoint;三维坐标下的点,类型为浮点型typedef struct CvPoint3D32f{float x; /* x-坐标, 通常基于0 */float ...

Abaqus3_0的博客 1385

halcon显示坐标_机器视觉入门(19)之 halcon与emgucv之间的转换

第五章 halcon与EmguCV之间的转换其实一般情况下都是halcon转emguCV了,反过来做的应该很少吧?所以本章我也是只说怎么把halcon算子转换成emguCV代码。其实halcon跟emguCV都有那么多代码,很多我也在学习中呢,所以本章只有一节,把我整理的一些学习笔记写进来与大家一起分享。先聊几个稍微简单的吧!(1) Halcon里面的read_image(),其实就相当于emgu...

weixin_39969340的博客 832

java传一张图片给c_openCV java代码将Point对象传递给本机代码(C)?

对于一个点,我建议只将x和y作为双精度传递.对于MatOfPoints和其他人:OpenCV带有转换器,可以在Mat中存储不同类型的东西.java端有转换器,它是opencv-android-sdk的一部分org.opencv.utils.Converters在opencv repo中还有一个C转换器,但是opencv-android-sdk中没有包含头文件,我只是添加了头文件而无法使用它,所以我...

weixin_35701696的博客 205

EmguCV学习笔记 VB.Net 6.5 凸包和凸缺陷

EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。教程配套文件及相关说明获得pdf教程和代码。

学习微软 .net 技术开发 1743

OpenCV函数解析之convexHull()

convexHull函数 C++:void convexHull(InputArray points, OutputArray hull, bool clockwise=false, bool returnPoints=true); OpenCV源码中关于convexHull函数的文档注释如下: /** @brief Finds the convex hull of a point s...

Young_Fan 7374

基于EmguCv的圆形答题卡识别

参考:https://blog.csdn.net/qiao_lili/article/details/83176480 网上关于C#结合EmguCv开发答题卡识别的资料很少,因为有做答题卡识别方面的需求,个人也只熟悉C#语言,找了半天也只找到一些通过C++、Python或matlab结合OpenCV来实现识别的例子,只好对着别人的例子尝试着翻译成EmguCv,还算成功。自己又针对答题卡识别封装了...

言午独行 3217

OpenCV学习笔记C#

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 Emgu.CV; using Emgu.CV.CvEnum...

xcagy-国际性的文档记录中心 2706
上一篇: 21-22轮廓绘制(EmguCV学习)
下一篇: 24-正外接矩形BoundingRectangle(EmguCV学习)
hellohake
博客等级 码龄10年 4543粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值