opencv中Mat使用

Posted tiemaxiaosu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv中Mat使用相关的知识,希望对你有一定的参考价值。



转载:http://www.360doc.com/content/17/0115/21/39864082_622698495.shtml

(一)Mat矩阵中数据指针Mat.data是uchar类型指针,CV_8U系列可以通过计算指针位置快速地定位矩阵中的任意元素。

二维单通道元素可以用Mat::at(i, j)访问,i是行序号,j是列序号。

但对于多通道的非unsigned char类型矩阵来说,以上方法都不好(注:后来知道可以通过类型转换,用指针访问data数据,见后文)。可以用Mat::ptr()来获得指向某行元素的指针,在通过行数与通道数计算相应点的指针。

参照OpenCV的Mat::at()函数,写了一个访问二维Mat矩阵的两个简单的小函数,没有边界检查。

1 #include <opencv2/core/core.hpp>
2  
3 template<typename ItemType>
4 ItemType* getMatPointPtr(cv::Mat & src, int i , int j , int c = 0)
5
6     ItemType* curRow = src.ptr<ItemType>(i);
7     return curRow + j * src.channels() + c;
8
9 template<typename ItemType>
10 ItemType getMatPoint(cv::Mat & src, int i , int j , int c = 0)
11
12     ItemType* curRow = src.ptr<ItemType>(i);
13     return *(curRow + j * src.channels() + c);
14
  

OpenCV中的Mat::at()代码有严格的边界检测,Mat::ptr()也有边界检测,但代码中没有检测j是否越界。

以上为推荐使用的情况,下边的不推荐使用。

可以通过转换指针类型,访问非uchar类型的Mat元素。

例如图像是CV_64FC1格式,可以将Mat.data指针直接转换成double*类型:

OPENCV学习笔记1_Mat 创建

OpenCV Mat的总结

opencv中 Mat矩阵申明形式

OpenCV中Mat的属性

在 Visual Studio 中调整 mat openCV 的大小

OpenCV阶段总结扩充。

(c)2006-2024 SYSTEM All Rights Reserved IT常识