vector<vector<Point>>每行依次添加值
时间: 2023-08-13 10:08:42 浏览: 93
要向 `vector<vector<Point>>` 中的每一行依次添加值,可以使用以下代码:
```cpp
// 创建一个空的 vector<vector<Point>>
vector<vector<Point>> pointsVector;
// 添加值到每一行
for (int i = 0; i < numRows; i++) {
vector<Point> row;
// 向当前行添加值
row.push_back(Point(x1, y1));
row.push_back(Point(x2, y2));
// ...
// 将当前行添加到主 vector 中
pointsVector.push_back(row);
}
```
在这个示例中,我们假设你已经有了要添加的值 x1、y1、x2、y2 等等。你需要使用 `push_back()` 函数将每个值添加到每一行的末尾。然后,使用 `push_back()` 将每一行添加到主 vector 中。
请根据你的具体需求修改代码中的变量和值。
相关问题
vector<Point<T> *> vertices;里面是顶点的数据,求三角形面积
假设vertices中存储的三个点依次为A、B、C,则可以使用向量叉积的方法求得三角形面积。
设向量AB和向量AC分别为v1和v2,则三角形ABC的面积为:
```math
S = 0.5 * |v1 × v2|
```
其中 |v1 × v2| 表示向量叉积的模长。
具体的代码实现如下:
```cpp
template <typename T>
double triangleArea(const Point<T>& A, const Point<T>& B, const Point<T>& C) {
Vector<T> v1 = B - A;
Vector<T> v2 = C - A;
double area = v1.cross(v2) / 2.0;
return fabs(area); // 取绝对值,确保面积为正
}
```
注意,这里我们假设向量叉积的结果可能为负值,所以在计算完面积后取了绝对值。
bool Get_Character_ROI(License& License_ROI, vector<License>& Character_ROI) { Mat gray; cvtColor(License_ROI.mat, gray, COLOR_BGR2GRAY); Mat thresh; threshold(gray, thresh, 0, 255, THRESH_BINARY | THRESH_OTSU); Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3)); Mat close; morphologyEx(thresh, close, MORPH_CLOSE, kernel); vector<vector<Point>>contours; findContours(close, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE); for (int i = 0; i < contours.size(); i++) { double area = contourArea(contours[i]); //由于我们筛选出来的轮廓是无序的,故后续我们需要将字符重新排序 if (area > 200) { Rect rect = boundingRect(contours[i]); //计算外接矩形宽高比 double ratio = double(rect.height) / double(rect.width); if (ratio > 1) { Mat roi = License_ROI.mat(rect); resize(roi, roi, Size(50, 100), 1, 1, INTER_LINEAR); Character_ROI.push_back({ roi ,rect }); } } } //将筛选出来的字符轮廓 按照其左上角点坐标从左到右依次顺序排列 //冒泡排序 for (int i = 0; i < Character_ROI.size() - 1; i++) { for (int j = 0; j < Character_ROI.size() - 1 - i; j++) { if (Character_ROI[j].rect.x > Character_ROI[j + 1].rect.x) { License temp = Character_ROI[j]; Character_ROI[j] = Character_ROI[j + 1]; Character_ROI[j + 1] = temp; } } } if (Character_ROI.size() != 7) { return false; } return true; }
这段代码用于从车牌的ROI区域中分割出每个字符的ROI区域,并按照从左到右的顺序排列。具体流程如下:
1. 将车牌的ROI区域转换为灰度图像。
2. 对灰度图像进行二值化处理并进行闭运算,以便于分割字符。
3. 使用findContours()函数查找图像中的轮廓。
4. 对于每个轮廓,计算其面积和外接矩形宽高比。
5. 如果面积和宽高比符合要求,则将其截取出来作为字符的ROI区域。
6. 将所有的字符ROI区域按照从左到右的顺序进行排序,方便后续的识别处理。
7. 如果分割出的字符ROI区域不足7个,则返回false表示分割失败;否则返回true表示分割成功。
在上述流程中,使用了OpenCV中的函数cvtColor()、threshold()、getStructuringElement()、morphologyEx()、findContours()、boundingRect()、resize()等函数来进行图像转换、二值化、闭运算、轮廓查找、矩形区域计算、图像缩放等操作。通过这些操作,可以将车牌的字符分割出来,并按照从左到右的顺序进行排列,方便后续的字符识别处理。
阅读全文