服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - OpenCV轮廓检测之boundingRect绘制矩形边框

OpenCV轮廓检测之boundingRect绘制矩形边框

2022-07-13 09:44翟天保Steven C/C++

在进行文本检测时,我们常常会用矩形边框将检测到的内容框除。这篇文章主要为大家介绍的是OpenCV中能实现这一效果的函数:boundingRect,感兴趣的同学可以学习一下

函数原型

cv::Rect boundingRect( InputArray array );

 

参数说明

输入:InputArray类型的array,输入灰度图像或二维点集。

输出:Rect类型的矩形信息,包括矩形尺寸和位置。

 

测试代码

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

using namespace std;
using namespace cv;

int main()
{
	cv::Mat src = imread("test.png",0);
	cv::Mat result = src.clone();
	cv::Mat th1;
	// 最大类间差法,也称大津算法
	threshold(result, th1, 0, 255, THRESH_OTSU);
	// 反相
	th1 = 255 - th1;
	// 确定连通区轮廓
	std::vector<std::vector<cv::Point> > contours;  // 创建轮廓容器
	std::vector<cv::Vec4i> 	hierarchy;
	cv::findContours(th1, contours, hierarchy, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE, cv::Point());
	// 遍历轮廓显示矩形框
	for (int i = 0; i < contours.size(); ++i)
	{
		cv::Rect rect = cv::boundingRect(cv::Mat(contours[i]));
		cv::rectangle(result, rect, Scalar(255), 1);
	}

	imshow("original", src);
	imshow("thresh", th1);
	imshow("result", result);
	waitKey(0);

	return 0;
}

 

测试效果

OpenCV轮廓检测之boundingRect绘制矩形边框

OpenCV轮廓检测之boundingRect绘制矩形边框

OpenCV轮廓检测之boundingRect绘制矩形边框

 

补充

这个函数得到的矩形框都是方正的,还有一个函数minAreaRect也可以得到最小包围矩形框,那个是带倾斜角度的。

函数原型

cv::RotatedRect minAreaRect( InputArray points );

参数说明

输入:InputArray类型的points,输入灰度图像或二维点集。

输出:RotatedRect类型的旋转矩形信息,即矩形四角点位置。

测试代码

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

using namespace std;
using namespace cv;

int main()
{
	cv::Mat src = imread("test.png",0);
	cv::Mat result = src.clone();
	cv::Mat th1;
	// 最大类间差法,也称大津算法
	threshold(result, th1, 0, 255, THRESH_OTSU);
	// 反相
	th1 = 255 - th1;
	// 确定连通区轮廓
	std::vector<std::vector<cv::Point> > contours;  // 创建轮廓容器
	std::vector<cv::Vec4i> 	hierarchy;
	cv::findContours(th1, contours, hierarchy, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE, cv::Point());
	// 遍历轮廓显示矩形框
	for (int i = 0; i < contours.size(); ++i)
	{
		cv::RotatedRect rotatedrect = cv::minAreaRect(cv::Mat(contours[i]));
		// 存储旋转矩形的四个点
		cv::Point2f ps[4];
		rotatedrect.points(ps);
		std::vector<std::vector<cv::Point>> tmpContours;    // 创建一个InputArrayOfArrays 类型的点集
		std::vector<cv::Point> contour;
		for (int i = 0; i != 4; ++i) {
			contour.emplace_back(cv::Point2i(ps[i]));
		}
		// 插入到轮廓容器中
		tmpContours.insert(tmpContours.end(), contour);
		// 绘制轮廓,也就是绘制旋转矩形
		drawContours(result, tmpContours, -1, Scalar(0), 1, 16);  // 填充mask
	}

	imshow("original", src);
	imshow("thresh", th1);
	imshow("result", result);
	waitKey(0);

	return 0;
}

测试效果:

OpenCV轮廓检测之boundingRect绘制矩形边框

OpenCV轮廓检测之boundingRect绘制矩形边框

OpenCV轮廓检测之boundingRect绘制矩形边框

到此这篇关于OpenCV轮廓检测之boundingRect绘制矩形边框的文章就介绍到这了,更多相关OpenCV boundingRect绘制矩形边框内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/zhaitianbao/article/details/121945554

延伸 · 阅读

精彩推荐
  • C/C++C语言的getc()函数和gets()函数的使用对比

    C语言的getc()函数和gets()函数的使用对比

    这篇文章主要介绍了C语言的getc()函数和gets()函数的使用对比,从数据流中一个是读取字符一个是读取字符串,需要的朋友可以参考下...

    C语言教程网8552021-03-09
  • C/C++C语言结构体的具体使用方法

    C语言结构体的具体使用方法

    这篇文章主要介绍了C语言结构体的相关资料,需要的朋友可以参考下...

    yycure7502021-12-23
  • C/C++C语言实现单词助手功能

    C语言实现单词助手功能

    这篇文章主要为大家详细介绍了C语言实现单词小助手,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    ぃAnn11092021-08-04
  • C/C++C语言判断字符串是否以str2开头代码

    C语言判断字符串是否以str2开头代码

    这里给大家分享的是一个使用C语言实现的判断字符串中是否以某字符开头或者结尾的代码,非常的简单实用,希望大家能够喜欢...

    青儿哥哥6962021-05-11
  • C/C++手把手带你搞懂C语言指针

    手把手带你搞懂C语言指针

    这篇文章主要介绍了C语言的指针,本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下,希望能给你带来帮助...

    宝全哥哥10592021-12-23
  • C/C++C语言 数据结构双向链表简单实例

    C语言 数据结构双向链表简单实例

    这篇文章主要介绍了C语言 数据结构双向链表简单实例的相关资料,需要的朋友可以参考下...

    C语言中文网7282021-05-04
  • C/C++win10+VS2017+Cuda10.0环境配置详解

    win10+VS2017+Cuda10.0环境配置详解

    这篇文章主要介绍了win10+VS2017+Cuda10.0环境配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    HallieDong9732021-09-18
  • C/C++通过编写一个简单的游戏学习 C 语言

    通过编写一个简单的游戏学习 C 语言

    当你学习一门新的编程语言时,这个“猜数字”游戏是一个很好的入门程序。下面是如何用 C 语言来编写它。 ...

    Linux中国7852021-01-14