31-轮廓周围绘制矩形框和圆形框

OpenCV-轮廓周围绘制矩形框以及圆形框 步骤: API: 功能:近似于曲线的或与另一曲线/多边形的多边形用更少的顶点,使得它们之间的距离是小于或等于指定的精度 approxCurve=cv.approxPolyDP(curve, epsilon, closed[, approxCurve]) 矩形: BoundingRect是说,用一个最小的矩形,把找到的形状包起来。还有一个带旋转的矩形,面积会更小 minAreaRect函数返回矩... 阅读详情

轮廓周围绘制矩形和圆形框

1、API介绍;
2、代码演示;

相关API

1、轮廓线拟合API: approxPolyDP():
curve : 输入多边形;curve : 曲线
approxCurve : 输出拟合后的多边形(轮廓点数减少)
epsion : 两点之间的最小距离;
closed : 形成的多边形是否封闭;
基于RDP算法原理实现;
在这里插入图片描述
在这里插入图片描述
2、最小矩形API : cv::boundingRect() : 得到轮廓周围的最小矩形左上交点和右下交点坐标(坐标位置注意),绘制一个矩形;通过函数返回值返回;
3、旋转矩形API : cv::minAreaRect() : 得到包含轮廓的旋转矩形;
在这里插入图片描述
4、轮廓最小区域圆形绘制API : cv::minEnclosingCircle(); enclosing : 封闭的,包卷的
5、轮廓最小区域椭圆绘制API : cv::fitEllipse();

在这里插入图片描述

使用方法

1、将图像转换为二值图像;
2、发现轮廓,找到轮廓图像;
3、通过相关API在轮廓点上找到最小包含矩形和圆,旋转矩形和椭圆;
4、绘制;

Code

说明:1、 关键是approxPolyDP()的使用,可以有效减少轮廓中的点,更便于进行图像轮廓的绘制;2、注意旋转椭圆和旋转矩形在拟合后的轮廓点少于5个是无法绘制,必须排除这种情况;

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

Mat src, gray_src, drawImg;
int threshold_v = 124;
int threshold_max = 255;

RNG rng(12345);

const char* OUTPUT_WIN = "rectangle demo";
const char* INPUT_WIN = "input image";

void Contours_CallBack(int, void *);

int main(int argc, char** argv)
{
	src = imread("C:\\Users\\hello\\Desktop\\38.jpg");
	if (!src.data)
	{
		cout << "could not load the image..." << endl;
		return -1;
	}
	cvtColor(src, gray_src, CV_BGR2GRAY);
	blur(gray_src, gray_src, Size(3, 3), Point(-1, -1), BORDER_DEFAULT);  //均值模糊

	namedWindow(OUTPUT_WIN, CV_WINDOW_AUTOSIZE);
	namedWindow(INPUT_WIN, CV_WINDOW_AUTOSIZE);
	imshow(INPUT_WIN, gray_src);

	createTrackbar("Threshold value :", INPUT_WIN, &threshold_v, threshold_max, Contours_CallBack, 0);
	Contours_CallBack(threshold_v, 0);


	waitKey(0);
	return 0;
}

void Contours_CallBack(int, void *)
{
	//回调函数实现  自适应阈值API可以将灰度图像直接转换为二值图像
	Mat binary_output;
	//图像阈值处理
	threshold(gray_src, binary_output, threshold_v, threshold_max, THRESH_BINARY);

	vector<vector<Point>> contours;
	vector<Vec4i> hierarchy;
	//寻找二值图像上的轮廓
	findContours(binary_output, contours, RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(-1, -1));
	imshow("binary image", binary_output);

	//注意: 必须初始化,否则会报数组越界错误
	vector<vector<Point>> contour_ploy(contours.size());  //外接多边形
	vector<Rect> ploy_rect(contours.size());
	vector<Point2f> ccs(contours.size());  //圆心
	vector<float> radius(contours.size());

	vector<RotatedRect> minRects(contours.size());
	vector<RotatedRect> mEllipse(contours.size());
	for (size_t i = 0; i < contours.size(); i++)
	{
		approxPolyDP(contours[i], contour_ploy[i], 3, true);  //多边形轮廓拟合
		ploy_rect[i] = boundingRect(contour_ploy[i]);  //计算结果通过返回值返回
		minEnclosingCircle(contour_ploy[i], ccs[i], radius[i]);  //计算轮廓拟合圆
		//注意: 多变形轮廓拟合后的点可能少于5个,此时不能拟合椭圆,旋转矩形,需要单独判断
		if (contour_ploy[i].size() > 5)
		{
			mEllipse[i] = fitEllipse(contour_ploy[i]);   //计算轮廓拟合椭圆   
			minRects[i] = minAreaRect(contour_ploy[i]);  //计算轮廓拟合旋转矩形
		}
	}
	//绘制包含轮廓的矩形和圆
	//src.copyTo(drawImg);
	drawImg = Mat::zeros(src.size(), src.type()); //可以选择拷贝原图,还是创建黑色背景图形
	Point2f pts[4];
	for (size_t t = 0; t < contours.size(); t++)
	{
		Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
		//rectangle(drawImg, ploy_rect[t], color, 2, LINE_8);
		//circle(drawImg, ccs[t], radius[t], color, 2, LINE_8);
		if (contour_ploy[t].size() > 5)
		{
			ellipse(drawImg, mEllipse[t], color, 2, LINE_8);
			minRects[t].points(pts);   //将旋转矩形的四个坐标提取到pts中
			//旋转矩形只能通过画直线的方式来完成绘制 , 取模的操作保证画线闭合!!!
			for (int r = 0; r < 4; r++)
			{
				line(drawImg, pts[r], pts[(r + 1) % 4], color, 2, LINE_8);
			}
		}

	}
	imshow(OUTPUT_WIN, drawImg);

	return;
}

效果

1、原图:(阈值发现124最合适)
在这里插入图片描述
2、二值图像:
在这里插入图片描述
3、绘制图像:在这里插入图片描述
在这里插入图片描述

图形形状及颜色识别【Python大作业】 图像形状及颜色识别【Python大作业】。对给定的图像文件,识别其中的规则图形(圆形、三角形、矩形、正方形、菱形、其他四边形、五角星、其他多边形)的形状及所填充的颜色(红绿蓝黄黑等) 阅读详情

相关推荐

聚类算法原理与实战:从K-Means到DBSCAN的工程落地

聚类是无监督学习的核心技术,指在无标签前提下,依据数据内在的距离、密度或连通性结构自动发现自然分组。其本质不是分类的简化,而是探索性数据分析的基石,支撑用户分群、异常检测、推荐系统冷启动等关键场景。理解K-Means的球形假设、K-Means++的初始化优化机制,以及DBSCAN基于密度连接性的噪声鲁棒性,是避免‘结果不可解释’‘业务用不上’等落地陷阱的前提。本文结合电商用户分群真实案例,覆盖数据预处理、参数调优、评估双轨制及业务接口封装,强调Artificial Intelligence在无监督场景下的自

agtvo48266的专栏 350

轮廓周围绘制矩形框和圆形框

#include <opencv2/opencv.hpp> #include <iostream> #include <math.h> #include <opencv2\imgproc\types_c.h> using namespace std; using namespace cv; Mat src, gray_src, drawImg; i...

YangYaYan的博客 871

SolidWorks_工程图设计4_局部放大视图

局部放大视图技术指南 摘要 本文系统介绍了局部放大视图在工程制图和数据可视化中的应用技术。主要内容包括:局部放大视图的基本概念与组成要素、设计原则(比例选择、区域选择、标注一致性等),以及使用Python Matplotlib库实现局部放大视图的完整代码示例。通过模拟机械零件图的倒角细节展示,演示了如何创建包含主视图与放大视图的专业图表,并实现精确尺寸标注。该技术可广泛应用于CAD绘图、工程文档制作和数据可视化领域,有效解决细小特征难以清晰展示的技术难题,提升技术图纸的可读性和准确性。

H17853509096的博客 333

opencv笔记三十一(轮廓周围绘制矩形框和圆形框)

  API: approxPolyDP(  //减少多边形轮廓点数 InputArray  curve //一般是由图像的轮廓点组成的点集 OutputArray  approxCurve //表示输出的多边形点集 double  epsilon //主要表示输出的精度,就是两个轮廓点之间最大距离数,5,6,7,,8,,,,, bool  closed) //表示输出的多边形是否封闭 ...

C++养成记 3742

opencv之轮廓周围绘制矩形框和圆形框实例下载

获取图像的轮廓,并在轮廓周围绘制图形在图像处理中很常用,此实例详细讲解了发现轮廓的步骤, 通过相关API在轮廓中找到最小矩形和圆,旋转矩形和椭圆,然后绘制。

量化交易新手入门:从零开始搭建你的第一个Python交易策略(附完整代码)

本文为量化交易新手提供从零开始搭建Python双均线策略的完整指南,涵盖环境配置、数据获取、策略实现及风险管理等关键步骤。通过详细的代码示例和实践建议,帮助读者快速掌握量化交易的核心技术,并避免常见陷阱。文章特别强调Python在量化交易中的技术革新优势,适合希望进入金融科技领域的初学者。

weixin_26905487的博客 443

给轮廓画出矩形和圆形边界

OpenCV支持大量的轮廓、边缘、边界的相关函数,相应的函数有moments、HuMoments、findContours、drawContours、approxPolyDP、arcLength、boundingRect、contourArea、convexHull、fitEllipse、fitLine、isContourConvex、minAreaRect、minEnclosingCircle、

玄霄 5262

基于eBPF和LSM的强制文件访问控制系统架构设计和实现

本文介绍了一种基于 eBPF 与 Linux 安全模块(LSM)实现的强制文件访问控制系统。该系统利用 eBPF 的高性能和动态加载能力以及 LSM 的系统调用拦截功能,提供了灵活且强大的文件访问控制策略。文章详细描述了系统的设计思路、架构组成、关键代码实现及错误处理方式。通过用户空间程序与内核态 eBPF 程序的协作,实现了对文件操作的实时监控和控制,支持动态更新安全策略而无需重启系统。此外,文中还讨论了未来可能的扩展方向,如增加更多 hook 点、集成其他安全模块以及性能优化等。

Linux内核研究者 1839

opencv之轮廓周围绘制矩形框和圆形框

轮廓周围绘制矩形框和圆形框 在图片轮廓之外,绘制标准矩形或圆形进行标注 相关函数API 多边拟合函数API void approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed) 函数功能 基于RDP算法实现,目的是减少多边形轮廓的点数,加快运算效率,对图像轮...

笔记用 1435

[QMT量化交易小白入门]-105、震荡市最适合的策略:ETF多标的动态网格策略,回测年化收益47.81%

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写200篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 2061

基于FFT的轴承故障诊断 - MATLAB代码和详细解释

最后,我们可以根据异常特征的位置和特征分析来确定轴承故障的类型。最后,我们可以根据异常特征的位置和特征分析来确定轴承故障的类型。因此,通过分析频谱图,我们可以识别轴承故障的特征。因此,通过分析频谱图,我们可以识别轴承故障的特征。我们可以选择适当的阈值,并在频谱图上标记异常特征。通过这种基于FFT的轴承故障诊断方法,我们可以快速、准确地检测和诊断轴承故障。接下来,我们将应用FFT来获取振动信号的频谱信息,频谱显示了信号在不同频率上的能量分布。通过将异常特征标记在频谱图上,我们可以直观地识别轴承故障的存在。

COWizard的博客 613

第31课 轮廓周围绘制矩形框和圆形框

文章目录1. 步骤2. 相关API2.1 approxPolyDP()2.2 cv::boundingRect()2.3 cv::minAreaRect()2.4 cv::minEnclosingCircle()2.5 cv::fitEllipse()3. 例程 1. 步骤 首先将图像变为二值图像threshold() 发现轮廓,找到图像轮廓canny() 通过相关API在轮廓点上找到最小包含矩...

weixin_42877426的博客 270

Unreal从入门到精通之如何绘制用于VR的3DUI交互的手柄射线

之前我写过一篇文章《Unreal5从入门到精通之如何在VR中使用3DUI》,其中讲到使用WidgetComponent和3DUI进行交互。然而,这种方法存在一个问题:为了让射线可视化,我们需要勾选“调试/显示调试”,这样才能在手柄上看到代表其指向的一条红色射线。但最关键的问题是,这个显示调试信息的功能只属于Debug调试模式,也就是说,一旦将项目正式打包发布,这条射线辅助线就没有了。如下图所示:我就觉得Unreal官方真的是有点过分了,这不应该是最基本的功能么?难道我们VR要在Debug模式下发布?

TxNet 1611

【麦子学院】OpenCV教程函数总结

opencv 2.4.4版本共100个自带例子。 parter 1: No1. adaptiveskindetector.cpp 利用HSV空间的色调信息的皮肤检测,背景不能有太多与肤色相似的颜色。效果不是特别好。 No2. bagofwords_classification.cpp 好大一串……目前还看不懂。 No3. bgfg_codebook.cpp 前后背景分离。开启摄像头或

coco510的专栏 2288

【AI面试】2026 AI Agent 应用开发|应届生简历模板 + 完整学习路线图(校招可直接复用)

很多同学学完 RAG、Agent 之后,不知道简历怎么写,项目写成 “调用大模型 API 实现聊天机器人”,投出去几乎没有面试。AI Agent 应用开发,本质还是软件开发岗位。简历要突出工程能力、踩坑优化、问题解决,不要只堆砌 AI 关键词。注意:本文针对【AI 应用开发 / Agent 应用工程师】本科校招;不适合大模型训练、微调算法岗。AI Agent 应用开发岗位,不是只会写提示词、调用 API 就可以拿到 offer。拥有传统软件工程基本功,同时懂大模型、RAG、Agent 工程落地的开发者。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 297

RK3568平台开发系列讲解(UBOOT篇)u-boot启动流程

U-Boot(Universal Bootloader)是一种开源的引导加载程序,广泛用于嵌入式系统中。它的主要功能是初始化硬件设备,加载操作系统内核,并将控制权交给操作系统。U-Boot的启动流程可以分为多个阶段,以下是典型的U-Boot启动流程:

内核笔记 1232

PP-DocLayoutV3部署案例:保险理赔材料中多页非标准单据结构化提取

本文介绍了如何在星图GPU平台上自动化部署PP-DocLayoutV3镜像,高效实现保险理赔材料中多页非标准单据(如倾斜发票、手写批注、印章遮挡文档)的结构化提取。通过多边形布局分析与逻辑顺序重建,可精准输出JSON格式字段,显著提升OCR识别准确率与业务处理效率。

weixin_35705784的博客 312

禾赛激光雷达AT128P/海康相机(1):ROS环境设备驱动

sudo cp *.so /opt/MVS/lib/64/ # 复制当前文件夹中所有.so文件 到 “/opt/MVS/lib/64/” 文件中。将相应的.so文件复制到 /opt/MVS/lib/64/。我解压的是x86_64的,解压之后,打开,再解压MVS。然后在上一层,也就是选择x86_64那一层打开终端。新建一个工作空间,或者打开自己的工作空间。)包放在src内,并解压,然后编译。MVS V2.1.2下载之后解压,// 驱动代码下载到src文件里面。// 特定文件夹中打开终端。

努力努力努力 882

Python-OpenCv实现出入口计数并显示

前言 这是我们数字图像处理课完成的一个实验项目,参考了网上的一些代码,针对我们老师给的需要统计人数的视频进行了一些修改。 源代码下载 一、背景剔除并二值化 高斯模糊: gray = cv2.GaussianBlur(frame, (31, 31), 0) 作用:视频因为自然震动、光照变化或者摄像头本身等原因产生的噪声,对噪声进行平滑为了避免在运动和跟踪时将其检测出来。 背景剔除 ...

万万VV 5818

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

opencv python轻松入门_OpenCV轻松入门 面向Python

章OPENCV入门11.1如何使用11.2图像处理基本操作31.2.1读取图像31.2.2显示图像51.2.3保存图像91.3OpenCV贡献库10第2章图像处理基础112.1图像的基本表示方法112.2像素处理152.3使用numpy.array访问像素232.4感兴趣区域(ROI)292.5通道操作322.5.1通道拆分322.5.2通道合并342.6获取图像属性36第3章图像运算373.1图...

weixin_39850981的博客 410

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

工业视觉笔记快捷搜索---目录

工业视觉需要时可抄的代码---持续更新 一(1-28)目录1、批量访问图片,等待键盘1.2 批量访问图像(不用提前批量重命名)--访问文件夹底下所有同类型图像1.2.1 单独只有批量访问的1.3 批量访问图像(也是不用提前批量重命名)--访问文件夹底下所有同类型图像1.4 批量访问图像(也是不用提前批量重命名)--访问文件夹底下所有同类型图像1.5 批量访问图像(不用提前批量重命名)--单张和批量前面路径相同(jiefeng)1.6 批量访问图像(不用提前批量重命名)--单张和批量前面路径相同(bioake

weixin_47059239的博客 1531

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

OpenCV 自带例程总结

http://lv.xiao.yu.blog.163.com/blog/static/5419127320138191291534/ opencv 2.4.4版本共100个自带例子。 parter 1: No1. adaptiveskindetector.cpp 利用HSV空间的色调信息的皮肤检测,背景不能有太多与肤色相似的颜色。效果不是特别好。 No2. bagof

sherry_gp的博客 2174

EagleEye作品展示:支持多边形ROI区域设定,仅检测指定兴趣区内的目标

本文介绍了如何在星图GPU平台上自动化部署EagleEye: DAMO-YOLO TinyNAS镜像,实现工业场景下的多边形ROI目标检测。用户可快速划定任意形状兴趣区,仅对指定区域进行高精度、低延迟检测,广泛应用于产线质检、物流分拣等实时视觉分析任务。

weixin_32661831的博客 128

Opencv2.4.4示例程序说明

parter 1: No1.  adaptiveskindetector.cpp 利用HSV空间的色调信息的皮肤检测,背景不能有太多与肤色相似的颜色。效果不是特别好。 No2.  bagofwords_classification.cpp 好大一串……目前还看不懂。 No3.   bgfg_codebook.cpp 前后背景分离。开启摄像头或读取视频。 No4.   bgfg_gmg

踟蹰横渡口,彳亍上滩舟。 2万+
上一篇: 30-凸包(Convex Hull)
下一篇: 32-图形矩(Image Moments)
hellohake
博客等级 码龄10年 4543粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值