vector<float> 切片
时间: 2023-08-12 17:03:32 浏览: 134
在 C++ 中,可以使用 `std::vector` 的 `std::vector::begin()` 和 `std::vector::end()` 方法来获取迭代器,然后使用迭代器的 `std::next()` 方法进行切片操作。例如,要获取 `v` 向量中从第 3 个元素到第 5 个元素的切片,可以使用以下代码:
```
std::vector<float> v = {1.0, 2.0, 3.0, 4.0, 5.0};
auto first = std::next(v.begin(), 2); // 第3个元素的迭代器
auto last = std::next(v.begin(), 5); // 第6个元素的迭代器
std::vector<float> slice(first, last);
```
在上面的代码中,`std::next(v.begin(), 2)` 返回的是一个指向第 3 个元素的迭代器,因为 `v.begin()` 返回的是指向第 1 个元素的迭代器,所以需要使用 `std::next()` 方法移动两个位置。同理,`std::next(v.begin(), 5)` 返回的是指向第 6 个元素的迭代器,所以实际获取的是前 5 个元素的切片。最后,将切片赋值给一个新的 `std::vector` 对象即可。
相关问题
std::vector<float> temp; temp = temp[1:,] - temp[0:-1,]
这是一个语法错误,无法编译通过。C++中的vector没有类似于Python的切片操作。要计算temp中相邻元素的差值,可以使用for循环或者使用C++自带的算法函数std::adjacent_difference。例如:
```
std::vector<float> temp = {1.0, 2.0, 3.0, 4.0};
std::vector<float> diff(temp.size() - 1);
std::adjacent_difference(temp.begin(), temp.end(), diff.begin());
// 现在diff中存储的是temp中相邻元素之间的差值
```
c++ vector类型转换为Mat
在C++中,可以使用OpenCV库中的cv::Mat类来进行vector类型到Mat类型的转换。具体的转换方法取决于vector中元素的类型和Mat的通道数。
如果vector中的元素类型是uchar(即std::vector<uchar>),可以使用以下方法将其转换为单通道的Mat:
```cpp
cv::Mat vector2mat(std::vector<uchar> output, cv::Size2d size = { 512,512 }) {
cv::Mat out_result(size.height, size.width, CV_8UC1, cv::Scalar(0));
out_result.data = output.data();
return out_result;
}
```
如果vector中的元素类型是float(即std::vector<float>),可以使用以下方法将其转换为三通道的BGR格式的Mat:
```cpp
cv::Mat vector2mat(std::vector<float> output, cv::Size2d size = { 512,512 }) {
cv::Mat out_result;
int dis = size.height * size.width;
std::vector<float> r{ &output\[0\], &output\[0\] + dis };
std::vector<float> g{ &output\[0\] + dis, &output\[0\] + 2 * dis };
std::vector<float> b{ &output\[0\] + 2 * dis, &output\[0\] + 3 * dis };
std::vector<cv::Mat> mat_bgr;
mat_bgr.push_back(vector2mat(b, size));
mat_bgr.push_back(vector2mat(g, size));
mat_bgr.push_back(vector2mat(r, size));
cv::merge(mat_bgr, out_result);
return out_result;
}
```
另外,如果vector中的元素类型是float,还可以使用memcpy函数将其转换为单通道的Mat:
```cpp
cv::Mat vector2mat(std::vector<float> output, cv::Size2d size = { 512,512 }) {
cv::Mat out_result(size.height, size.width, CV_32FC1, cv::Scalar(0));
memcpy(out_result.data, output.data(), output.size() * sizeof(float));
return out_result;
}
```
以上是将vector类型转换为Mat类型的几种常见方法,具体使用哪种方法取决于你的需求和数据类型。
#### 引用[.reference_title]
- *1* *2* *3* [Opencv 基本操作四 指针数组、vector与Mat之间的相互转换 | Mat切片成Vector<mat>并还原](https://blog.csdn.net/a486259/article/details/126848868)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文