vector point2f初始化
时间: 2023-11-06 12:07:56 浏览: 126
在C++中,可以使用以下方法来初始化vector point2f:
1. 直接初始化一个空的vector point2f:
vector<cv::Point2f> points;
2. 初始化一个带有初始值的vector point2f:
vector<cv::Point2f> points = {cv::Point2f(x1, y1), cv::Point2f(x2, y2), ...};
3. 使用push_back方法逐个添加元素到vector point2f:
vector<cv::Point2f> points;
points.push_back(cv::Point2f(x1, y1));
points.push_back(cv::Point2f(x2, y2));
...
4. 使用resize方法预先设置vector point2f的大小,并使用下标访问来赋值:
vector<cv::Point2f> points;
points.resize(num_points);
points = cv::Point2f(x1, y1);
points = cv::Point2f(x2, y2);
...
相关问题
CornerDetector(int n_rows = 8, int n_cols = 10, double detection_threshold = 40.0); ~CornerDetector() = default; void detect_features(const cv::Mat &image, std::vector<cv::Point2f> &features); void set_grid_position(const cv::Point2f &pos); void set_grid_size(int n_rows, int n_cols); int get_n_rows() const { return grid_n_rows_; } int get_n_cols() const { return grid_n_cols_; } float shiTomasiScore(const cv::Mat &img, int u, int v); int sub2ind(const cv::Point2f &sub);
这段代码定义了一个名为 `CornerDetector` 的类,该类具有以下成员函数:
- `CornerDetector(int n_rows = 8, int n_cols = 10, double detection_threshold = 40.0)`:类的构造函数,可以用来初始化占据网格的行数、列数和检测阈值。
- `~CornerDetector() = default`:类的析构函数。
- `void detect_features(const cv::Mat &image, std::vector<cv::Point2f> &features)`:检测输入图像中的角点,并将角点的坐标保存在 `features` 向量中。
- `void set_grid_position(const cv::Point2f &pos)`:设置占据网格的左上角位置。
- `void set_grid_size(int n_rows, int n_cols)`:设置占据网格的行数和列数。
- `int get_n_rows() const { return grid_n_rows_; }`:获取占据网格的行数。
- `int get_n_cols() const { return grid_n_cols_; }`:获取占据网格的列数。
- `float shiTomasiScore(const cv::Mat &img, int u, int v)`:计算图像中指定位置的 Shi-Tomasi 角点得分。
- `int sub2ind(const cv::Point2f &sub)`:将占据网格的行列坐标转换为索引。
Rect roi(1024, 400, 256, 130); # 感兴趣的框(x, y, w, h) Mat mask = Mat::zeros(src.size(), CV_8UC1);# // mask初始化全为0 mask(roi).setTo(255);# // 将非roi区域置为255 # 角点检测,参数:输入图像,角点最大数量,品质因子,距离 p0 = cv2.goodFeaturesToTrack(gray_one, mask=mask, maxCorners=100, qualityLevel=0.3, minDistance=7)
这是一段 C++ 代码,用于在图像中选取一个感兴趣的区域(ROI),然后将非 ROI 区域的像素值设置为 0,最后使用角点检测算法进行角点检测。
具体解释如下:
```c++
// 定义感兴趣的区域
Rect roi(1024, 400, 256, 130);
// 初始化一个与输入图像大小相同的掩膜,所有像素值初始为 0
Mat mask = Mat::zeros(src.size(), CV_8UC1);
// 将 ROI 区域的像素值设置为 255,即将 ROI 区域的掩膜设为 1
mask(roi).setTo(255);
// 进行角点检测,参数包括输入图像、最大角点数、品质因子和距离
vector<Point2f> corners;
goodFeaturesToTrack(gray_one, corners, 100, 0.3, 7, mask);
```
在这段代码中,我们首先定义了一个感兴趣的区域(ROI),然后初始化了一个与输入图像大小相同的掩膜,所有像素值初始为 0。接着,我们将 ROI 区域的像素值设置为 255,即将 ROI 区域的掩膜设为 1,这样在后续的角点检测中就只会在 ROI 区域内进行检测。最后,我们使用了 OpenCV 中的 goodFeaturesToTrack() 函数进行角点检测,得到的结果保存在 corners 变量中。其中,gray_one 是输入的灰度图像。