下面代码有错,请更改:// 计算三角化后的中心点 std::vector<cv::Point2f> centers; subdiv.getTriangleList(std::vector<cv::Vec6f>(), centers); // 更新特征点为三角化后的中心点 keypoints.clear(); for (const auto& center : centers) keypoints.push_back(cv::KeyPoint(center, 1.0f)); }
时间: 2024-01-24 11:17:07 浏览: 107
triangle-incenter:计算三角形的中心
下面是更改后的代码:
```
// 计算三角化后的中心点
std::vector<cv::Vec6f> triangleList;
subdiv.getTriangleList(triangleList);
std::vector<cv::Point2f> centers(triangleList.size());
for (size_t i = 0; i < triangleList.size(); i++)
{
cv::Vec6f t = triangleList[i];
cv::Point2f center = cv::Point2f((t[0] + t[2] + t[4]) / 3.0f, (t[1] + t[3] + t[5]) / 3.0f);
centers[i] = center;
}
// 更新特征点为三角化后的中心点
keypoints.clear();
for (const auto& center : centers)
keypoints.push_back(cv::KeyPoint(center, 1.0f));
```
更改原因:
1. `getTriangleList` 函数需传入 `std::vector<cv::Vec6f>` 类型的参数,以存储每个三角形的顶点坐标;
2. 需要遍历每个三角形,计算其重心坐标,存储在 `centers` 中;
3. 根据 `centers` 更新特征点 `keypoints`。
阅读全文