opencv 如何给vector容器赋值
时间: 2023-10-18 12:15:06 浏览: 92
可以使用vector的assign()函数来给容器赋值,示例代码如下:
```c++
#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
// 定义一个vector容器
vector<int> myvector;
// 给vector容器赋值
myvector.assign(5, 10);
// 打印vector容器中的值
for (int i = 0; i < myvector.size(); i++)
{
cout << myvector[i] << " ";
}
return 0;
}
```
输出结果为:
```c++
10 10 10 10 10
```
其中,assign()函数的第一个参数表示要赋值的元素数量,第二个参数表示要赋的值。
相关问题
std::vector<std::string> 变成std::vector<cv::String, std::allocatorcv::String>”
`std::vector<std::string>` 是 C++ 标准库中的动态数组容器,它用于存储 `std::string` 类型的对象。而 `cv::String` 是 OpenCV 库中的字符串类型,如果需要将 `std::vector<std::string>` 转换成 `std::vector<cv::String>`,你需要明确地指定容器内的元素类型从 `std::string` 改变为 `cv::String`。
转换的过程通常不是直接的赋值或类型转换,因为这两种操作可能会导致数据丢失。实际操作中,你可能需要遍历原始的 `std::vector<std::string>`,并创建新的 `cv::String` 对象,然后把这些对象添加到新的 `std::vector<cv::String>` 中。这里是一个简单的示例:
```cpp
std::vector<std::string> oldVec = ...; // 原始的 vector
std::vector<cv::String> newVec(oldVec.size()); // 新的 vector,大小与旧的相同
for (const auto& str : oldVec) {
newVec.push_back(cv::String(str)); // 将 std::string 转换成 cv::String 并添加到新 vector
}
```
注意,如果你的 `oldVec` 是在 OpenCV 程序上下文中使用的,并且你知道所有的元素已经是 `cv::String` 或者可以直接转换,那么你可以考虑直接传递给 `newVec`,而不是逐个转换。
vector<Point2f> 转cv::mat
`vector<Point2f>` 是 OpenCV 中的一个向量容器,它存储的是 `Point2f` 类型的对象,每个元素代表二维平面上的一个点。而 `cv::Mat` 是 OpenCV 中的一种矩阵数据结构,可以用于表示图像、数组等。
如果你有一个 `vector<Point2f>` 并想将其转换成 `cv::Mat`,通常是为了方便处理或者与 OpenCV 的其他函数兼容,你可以这样做:
```cpp
#include <opencv2/core.hpp>
// 假设你已经有一个 vector<Point2f> 叫做 points
cv::Mat mat;
if (!points.empty()) {
// 矩阵的行数等于点的数量,列数设置为2(对应x和y坐标)
int rows = points.size();
int cols = 2;
mat.create(rows, cols, CV_32FC1); // 使用单精度浮点类型
for (size_t i = 0; i < rows; ++i) {
cv::Point2f point = points[i];
mat.at<cv::Vec2f>(i) = cv::Vec2f(point.x, point.y);
}
}
```
这里我们创建了一个 `cv::Mat`,并把 `vector<Point2f>` 中的点一一赋值到矩阵中。注意 `.at()` 方法用于访问或修改指定索引处的元素。
阅读全文