QVector<QVector<QPoint>> qContours(contours.size()); for (size_t i = 0; i < contours.size(); i++) { qDebug() << QStringLiteral("你好%1").arg(contours.size()); QVector<QPoint> qPoints(contours[i].size()); for (size_t j = 0; j < contours[i].size(); j++) { QPoint point(contours[i][j].x, contours[i][j].y); qPoints[j] = point; qDebug() << QStringLiteral("你好%1,%2").arg(contours[i][j].x).arg(contours[i][j].y); } qContours[i] = qPoints; qDebug() << QStringLiteral("wo%1").arg(qContours.size()); }中qContours和contours内容完全一致吗
时间: 2024-04-05 07:35:52 浏览: 9
不完全一致。在代码的开头,定义了一个空的QVector<QVector<QPoint>>类型的变量qContours,它的大小等于contours的大小,即包含了所有的轮廓。在代码的执行过程中,对于每个轮廓,它的所有点被转换成QPoint类型,并存储在一个QVector<QPoint>中,然后这个QVector<QPoint>被存储在qContours的相应位置。因此,qContours中的元素是由QPoint构成的QVector,而contours中的元素是由cv::Point构成的std::vector。两者的数据类型不同,但它们的内容是相同的。
相关问题
可以转为qvector<qvector<qpoint>>吗
可以的。将每个Point类型的向量转换为QVector<QVector<QPoint>>类型的向量,可以使用以下代码:
```cpp
vector<vector<Point>> contours;
// 调用 findContours 函数得到 contours
QVector<QVector<QPoint>> qContours(contours.size());
for (size_t i = 0; i < contours.size(); i++) {
QVector<QPoint> qPoints(contours[i].size());
for (size_t j = 0; j < contours[i].size(); j++) {
QPoint point(contours[i][j].x, contours[i][j].y);
qPoints[j] = point;
}
qContours[i] = qPoints;
}
```
这里使用了QVector和QPoint类,需要包含头文件<QVector>和<QPoint>。
std::vectorcv::Point转换为QVector<QVector<QPoint>>
将`std::vector<cv::Point>`转换为`QVector<QVector<QPoint>>`的方法如下:
```c++
#include <QVector>
#include <QPoint>
#include <vector>
#include <opencv2/core/core.hpp>
QVector<QVector<QPoint>> vectorCvPointToQVectorQPoint(const std::vector<cv::Point>& points) {
QVector<QVector<QPoint>> qVectors;
QVector<QPoint> qPoints;
for (const cv::Point& point : points) {
qPoints.append(QPoint(point.x, point.y));
}
qVectors.append(qPoints);
return qVectors;
}
```
您可以通过调用 `vectorCvPointToQVectorQPoint` 函数并传入 `std::vector<cv::Point>` 类型的数据来获得`QVector<QVector<QPoint>>`类型的数据。函数将每个`cv::Point`转换为`QPoint`并将其添加到`QVector<QPoint>`中,然后将每个`QVector<QPoint>`添加到`QVector<QVector<QPoint>>`中。