OpenCV(cv::Mat::colRange())



cv::Mat::colRange() 是 OpenCV 中的一个函数,用于在矩阵中选择指定的列范围。这对于图像或数据矩阵处理时需要选择特定列的情况非常有用。



1. 函数定义

colRange() 有两种使用方式:

cv::Mat Mat::colRange(int startcol, int endcol) const;
cv::Mat Mat::colRange(const Range &r) const;
  • int startcol:起始列的索引(包含)。
  • int endcol:结束列的索引(不包含)。
  • Range r:列范围,Range(startcol, endcol)

返回值:返回一个新的 cv::Mat,包含了源矩阵的指定列范围。



2. 功能

  • colRange() 不会复制数据,而是生成一个指向原始矩阵数据的子矩阵。这个操作是浅拷贝的,因此对子矩阵的修改会影响原始矩阵的数据。
  • 用于对矩阵的特定列范围进行处理,而无需创建新的数据拷贝,能节省内存和计算时间。


3. 代码示例

假设有一个图像或矩阵 mat

cv::Mat mat = (cv::Mat_<int>(3, 5) << 1, 2, 3, 4, 5,
                                       6, 7, 8, 9, 10,
                                       11, 12, 13, 14, 15);

3.1 选择第1列到第3列(列索引从0开始)

cv::Mat submat = mat.colRange(1, 4);

这将会创建一个新的矩阵 submat,包含 mat 的第1列到第3列的数据:

[ 2, 3, 4;
  7, 8, 9;
 12,13,14 ]

3.2 使用 Range 参数

同样的操作也可以使用 Range 参数来完成:

cv::Mat submat = mat.colRange(cv::Range(1, 4));


4. 注意事项

  1. 索引范围:起始列包含在内,但结束列不包含在内。
  2. 浅拷贝:生成的子矩阵与原矩阵共享数据,因此对子矩阵的更改会反映在原矩阵上。
  3. 范围限制:索引必须在矩阵的列范围内,否则会导致错误。


5. 常见用途

  • 在图像处理中提取图像的某些列以进行局部分析。
  • 数据矩阵中按列选择子集以进行特定运算。


posted @   做梦当财神  阅读(91)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示