OpenCV 常用操作 | C & C++
本文列举了一些 OpenCV 中常用的函数。
遍历像素点
1 | for (int i = 0; i < mat.rows; ++i) { |
1 | unsigned char *data = mat.ptr<unsigned char>(); |
BGR -> YUV
1 | void YUVI420ToNV12(unsigned char* i420bytes, unsigned char* nv12bytes, int width, int height) { |
HWC -> CHW
1 | void HWCToCHW(const cv::Mat& src, float *dst) { |
初始化
无数据拷贝的 cv::Mat 的定义和初始化
- 默认形式
1 | cv::Mat m; |
- 指定类型和大小(行列)的二维数组
1 | cv::Mat m(int rows, int cols, int type); |
关于 type:
基本类型 | C1(或留空) | C2 | C3 | 备注 |
---|---|---|---|---|
CV_8U | 0 | 8 | 16 | unsigned int |
CV_8S | 1 | 9 | 17 | signed int |
CV_16U | 2 | 10 | 18 | unsigned int |
CV_16S | 3 | 11 | 19 | signed int |
CV_32S | 4 | 12 | 20 | signed int |
CV_32F | 5 | 13 | 21 | float |
CV_64F | 6 | 14 | 22 | float |
- 有初始化值的指定类型和大小(行列)的二维数组
1 | cv::Mat m(int rows, int cols, int type, const Scalar& value); |
- 指定大小(size)和类型的二维数组
1 | cv::Mat m(int rows, int cols, int type, void* data, size_t step = AUTO_STEP); |
其中 step 参数表示两个相邻行同列数据之间的距离,设为 AUTO_STEP 时两个相邻行在内存中是连续的,所以 step 为 width
- 使用预先存在的数据定义的指定大小(size)和类型的二维数组
1 | cv::Mat m(cv::Size sz, int type, void* data, size_t step = AUTO_STEP); |
- 指定类型的多维数组
1 | cv::Mat m(int ndims, const int* sizes, int type); |
- 有初始化值的指定类型多维数组
1 | cv::Mat m(int ndims, const int* sizes, int type, const Scalar& value); |
- 使用预先存在的数据定义的指定类型的多维数组
1 | cv::Mat m(int ndims, const int* sizes, int type, void* data, size_t step = AUTO_STEP); |
从其他 cv::Mat 进行数据拷贝的定义和初始化
- 拷贝构造形式
1 | cv::Mat m(const cv::Mat& mat); |
- 指定行列范围的拷贝构造
1 | cv::Mat m(const cv::Mat& mat, const cv::Range& rows, const cv::Range& cols); |
- 指定 ROI 的拷贝构造
1 | cv::Mat m(const cv::Mat& mat, const cv::Rect& roi); |
- 使用多维数组中指定范围内的数据的拷贝构造
1 | cv::Mat(const cv::Mat& mat, const cv::Range* ranges); |
使用 OpenCV 中的模板进行定义和初始化
- 相同类型、大小为 n 的一维数组
1 | cv::Mat m(const cv::Vec<T, n>& vec, bool = copyData = true); |
- 使用cv::Matx定义相同类型、大小为mxn的二维数组
1 | cv::Mat(const cv::Matx<T, m, n>& vec, bool copyData = true); |
- 使用 std::vector 定义相同类型的一维数组
1 | cv::Mat(const std::vector<T>& vec, bool copyData = true); |
直接使用静态函数创建 cv::Mat
- 值全为 0
1 | cv::Mat m = cv::Mat::zeros(int rows, int cols, int type); |
- 值全为 1
1 | cv::Mat m = cv::Mat::ones(int rows, int cols, int type); |
- 单位矩阵
1 | cv::Mat m = cv::Mat::eye(int rows, int cols, int type); |
OpenCV 常用操作 | C & C++