定义二维数组vector<vector<Point> > contours;利用image.at<uchar>(contours[i][0])读取图像中的像素,如何将image.at<uchar>(contours[i][0])转换为image.ptr<uchar>()形式
时间: 2023-12-18 13:02:27 浏览: 34
可以使用以下代码将`image.at<uchar>(contours[i][0])`转换为`image.ptr<uchar>()`形式:
```
int row = contours[i][0].y; // 获取行数
int col = contours[i][0].x; // 获取列数
uchar pixel_value = image.ptr<uchar>(row)[col]; // 获取该像素的值
```
这里首先获取了轮廓中第一个点的行列数,然后使用`image.ptr<uchar>(row)`获取该行的指针,最后通过指针加上列数`col`获取该像素的值。
相关问题
vector<vector<cv::Point>>hull(contours0.size());
这行代码定义了一个名为"hull"的二维向量,其中包含了contours0向量的大小数量的元素。每个元素都是一个cv::Point类型的向量,表示的是对应轮廓的凸包点的坐标。
cv::Point是OpenCV库中用于表示二维点坐标的数据类型,该类型包含了两个成员变量x和y,分别表示点的横坐标和纵坐标。而contours0则是一个包含多个轮廓的向量,每个轮廓都是由一些点坐标组成的向量。因此,hull向量的大小就等于contours0向量的大小,每个元素都是一个cv::Point类型的向量,表示的是对应轮廓的凸包点的坐标。
vector<vector<Point>> contours;
`vector<vector<Point>> contours;`是一个C++中的定义,表示一个双重向量,其中每个元素都是一个由连续的Point点构成的点的集合的向量。这个双重向量被称为`contours`,它保存了多个轮廓,每个轮廓都是一个由连续的Point点构成的点的集合。
范例:
```cpp
#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
int main() {
std::vector<std::vector<cv::Point>> contours;
// 添加轮廓数据到contours中
// 输出轮廓数量
std::cout << "轮廓数量:" << contours.size() << std::endl;
return 0;
}
```