iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >OpenCV如何实现绘制轮廓外接矩形
  • 154
分享到

OpenCV如何实现绘制轮廓外接矩形

2023-07-04 22:07:56 154人浏览 安东尼
摘要

本篇内容介绍了“OpenCV如何实现绘制轮廓外接矩形”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.寻找轮廓apivoid cv

本篇内容介绍了“OpenCV如何实现绘制轮廓外接矩形”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1.寻找轮廓

api

void cv::findContours( InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point()

各个参数详解如下:

Image表示输入图像,必须是二值图像,二值图像可以threshold输出、Canny输出、inRange输出、自适应阈值输出等。

Contours获取的轮廓,每个轮廓是一系列的点集合

Hierarchy轮廓的层次信息,每个轮廓有四个相关信息,分别是同层下一个、前一个、第一个子节点、父节点

mode 表示轮廓寻找时候的拓扑结构返回 -RETR_EXTERNAL表示只返回最外层轮廓 -RETR_TREE表示返回轮廓树结构

  • CV_RETR_EXTERNAL:只检测外轮廓。忽略轮廓内部的洞

  • CV_RETR_LIST:检测所有轮廓,但不建立继承(包含)关系

  • CV_RETR_TREE:检测所有轮廓,并且建立所有的继承(包含)关系。也就是说用CV_RETR_EXTERNAL和CV_RETR_LIST方法的时候hierarchy这个变量是没用的,因为前者没有包含关系,找到的都是外轮廓,后者仅仅是找到所哟的轮廓但并不把包含关系区分。用TREE这种检测方法的时候我们的hierarchy这个参数才是有意义的

  • CV_RETR_CCOMP:检测所有轮廓,但是仅仅建立两层包含关系。外轮廓放到顶层,外轮廓包含的第一层内轮廓放到底层,如果内轮廓还包含轮廓,那就把这些内轮廓放到顶层去。

Method表示轮廓点集合取得是基于什么算法,常见的是基于CHaiN_APPROX_SIMPLE链式编码方法

注意,如果图像底色是白色,则检测最外层的轮廓为图像边框

2.绘制轮廓外接矩形

绘制外接矩形包括两种:

绘制最大外接矩形

(Rect cv::boundingRect( InputArray points ))

其中,输入参数points为一系列点的集合(findContours中contours中的一个元素),对轮廓来说就是该轮廓的点集 返回结果是一个矩形,x, y, w, h

绘制最小外接矩形

RotatedRect cv::minAreaRect( InputArray points )

其中,输入参数points为一系列点的集合(findContours中contours中的一个元素) ,对轮廓来说就是该轮廓的点集 返回结果是一个旋转矩形,包含下面的信息: - 矩形中心位置 - 矩形的宽高 - 旋转角度。

3.代码

EdgeDetection.h

#pragma once#include<opencv2/opencv.hpp>#include<iOStream>using namespace std;using namespace cv;class EdgeDetection{    cv::Mat m_img;    cv::Mat m_canny;public:    EdgeDetection(cv::Mat iamge);    bool cannyProcess(unsigned int downThreshold,unsigned int upThreshold);    bool getContours();    ~EdgeDetection();};

EdgeDetection.cpp

#include "EdgeDetection.h"EdgeDetection::EdgeDetection(cv::Mat image){    m_img = image;}bool EdgeDetection::cannyProcess(unsigned int downThreshold, unsigned int upThreshold){    bool ret=true;    if (m_img.empty())    {        ret = false;    }    cv::Canny(m_img, m_canny, downThreshold, upThreshold);    cv::imshow("Canny", m_canny);    return ret;}bool EdgeDetection::getContours(){    bool ret = true;    if (m_canny.empty())    {        ret = false;    }    cv::Mat k = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3), cv::Point(-1, -1));    cv::dilate(m_canny, m_canny, k);    imshow("dilate", m_canny);    // 轮廓发现与绘制    vector<vector<cv::Point> > contours;    vector<Vec4i> hierarchy;    findContours(m_canny, contours, cv::RETR_EXTERNAL, CHAIN_APPROX_SIMPLE, Point());    for (size_t i = 0; i < contours.size();++i)    {        // 最大外接轮廓        cv::Rect rect = cv::boundingRect(contours[i]);        cv::rectangle(m_img,rect,cv::Scalar(0,255,0),2,LINE_8);        // 最小外接轮廓        RotatedRect rrt = minAreaRect(contours[i]);        Point2f pts[4];        rrt.points(pts);        // 绘制旋转矩形与中心位置        for (int i = 0; i < 4; i++) {            line(m_img, pts[i % 4], pts[(i + 1) % 4], Scalar(0, 0, 255), 2, 8, 0);        }        Point2f cpt = rrt.center;        circle(m_img, cpt, 2, Scalar(255, 0, 0), 2, 8, 0);    }    imshow("contours", m_img);    return ret;}EdgeDetection::~EdgeDetection(){}

main.cpp

#include"EdgeDetection.h"using namespace std;using namespace cv;int main(int arGC, char* argv[]){    Mat src = imread("rect.jpg");    if (src.empty())    {        cout << "image is empty" << endl;        return -1;    }    imshow("input", src);    EdgeDetection ed(src);    ed.cannyProcess(80,160);    ed.getContours();    waiTKEy(0);    return 0;}

“OpenCV如何实现绘制轮廓外接矩形”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: OpenCV如何实现绘制轮廓外接矩形

本文链接: https://www.lsjlt.com/news/347690.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • OpenCV实现绘制轮廓外接矩形
    目录1.寻找轮廓2.绘制轮廓外接矩形3.代码1.寻找轮廓 api void cv::findContours( InputOutputArray image, OutputArray...
    99+
    2022-12-29
    OpenCV绘制轮廓外接矩形 OpenCV轮廓外接矩形 OpenCV外接矩形
  • OpenCV如何实现绘制轮廓外接矩形
    本篇内容介绍了“OpenCV如何实现绘制轮廓外接矩形”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.寻找轮廓apivoid cv...
    99+
    2023-07-04
  • OpenCV轮廓检测之boundingRect绘制矩形边框
    目录函数原型参数说明测试代码测试效果补充函数原型 cv::Rect boundingRect( InputArray array ); 参数说明 输入:InputArray类型的ar...
    99+
    2024-04-02
  • OpenCV实现轮廓外接多边形
    本文实例为大家分享了OpenCV实现轮廓外接多边形的具体代码,供大家参考,具体内容如下 取轮廓最大外接矩形 Rect boundingRect( InputArray array...
    99+
    2024-04-02
  • OpenCV轮廓周围绘制矩形框和圆形框的方法
    轮廓周围绘制介绍 没什么概念,就是给得出来的轮廓绘制周围图形,例如下图给左侧得出的轮廓去绘图得到右侧图像: 相关API 减少多边形轮廓点数:approxPolyDP 函数作用:基于...
    99+
    2024-04-02
  • OpenCV实现轮廓检测与绘制
    图像的轮廓不仅能够提供物体的边缘,而且还能提供物体边缘之间的层次关系以及拓扑关系。 带有结构关系的边缘检测,这种结构关系可以表明图像中连通域或者某些区域之间的关系。 图为一个具有4个...
    99+
    2024-04-02
  • OpenCV 轮廓周围绘制矩形框和圆形框的方法是什么
    OpenCV 轮廓周围绘制矩形框和圆形框的方法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。轮廓周围绘制介绍没什么概念,就是给得出来的轮廓绘制周...
    99+
    2023-06-29
  • opencv实现图形轮廓检测
    要想实现轮廓检测,首先我们需要对待检测的图像进行图像处理: 图像灰度化、高斯滤波、Canny 边缘检测、边缘检测放大处理、提取轮廓。 一、实现简单的全图型检测 即只要将drawCon...
    99+
    2024-04-02
  • opencv绘制矩形和圆的实现
    目录 绘制图形绘制矩形绘制圆 绘制图形 利用opencv提供的绘制图形api可以轻松在图像上绘制各种图形,比如直线,矩形,圆,椭圆等图形。 line(img,pt...
    99+
    2023-02-16
    opencv绘制矩形和圆 opencv绘制矩形 opencv绘制圆
  • OpenCV中如何基于Hu矩实现轮廓匹配
    这篇文章将为大家详细讲解有关OpenCV中如何基于Hu矩实现轮廓匹配,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、查找轮廓原图测试图vector<vector<Point>>f...
    99+
    2023-06-26
  • Python+OpenCV如何实现在图像上绘制矩形
    小编给大家分享一下Python+OpenCV如何实现在图像上绘制矩形,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!代码import copyimport cv2import numpy&nbs...
    99+
    2023-06-29
  • OpenCV-Python如何实现轮廓拟合
    这篇文章主要介绍OpenCV-Python如何实现轮廓拟合,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言什么是轮廓?轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同 的颜色或者灰度。轮廓在形状分析...
    99+
    2023-06-15
  • 使用c++实现OpenCV绘制旋转矩形图形
    目录功能函数测试代码测试效果  功能函数 // 绘制旋转矩形 void DrawRotatedRect(cv::Mat mask,const cv::RotatedRe...
    99+
    2024-04-02
  • Python+OpenCV实现在图像上绘制矩形
    话不多说,直接上代码 import copy import cv2 import numpy as np WIN_NAME = 'draw_rect' class Rec...
    99+
    2024-04-02
  • 使用c++实现OpenCV绘制圆端矩形
    功能函数 // 绘制圆端矩形(药丸状,pill) void DrawPill(cv::Mat mask, const cv::RotatedRect &rotatedre...
    99+
    2024-04-02
  • OpenCV实战之基于Hu矩实现轮廓匹配
    目录前言一、查找轮廓二、计算Hu矩三、显示效果四、源码总结前言 本文将使用OpenCV C++ 基于Hu矩进行轮廓匹配。 一、查找轮廓 原图 测试图 vector<vect...
    99+
    2024-04-02
  • OpenCV绘制圆角矩形的方法实例
    功能函数 // 绘制圆角矩形 void DrawRotatedRectChamfer(cv::Mat mask,const cv::RotatedRect rotatedrect...
    99+
    2024-04-02
  • C++ opencv如何实现几何图形绘制
    这篇“C++ opencv如何实现几何图形绘制”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++ op...
    99+
    2023-06-30
  • C++ opencv实现几何图形绘制
    目录1.矩形 rectangle()2. 圆 circle()3.椭圆 elliple()在学习过程中,我们可以在图像中绘制一些几何图形,比如矩形,椭圆,线段,填充多边形等,这些函数...
    99+
    2024-04-02
  • html5如何绘制矩形动画
    这篇文章给大家分享的是有关html5如何绘制矩形动画的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。   让我们来看一下Canvas内置的简单几何图形 &mdash; 矩...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作