//显示结果 imshow("轮廓绘制结果", edge); vector<Point2f>point_0; vector<Point2f>point_1; vector<Point2f>point_2; vector<Point2f>point_3; vector<Point2f>point_4; vector<Point2f>point_5; vector<Point2f>point_6; vector<Point2f>point_7; vector<Point2f>point_8; vector<Point2f>point_9; vector<Point2f>point_10; vector<Point2f>point_11; vector<Point2f>point_12; vector<Point2f>point_13; vector<Point2f>point_14; vector<Point2f>point_15; vector<Point2f>point_16; vector<Point2f>point_17; vector<Point2f>point_18; vector<Point2f>point_19; int m, n; for (m = 0; m < contours.size(); m++) { for (n = 0; n < contours[m].size(); n++) { switch (m) { case 0: point_0.push_back(contours[m][n]); break; case 1: point_1.push_back(contours[m][n]); break; case 2: point_2.push_back(contours[m][n]); break; case 3: point_3.push_back(contours[m][n]); break; case 4: point_4.push_back(contours[m][n]); break; case 5: point_5.push_back(contours[m][n]); break; case 6: point_6.push_back(contours[m][n]); break; case 7: point_7.push_back(contours[m][n]); break; case 8: point_8.push_back(contours[m][n]); break; case 9: point_9.push_back(contours[m][n]); break; case 10: point_10.push_back(contours[m][n]); break; case 11: point_11.push_back(contours[m][n]); break; case 12: point_12.push_back(contours[m][n]); break; case 13: point_13.push_back(contours[m][n]); break; case 14: point_14.push_back(contours[m][n]); break; case 15: point_15.push_back(contours[m][n]); break; case 16: point_16.push_back(contours[m][n]); break; case 17: point_17.push_back(contours[m][n]); break; case 18: point_18.push_back(contours[m][n]); break; case 19: point_19.push_back(contours[m][n]); break; default: cout << "input error" << endl; } } } Mat img(321, 432, CV_8UC1, cv::Scalar(0));
时间: 2023-06-27 10:06:03 浏览: 167
这段代码的作用是将找到的轮廓分别存储到不同的 vector<Point2f> 中,并创建一个大小为321x432的空白图像。其中,vector<Point2f> 是一个存储二维点坐标的容器,contours[m][n] 表示第 m 个轮廓的第 n 个点的坐标。根据轮廓的数量,将每个轮廓中的点分别存储到对应的 vector<Point2f> 中。最后,创建一个大小为321x432的空白图像,类型为 CV_8UC1,即8位无符号单通道图像,像素值初始化为0。
相关问题
//显示结果 imshow("轮廓绘制结果", edge); vector<Point2f>point_0; vector<Point2f>point_1; vector<Point2f>point_2; vector<Point2f>point_3; vector<Point2f>point_4; vector<Point2f>point_5; vector<Point2f>point_6; vector<Point2f>point_7; vector<Point2f>point_8; vector<Point2f>point_9; vector<Point2f>point_10; vector<Point2f>point_11; vector<Point2f>point_12; vector<Point2f>point_13; vector<Point2f>point_14; vector<Point2f>point_15; vector<Point2f>point_16; vector<Point2f>point_17; vector<Point2f>point_18; vector<Point2f>point_19;
这段代码是在定义多个vector变量,每个vector变量都存储了图像中的某个轮廓的关键点坐标。这些变量的命名中包含了数字,可能是因为这些关键点所属的轮廓编号。在这段代码中,只是定义了这些vector变量,但是并没有进行赋值操作。同时,代码中还展示了一个名为"轮廓绘制结果"的窗口,将图像中的轮廓绘制出来并显示出来。
opencv 使用 vector<Point2f> 显示图片 c++实例
在OpenCV中,`vector<Point2f>`通常用于保存图像中的关键点或者兴趣区域的位置。如果你想用这样的向量显示一个图片,你需要做以下步骤:
首先,假设你已经加载了一个`cv::Mat`类型的图片,并且有一个`vector<Point2f>`叫做`keyPoints`,其中包含了关键点的位置。
```cpp
// 加载图片
cv::Mat image = cv::imread("image.jpg", cv::IMREAD_COLOR);
// 确保关键点数量与图片对应
if (keyPoints.size() == 0 || keyPoints.empty()) {
std::cout << "No key points found." << std::endl;
} else if (keyPoints.size() != image.rows) {
std::cout << "Number of keypoints does not match the image height." << std::endl;
}
// 如果一切正常,我们可以遍历关键点并绘制它们
cv::Mat output;
output.create(image.size(), CV_8UC3); // 创建一个新的灰度图作为输出
cv::circle(output, keyPoints[i], 5, cv::Scalar(0, 0, 255), -1); // 绘制一个蓝点
cv::imshow("Key Points on Image", output); // 显示带有关键点标记的图像
cv::waitKey(); // 等待用户按键
```
这里,我们创建了一个新的`cv::Mat`输出,然后对每一个关键点应用了`cv::circle`函数,用蓝色圆圈标记出来。最后使用`cv::imshow`展示结果。
阅读全文