vector<Vec4i> hierarchy;
时间: 2024-06-02 14:04:05 浏览: 15
vector<Vec4i> hierarchy是一个存储了四个整数的向量容器,通常用于表示图像中的轮廓层级关系。在OpenCV中,轮廓是由一系列连续的点组成的闭合曲线,而轮廓层级关系则描述了轮廓之间的父子关系。
具体来说,vector<Vec4i> hierarchy的每个元素都是一个包含四个整数的向量,表示一个轮廓的层级关系。这四个整数分别表示轮廓的下一个轮廓、前一个轮廓、第一个子轮廓和父轮廓。如果某个轮廓没有下一个、前一个、子轮廓或父轮廓,则对应的整数值为-1。
通过使用hierarchy向量,我们可以遍历和操作图像中的轮廓,并根据层级关系进行相应的处理,例如找到所有的父轮廓、子轮廓或者根据层级关系进行轮廓的筛选等。
相关问题
vector<vector<Point>> contours; vector<Vec4i> hierarchy;定义不完整
这段代码定义了两个变量contours和hierarchy,它们的数据类型分别是vector<vector<Point>>和vector<Vec4i>。
vector<vector<Point>>是一个二维向量,其中每个元素是一个Point类型的向量。通常用来存储轮廓点的坐标信息。
vector<Vec4i>是一个一维向量,其中每个元素是一个四维整型向量。通常用来存储轮廓之间的关系,如轮廓的父子关系等。
但是,这段代码定义的时候缺少了变量名,所以代码是不完整的。正确的定义应该是类似于这样的:
```
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
```
其中,contours和hierarchy是变量名,可以根据实际需要自行命名。
#include <opencv2/opencv.hpp>#include <iostream>using namespace std;using namespace cv;int main(){ // 读取图像并进行预处理 Mat src = imread("test.jpg"); Mat gray, binary; cvtColor(src, gray, COLOR_BGR2GRAY); threshold(gray, binary, 0, 255, THRESH_BINARY | THRESH_OTSU); imshow("binary", binary); // 计算轮廓 vector<vector<Point> > contours; vector<Vec4i> hierarchy; findContours(binary, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point()); // 计算中心、质心、重心、外接圆圆心 Point2f center, centroid, gravity, minEnclosingCircleCenter; Moments mu = moments(contours[0], false); center = Point2f(mu.m10 / mu.m00, mu.m01 / mu.m00); minEnclosingCircle(contours[0], minEnclosingCircleCenter, radius); centroid = Point2f(mu.m10 / mu.m00, mu.m01 / mu.m00); gravity = Point2f(mu.m10 / mu.m00, mu.m01 / mu.m00 + 50); // 绘制结果 Mat drawing = Mat::zeros(binary.size(), CV_8UC3); circle(drawing, center, 5, Scalar(0, 0, 255), -1); circle(drawing, centroid, 5, Scalar(0, 255, 0), -1); circle(drawing, gravity, 5, Scalar(255, 0, 0), -1); circle(drawing, minEnclosingCircleCenter, 5, Scalar(0, 255, 255), -1); imshow("result", drawing); waitKey(0); return 0;}添加更详细的注释
好的,下面是更详细的注释:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
// 读取图像并进行预处理
Mat src = imread("test.jpg"); // 读取图像
Mat gray, binary; // 定义灰度图像和二值图像
cvtColor(src, gray, COLOR_BGR2GRAY); // 将图像转换为灰度图像
threshold(gray, binary, 0, 255, THRESH_BINARY | THRESH_OTSU); // 对灰度图像进行二值化
imshow("binary", binary); // 显示二值图像
// 计算轮廓
vector<vector<Point> > contours; // 定义轮廓
vector<Vec4i> hierarchy; // 定义轮廓的层次结构
findContours(binary, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point()); // 提取轮廓
// 计算中心、质心、重心、外接圆圆心
Point2f center, centroid, gravity, minEnclosingCircleCenter; // 定义中心、质心、重心、外接圆圆心
Moments mu = moments(contours[0], false); // 计算轮廓的矩
center = Point2f(mu.m10 / mu.m00, mu.m01 / mu.m00); // 计算中心
float radius;
minEnclosingCircle(contours[0], minEnclosingCircleCenter, radius); // 计算外接圆
centroid = Point2f(mu.m10 / mu.m00, mu.m01 / mu.m00); // 计算质心
gravity = Point2f(mu.m10 / mu.m00, mu.m01 / mu.m00 + 50); // 计算重心
// 绘制结果
Mat drawing = Mat::zeros(binary.size(), CV_8UC3); // 创建一个空的彩色图像
circle(drawing, center, 5, Scalar(0, 0, 255), -1); // 绘制中心
circle(drawing, centroid, 5, Scalar(0, 255, 0), -1); // 绘制质心
circle(drawing, gravity, 5, Scalar(255, 0, 0), -1); // 绘制重心
circle(drawing, minEnclosingCircleCenter, 5, Scalar(0, 255, 255), -1); // 绘制外接圆圆心
imshow("result", drawing); // 显示绘制结果
waitKey(0); // 等待按键
return 0;
}
```
注释中对代码的各个部分进行了说明,使得代码更容易理解。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)