【EmguCV】EmguCV各种调用

【EmguCV】EmguCV各种调用后续将不定期补充在使用 EmguCV 过程中的一些笔记 如何调用 api 实现相应功能 1 查找对应的轮廓 IntPtrDyncon newIntPtr 存放检测到的图像块的首地址 IntPtrDynsto CvInvoke cvCreateMemS 0 开辟内存区域 intm 88 intn CvInvoke cvFindCont

后续将不定期补充在使用EmguCV过程中的一些笔记,如何调用api实现相应功能。

1、查找对应的轮廓

IntPtr Dyncontour = new IntPtr();//存放检测到的图像块的首地址 IntPtr Dynstorage = CvInvoke.cvCreateMemStorage(0);//开辟内存区域 int m = 88; int n = CvInvoke.cvFindContours(image, Dynstorage, ref Dyncontour, m, Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_EXTERNAL, Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE, new Point(1, 1)); Seq 
  
    header = new Seq 
   
     (Dyncontour, null); Seq 
    
      contourTemp = header; MemStorage stor = new MemStorage(); while (contourTemp != null)// 获取符合条件的轮廓 { image.Draw(contourTemp.BoundingRectangle, new Gray(255), 2); contourTemp = contourTemp.HNext; } 
     
    
  

2、斑点检测

Emgu.CV.Cvb.CvBlobs resultingImgBlobs = new Emgu.CV.Cvb.CvBlobs(); Emgu.CV.Cvb.CvBlobDetector bDetect = new Emgu.CV.Cvb.CvBlobDetector(); uint numWebcamBlobsFound = bDetect.Detect(img, resultingImgBlobs); foreach (Emgu.CV.Cvb.CvBlob targetBlob in resultingImgBlobs.Values) { img.Draw(...); } 

3、判断是否为圆

 public int checkIfCircle(Emgu.CV.Cvb.CvBlob blob, double ratio) { int ret = 0; IntPtr Dyncontour = new IntPtr(); MemStorage Dynstorage = new MemStorage(); Dyncontour = blob.GetContour(Dynstorage); //通过拟合圆方法判断检测到的斑点是否为圆。 PointF pf = new PointF(0, 0); float radius = 0; CvInvoke.cvMinEnclosingCircle(Dyncontour, out pf, out radius); double cArea = 3.14 * radius * radius; if (cArea - blob.Area < cArea * ratio) // 如果拟合圆的面积跟斑点面积相差不大 {// 圆 ret = 1; } else { ret = 0; } Dynstorage.Dispose(); return ret; } 

houghline detection

 Image 
  
    imgGray = img.Convert 
   
     (); MemStorage storage = new MemStorage(); IntPtr intPtrHoughLines = CvInvoke.cvHoughLines2(imgGray, storage, HOUGH_TYPE.CV_HOUGH_PROBABILISTIC, 1, Math.PI / 180, 50, 100, 10);             Seq 
    
      lineSegment = new Seq 
     
       (intPtrHoughLines, storage); Seq 
      
        lineSegmentTemp = lineSegment;             //画出检测结果 unsafe             {                 for (int i = 0; i < lineSegment.Total; ++i)                 {                     Point* point = (Point*)CvInvoke.cvGetSeqElem(intPtrHoughLines, i); CvInvoke.cvLine(img, point[0], point[1], new MCvScalar(255, 0, 0), 2, LINE_TYPE.CV_AA, 0);//在原图像中画线                 }             } saveImg(TAG, img); 
       
      
     
    
  
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209617.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午8:49
下一篇 2026年3月19日 上午8:49


相关推荐

  • Shell脚本编程规范

    Shell脚本编程规范文章目录一 注释 头部注释 单行注释与多行注释 二 排版规范 1 程序块采用缩进 缩进为 4 个空格 修改 vim 中 Tab 键的距离 2 函数编写 3 命令较长需分行书写 在低优先级操作符处划分新行 用 标识 4 一行只写一条语句 5 逻辑运算符 amp amp 和重定向 管道符前后要留空格 6 一个函数只完成一个功能 且不能超过 100 行 7 case 语句格式 8 注释与上面的代码用空行隔开 三 变量规范 1 变量名由字母 数字 下划线组成 只能以字母 下划线开头 2 尽量减少全局变量

    2026年3月16日
    2
  • javascript图片展示墙特效

    查看效果:http://hovertree.com/code/javascript/pwl4bhoi.htm代码如下:1<!DOCTYPEhtml>2<html>

    2021年12月21日
    61
  • Windows服务器IIS搭建网站

    Windows服务器IIS搭建网站概述:以下总结了学习IIS搭建网站的方法,先从基本使用IIS搭建网站,到本地使用域名访问网站,再配置路由器实现外网IP访问内网网站,以及使用动态域名外网访问内网网站,最后配置不同域名(IIS也叫主机名),相同IP,相同端口(80)的不同的网站的访问(注意域名不备案外网无法访问)!即输入以下域名可以访问相同端口(80)但不同的网站:127.0.0.1/test1——&gt;www.g…

    2022年5月20日
    138
  • 立创·泰山派1M-RK3566

    立创·泰山派1M-RK3566

    2026年3月13日
    2
  • AndroidStudio入门基础(一)——基础布局

    AndroidStudio入门基础(一)——基础布局写在前面:上学期学习了Android,从一开始的什么都不懂到后来成功做出一个课程设计作品,回忆起来一路还是充满坎坷和辛酸泪的啊。遗忘是可怕的,为了防止以后把好不容易学到的东西忘得一干二净,我打算写一系列的AndroidStudio教程记录一些有用的知识点,当然,我会从最基础的地方写起,希望可以帮助到一些初学者~最后,如果时间和精力允许的情况下,我会一步步的还原我的课程设计,喵喵喵~(…

    2022年6月11日
    52
  • 硬核!用Mac Mini翻新了一台12年前的电脑

    硬核!用Mac Mini翻新了一台12年前的电脑本文转载自差评君有这么一位差友,不知道从哪儿加到了托尼的微信,都还没打招呼呢,上来就向我展现了他最近的硬核杰作。他将M1款的MacMini塞进了09年款27寸iMac,并把详细过程一股脑发给了我。尽管不清楚这样做有什么意义,但确实是做的很硬核,手法也相当专业,简单来说,他愣是把一台新电脑,塞进了一台老电脑。。。整理了一下他发过来的内容,大致弄清了这事儿的前因后果。把M1款的Macmini,塞进了09年iMac的想法,是他在看到了油管上有一位叫L…

    2022年5月30日
    90

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号