如何在垫子中选择一些特定的列?
How to select some specific columns in a Mat?
本文关键字:选择 更新时间:2023-10-16
在Matlab
中,如果我想选择一个Mat
的某个指定的col,同时将它们复制到另一个Mat
,我写这样的代码:
mm = nn(:,[1 3]);
如何在OpenCV中做到这一点?
在一般情况下,没有OpenCV函数可以做到这一点。
如果所选列是连续的,则可以使用接受两个Range
的Mat
构造函数:
Mat mm = nn(Range::all(), Range(1, 4)).clone(); // range end is exclusive
mm
将包含nn
的第 1,2,3 列。
在一般情况下,应将每一列复制到正确的位置。实际上没有办法"同时">执行此操作,但是在函数之外selectColumns
您可以获得"同时">行为。
#include <opencv2opencv.hpp>
#include <algorithm>
using namespace std;
using namespace cv;
void selectColumns(const Mat& src, Mat& dst, const vector<int>& columns)
{
assert(!columns.empty());
// Be sure that the column indices are valid.
// They may not be sorted.
auto limits = minmax_element(columns.begin(), columns.end());
assert(*limits.first >= 0);
assert(*limits.second < src.cols);
int cols = int(columns.size());
dst.create(src.rows, cols, src.type());
for (int i = 0; i < cols; ++i) {
src.col(columns[i]).copyTo(dst.col(i));
}
}
int main()
{
Mat3f nn(3, 5);
randu(nn, Scalar(0), Scalar(255,255,255));
Mat mm;
selectColumns(nn, mm, { 0,2 });
return 0;
}
请记住,在 C++ 中,索引是从 0 开始的,而在 Matlab 中,索引是从 1 开始的。
相关文章:
- 如何使用默认参数等选择模板专业化
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 选择要调用的构造函数
- C++选择排序算法中的逻辑错误
- QTreeView幻灯片多选后无法使用单击选择
- 无法获取菜单选择以运行函数.C++
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 在C++中,如何通过几种类型从元组中选择多个元素
- 讨论 - 创建矩阵时的数组与向量的向量 - 什么是最实用的选择
- 对可变参数使用声明.如何选择正确的功能
- 选择选举获胜者的程序
- 如何选择在 csv 文件中输出的位置
- 根据用户回答声明"Players"。用户选择玩家数量。播放器是结构体
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 选择和修改嵌套向量中的条目的最佳实践
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 在运行时选择父类的实现
- 数数并选择 sqlite 中的前三名
- 列表视图更改选择颜色