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()); }这段话什么意思
时间: 2024-04-05 12:35:57 浏览: 17
这段代码是将一个包含多个轮廓的向量进行转换,转换成一个二维的QVector,其中每个元素是一个由QPoint构成的QVector。具体来说,对于每个轮廓,它的所有点被转换成QPoint,然后这些QPoint被存储在一个QVector中,最终所有的QVector被存储在一个QVector中。在这个过程中,使用了QDebug来输出一些调试信息。
相关问题
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内容完全一致吗
不完全一致。在代码的开头,定义了一个空的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>。