24-正外接矩形BoundingRectangle(EmguCV学习)

ImageJ实践——拟合矩形选区探究(bounding rectangle),左侧优先法则 夹角长短WH左小右大左短右长W短H长左大右小左长右短W长H短左小右大左长右短W长H短左大右小左短右长W长H短注:W表示结果中的Width,H表示结果中的Height通过上面4例实测和总结表:观察夹角和WH,发现夹角和WH的关系并不一一对应,如果说哪边夹角大哪边就是W且长,反之则是H且短,那么第3例则不支持此结论;观察长短和WH,发现长短和WH的关系更没有共同之处。 阅读详情

文章目录

说明

1、BoundingRectangle()寻找出来的最小外接矩形可以根据其宽高对轮廓进行筛选,去除小的干扰轮廓
在这里插入图片描述

Code

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.Util;
using Emgu.CV.Structure;
using Emgu.CV.CvEnum;
using System.Drawing;

namespace lesson24_25
{
    class Program
    {
        static void Main(string[] args)
        {
            ////外接矩形
            //Mat src = CvInvoke.Imread("22.jpg");
            //Mat dst = src.Clone();
            //Mat grayImg = new Mat();

            //CvInvoke.CvtColor(src, grayImg, ColorConversion.Bgr2Gray);  //转换为灰度图
            //CvInvoke.Threshold(grayImg, grayImg, 100, 255, ThresholdType.BinaryInv);//转换为二值图
            //CvInvoke.Imshow("binary image", grayImg);

            //VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();
            //Mat hierarchy = new Mat();  //n * 4矩阵
            //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++)
            //{
            //    Rectangle rect = CvInvoke.BoundingRectangle(contours[i]);   //计算最小外接矩形
            //    CvInvoke.Rectangle(dst, rect, new MCvScalar(0, 0, 255), 2); //绘制最小外接矩形
            //    CvInvoke.PutText(dst, "bounding rectangle", new Point(rect.X, rect.Y - 10), FontFace.HersheyPlain, 1.2, new MCvScalar(0, 0, 255), 2);
            //}
            //CvInvoke.Imshow("result", dst);

            ///硬币分割
            //Mat src = CvInvoke.Imread("33.png");
            //Mat dst = src.Clone();
            //Mat grayImg = new Mat();
            //CvInvoke.CvtColor(src, grayImg, ColorConversion.Bgr2Gray);
            //CvInvoke.Threshold(grayImg, grayImg, 100, 255, ThresholdType.Binary);
            //CvInvoke.Imshow("binary image", grayImg);
            //Mat element = CvInvoke.GetStructuringElement(ElementShape.Rectangle, new Size(3, 3), new Point(-1, -1));//定义掩膜核
            //CvInvoke.Dilate(grayImg, grayImg, element, new Point(-1, -1), 1, BorderType.Default,new MCvScalar(0));
            //CvInvoke.Imshow("dilate image", grayImg);

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

            //for(int i = 0; i < contours.Size; i++)
            //{
            //    Rectangle rect = CvInvoke.BoundingRectangle(contours[i]);
            //    int width = rect.Width;
            //    int height = rect.Height;
            //    if(width > 20 &&  height > 10)
            //    {
            //        CvInvoke.Rectangle(dst, rect, new MCvScalar(0, 0, 255), 2);
            //    }
            //}
            //CvInvoke.Imshow("result", dst);

            //CvInvoke.WaitKey(0);

            ///车牌提取与字符分割
            Mat src = CvInvoke.Imread("car2.jpg");
            Mat dst = src.Clone();
            Mat grayImg = new Mat();
            CvInvoke.Imshow("input", src);
            CvInvoke.CvtColor(src, grayImg, ColorConversion.Bgr2Gray);
            CvInvoke.Threshold(grayImg, grayImg, 100, 255, ThresholdType.Binary);
            CvInvoke.MedianBlur(grayImg, grayImg, 5);
            Mat kernel = CvInvoke.GetStructuringElement(ElementShape.Rectangle, new Size(5, 5), new Point(-1, -1));
            CvInvoke.Dilate(grayImg, grayImg, kernel, new Point(-1, -1), 1, BorderType.Default, new MCvScalar(0));

            CvInvoke.Imshow("binary", grayImg);
            VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();
            VectorOfRect hierarchy = new VectorOfRect();

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

            int count = 0;
            for(int i = 0; i < contours.Size; i++)
            {
                Rectangle rect = CvInvoke.BoundingRectangle(contours[i]);
                int w0 = rect.Width;
                int h0 = rect.Height;
                if (w0 > src.Cols / 12 && w0 < src.Cols / 7 && h0 > src.Rows / 6 && h0 < src.Rows * 5 / 6)
                {
                    count++;
                    string name = String.Format("C:\\Users\\hello\\Desktop\\{0}.bmp", count);
                    Mat roi = new Mat(dst, rect);
                    CvInvoke.Imwrite(name, roi);
                    CvInvoke.Rectangle(dst, rect, new MCvScalar(0, 255, 0), 2);
                }
            }

            CvInvoke.Imshow("result", dst);
            CvInvoke.WaitKey(0);
        }
    }
}

效果

1、正外接矩形:
在这里插入图片描述

2、硬币检测:

在这里插入图片描述3、车牌分割:
在这里插入图片描述

在这里插入图片描述
4、车牌分割:(做膨胀处理,使“粤”连通起来)

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

boundingRect 输入点返回最小矩形 1、boundingRect函数 函数作用: 计算轮廓的垂直边界最小矩形,矩形是与图像上下边界平行的 2、boundingRect函数调用形式 C++: Rect boundingRect(InputArray points) points 二维点集,点的序列或向量 (Mat) 阅读详情

相关推荐

25-轮廓最小外接矩形(minAreaRect())(EmguCV学习)

文章目录说明Code效果 说明 Code 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.Util; using Emgu...

hello 6060

【Emgu CV教程】10.2、轮廓之外接矩形、面积计算

Emgu CV教程、轮廓之外接矩形、面积计算、BoundingRectangle()函数、ContourArea()函数

活宝的博客 1259

c# + Emgu.CV学习(一):基本图像处理

目录一、图形处理1、创建图像2、图像的读取、保存、展示3、绘制文本和绘制图形3、颜色提取4、灰度图片5、二值化(先将图片转化为灰度图像)6、图像差7、图像合成二、加载图像 一、图形处理 1、创建图像 Mat image = new Mat(); 2、图像的读取、保存、展示 1.1、图像读取(路径) string path=@"E:\\0.jpg"; //图片路径 Mat imageRead = CvInvoke.Imread(Path); //读取图片 1.2、图像读取(图片) Mat i

qq_41373415的博客 5820

EmguCV学习笔记 C# 6.3 轮廓外接多边形

7、获得轮廓B上的每个点到轮廓A的距离,判断是否符合条件:理论上等于0就表示该点在轮廓A上,但是通常不会直接判断=0而是给定一个范围。如果measureDist设置为false,则返回一个整数值:1表示点在多边形内部,0表示点在多边形边界上,-1表示点在多边形外部。如果measureDist设置为true,则返回给定点到多边形的最短距离,正值表示点在多边形外部,负值表示点在多边形内部。通过运行结果,可以看出此方法获得的坐标点太多,误差比较大,为此在下面的代码中进行改进,采用平均值来获得坐标点。

学习微软 .net 技术开发 1964

以太网接口及POE设计

PoE标准 Power Over Ethernet 是有源以太网供电的简称 通过Cat-5电缆供电在IEEE 802.3af以太网供电标准中进行了定义。PoE标准以前限制在几瓦以内,但更新的PoE技术可实现更高的功率。例如,PoE+允许每端口功率高达25 W,而PoE++(四 对以太网供电系统)通过使用现有电缆的所有电线允许70 W到100 W的功率。与此PoE标准并行的是ADI公司定义的专有标准 LTPoE++™,该标准定义高达90W的受电设备(PD)功率规范(请参见表1)。 表1. ADI...

u010783226的专栏 1万+

泛微Ecology流程数据表结构解析:workflow_requestbase和workflow_currentoperator到底怎么关联查询?

本文深入解析泛微Ecology系统中workflow_requestbase和workflow_currentoperator表的结构与关联机制,提供SQL查询语句示例,帮助开发者高效查询流程数据。涵盖待办事项、已办事项、办结事项和流程监控等典型场景,并分享性能优化技巧和常见问题排查指南。

weixin_33738555的博客 805

opencv-python中 boundingRect(cnt)以及cv2.rectangle用法

转自 http://blog.csdn.net/zhangxb35/article/details/47275277 矩形边框(Bounding Rectangle)是说,用一个最小的矩形,把找到的形状包起来。还有一个带旋转的矩形,面积会更小,效果见下图 上代码 首先介绍下cv2.boundingRect(img)这个函数 这个函数很简单,img是一个二值图,也就是它的参数;

hjxu2016的博客 17万+

SMETANA 安装使用教程

关于SMETANA的安装和简单使用信息

qq_44940977的博客 1166

OpenCV boundingRect 与 minAreaRect 用法

矩形边框(Bounding Rectangle)是说,用一个最小的矩形,把找到的形状包起来。还有一个带旋转的矩形,面积会更小,效果见下图 首先介绍下cv2.boundingRect(img)这个函数 这个函数很简单,img是一个二值图,也就是它的参数; 返回四个值,分别是x,y,w,h; x,y是矩阵左上点的坐标,w,h是矩阵的宽和高 然后利用cv2.rectan

_yuki_ 4万+

Openclaw 错误分析 与 解决方案 之:Selected model is at capacity. Try a different model, or wait and retry.

Openclaw 错误分析 与 解决方案 :Selected model is at capacity. Try a different model, or wait and retry.

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 6413

YOLOv8/v9 遥感图像目标检测实战指南:建筑物检测与变化监测

遥感图像在城市规划、灾害评估、农业监管等领域应用广泛,但传统目标检测方法存在效率低、精度不足、难以适配遥感图像大尺寸、多尺度目标等问题。本文以“建筑物检测与变化监测”为核心,基于DOTA、NWPU VHR-10等公开数据集,系统讲解YOLOv8/v9在遥感图像中的实战流程。从数据获取、格式转换、模型训练优化,到大图切片推理、建筑物变化监测,全程提供可复现的代码与参数配置。通过针对性优化(旋转增强、切片推理等),模型在NWPU VHR-10数据集上mAP50达0.85以上,可适配卫星影像、无人机航拍等多场景

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 519

boundingRect函数

1、boundingRect函数 函数作用: 计算轮廓的垂直边界最小矩形,矩形是与图像上下边界平行的 2、boundingRect函数调用形式 C++: Rect boundingRect(InputArray points) points 二维点集,点的序列或向量 (Mat)  3、opencv代码 #include "opencv2/hi

qq_18343569的博客 4万+

大模型安全-生成检测-事实核查-攻击-防御-思考-记忆-融合-语音相关研究 2025年版

本文整理了关于大模型安全领域的综合性资源,包括7篇综述论文、9个安全数据集以及5篇强化学习相关的安全研究论文。主要涉及大模型的对抗攻击、隐私保护、安全评估等方向,涵盖TruthfulQA、ToxiGen等知名数据集和TrustLLM、HarmBench等关键研究。资源包括知乎博主分享、arXiv预印本和顶会论文,并附有详细的中文讲解链接,为研究者提供了系统性的安全研究参考。

CSPhD-winston的博客 3575

使用EmguCv计算包围物体的最小圆与最小可旋转矩形和不可选择矩形

这篇博客需要用的上篇博客用的轮廓寻找的数据 链接 所使用的函数为BoundingRectangle、MinEnclosingCircle、MinAreaRect。 这三者所使用的参数并不一样,BoundingRectangle函数的参数为检测到的直接数据。 其他两个均为转化得来的PointF数组。 图片中分块的多个图形也可以检测的到。 有了上篇博客的基础,这个并不难。代码:public

k 1万+

Hermes Agent 桌面版安装部署完全指南:一步步安装自进化Agent智能体

是由开发的开源自主 AI 智能体(MIT 协议)。它不是绑定在集成编辑器上的编码助手,也不是围绕单一 API 的聊天机器人封装——它是一个越用越强大的自主智能体,拥有独一无二的闭环学习系统特性说明自主技能创建在复杂任务后自动生成可复用的 Skills(技能)技能自我改进使用过程中持续优化已有技能持久化记忆跨会话记住你的项目、偏好和解决方案用户画像建模通过 Honcho 方言式推理,逐步构建对你的深度理解20+ 平台接入。

大模型与Agent智能体 7755

pcie硬件时序分析实战(PHY层眼图测量)​

PCIe高速接口的信号完整性(SI)直接影响系统带宽和稳定性。其中,​。

xiaoheshang_123的博客 858

opencv-python中 boundingRect()函数解析

boundingRect()函数解析

qq_42120059的博客 2850

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

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

【C#】用EmguCV 绘制各种轮廓线

一般在做影像处理时,为提升效率,常会将影像转为二值影像后再进行处理。 在EmguCV内有许多找轮廓线的方法,但是随着版本更新,不同版本的函数 不见得会一样,每次都要重新查询实在很麻烦,那不如把他们记下来。版本概要: EmguCV版本:3.2.0.2682 编译器版本: Visual Studio 2017 Community 方案平台: x64 (许多导致程式无法执行的原因是因为没有改执

daan5com的博客 8928

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C# OpenCV学习笔记五之图像轮廓

原始图 轮廓图 相关代码如下             Image imageSource = new Image((Bitmap)loadPictureBox.Image);             Image imageGrayscale = imageSour

边城骆驼 -- 每天进步百分之一 9854

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

OpenCV 中boundingRect、minAreaRect的用法区别

当得到对象轮廓后,可用boundingRect()得到包覆此轮廓的最小正矩形,minAreaRect()得到包覆轮廓的最小斜矩形。 1)Rect boundingRect(InputArray points) points:输入信息,可以为包含点的容器(vector)或是Mat。 返回包覆输入信息的最小正矩形。如下图:   2)RotatedRect minAreaRect(InputAr...

u013925378的博客 5万+

EMGU.CV入门(十四、图像轮廓)

一、轮廓 1.1 边缘和轮廓的区别 边缘:离散的,断开的 轮廓:整体的,连续的 边缘检测主要是通过一些手段检测数字图像中明暗变化剧烈(即梯度变化比较大)像素点,偏向于图像中像素点的变化。如canny边缘检测,结果通常保存在和源图片一样尺寸和类型的边缘图中。 轮廓检测指检测图像中的对象边界,更偏向于关注上层语义对象。如OpenCV中的findContours()函数, 它会得到每一个轮廓并以点向量方式存储,除此也得到一个图像的拓扑信息,即一个轮廓的后一个轮廓、前一个轮廓、父轮廓和内嵌轮廓的索引编号。 1.2

LyRics1996的博客 3403

C# EmguCV图像处理截取矩形区域

Rectangle rectangle = new Rectangle(10,20,30,40);Image&lt;Gray, byte&gt; Sub = Image.GetSubRect(rectangle); Image&lt;Gray, byte&gt; CropImage = new Image&lt;Gray, byte&gt;(Sub.Size); CvInvoke.cvCopy(S...

jl2462112553的博客 1万+

Qt中如何改变三角形图形项的包围盒

Bounding Rect 和 Shape 的联系与区别 Bounding Rect 将 item 的外边界定义为矩形,所有绘制必须限制在此区域内,QGraphicsView 使用它来确定 item 是否需要重绘。 虽然 item 的形状可以是任意的(例如:直线、椭圆、矩形 ),但是 bounding rect 总是矩形,并且不受 item 变换的影响。 shape 以本地坐标中的 QPainte...

楼上小宇_home 1187

EmguCV学习笔记 VB.Net 第3章 图形绘制

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。教程配套文件及相关说明获得pdf教程和代码。

学习微软 .net 技术开发 711

opencv学习之路(25)、轮廓查找与绘制(四)——正外接矩形

一、简介 二、外接矩形的查找绘制 1 #include "opencv2/opencv.hpp" 2 using namespace cv; 3 void main() 4 { 5 //外接矩形的查找绘制 6 Mat srcImg =imread("E://12.jpg"); 7 imshow("src",srcImg); 8 Mat dstImg = srcImg.clone(); //原图备份 9 cvtColor(srcIm

天下对手教会少林武僧 1567
上一篇: 23-凸包ConvexHull(EmguCV学习)
下一篇: 25-轮廓最小外接矩形(minAreaRect())(EmguCV学习)
hellohake
博客等级 码龄10年 4543粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值