基础数据类型

  • Point 坐标类
    Point有两种,2维Point和3维Point,Point可以转换为其他数据类型,比如vector或者matrix
    "opencv"
  • Scala
    Scalar继承于vector
    Scalar(b, g, r) :b->蓝色分量 g->绿色分量 r->红色分量
    Scalar(0, 0, 255) -> 红色像素点
    "opencv"
  • Size 大小类
    Size和Point类似,两者可以互相转换,不同之处在于Point的数据成员名为x和y,Size的数据成员名为width和height
    "opencv"
  • Rect 矩形类
    Rect成员包含Point类型的x,y和Size类型的width,height
    "opencv"
  • RotatedRect 旋转矩形类
    RotatedRect包含中心点(Point),大小(Size),旋转角度
    "opencv"
  • InputArray OutputArray
    InputArray和OutputArray区别在于 InputArray为只读,上述基础数据类型都可转换为 InputArray或OutputArray,以此保持函数的简洁性

    工具函数

    "opencv"
    "opencv"
  • cv::alignPtr() 指针对齐
    // Return aligned pointer of type T*
    template<T> T* cv::alignPtr( T* ptr, // pointer, unaligned
                                                   int n = sizeof(T)); // align to block size, a power of 2
    
  • cv::allocate() 分配具有T类型的对象数组(C风格)
    // Return pointer to allocated buffer
    template<T> T* cv::allocate( size_t sz); // buffer size, multiples of sizeof(T)
    
  • cv::fastAtan2() 计算向量方向 x(向量的x坐标) y(向量的y坐标)
    float cv::fastAtan2(float y, float x );
    
  • cvCeil() 返回不小于x的最小整数值
    int cvCeil(float x);
    
  • cvRound() 返回与x最接近的整数值
    int cvRound( double x );
    
  • cvFloor() 返回不大于x的最大整数值
    int cvFloor( float x};
    
  • cv::cubeRoot() 计算x的立方根
    float cv::cubeRoot( float x);
    
  • cv::format() 格式化输出
    string cv::format(const char* fmt, ... );
    

帮助类

  • TermCriteria 算法终止条件类
    TermCriteria( int type, int maxCount, double epsilon) 类型 迭代次数 超参数
  • Range 整数序列
    Range(0,4) —-> 0,1,2,3

Mat N维稠密矩阵

构造矩阵

Mat();
Mat(int rows, int cols, int type);
Mat(Size size, int type);
Mat(int rows, int cols, int type, const Scalar& s);
Mat(Size size, int type, const Scalar& s);
Mat(int ndims, const int* sizes, int type);
Mat(int ndims, const int* sizes, int type, const Scalar& s);
Mat(const Mat& m);
Mat(const Mat& m, const Rect& roi);
Mat(const Mat& m, const Range* ranges);

int rows, int cols:二维矩阵的行列数 ->图像分辨率
int type:存储元素的数据类型和通道数 CV_[位数][是否带符号][类型前缀]C[通道数]
const Scalar& s:矩阵每个元素以s向量(颜色)填充 向量维度由通道数决定

Mat matrix(2, 2, CV_8UC3, Scalar(0, 0, 255));
Mat matrix(2, 2, CV_8UC2, Scalar(1,2));

matrix = [ 0, 0, 255, 0, 0, 255 ; 0, 0, 255, 0, 0, 255]
matrix = [ 1, 2, 1, 2 ; 1, 2, 1, 2]

Mat m;
m.create(3,10,CV_32FC3)
m.setTo(Scalar(1.0f,1.0f,1.0f));//设置第一个通道的值
Mat matrix = Mat::eye(4, 4, CV_64F);
Mat matrix = Mat::ones(4, 4, CV_32F);
Mat matrix = Mat::zeros(3, 3, CV_8SC1);

[1, 0, 0, 0;
0, 1, 0, 0;
0, 0, 1, 0;
0, 0, 0, 1]
[1, 1, 1, 1;
1, 1, 1, 1;
1, 1, 1, 1;
1, 1, 1, 1]
[ 0, 0, 0;
0, 0, 0;
0, 0, 0]

Mat matrix = (Mat_<double>(3, 3) << 1, 2, 3, 4, 5, 6, 7, 8, 9);

[1, 2, 3;
4, 5, 6;
7, 8, 9]

利用clone() 或者 copyTo()

Mat RowClone = matrix.row(1).clone();
cout << "RowClone = " << endl << " " << RowClone << endl << endl;

获取矩阵元素


矩阵运算

矩阵操作


打印矩阵

Mat matrix(2,2, CV_8UC3, Scalar(0,0,255));

默认风格

std::cout << matrix << std::endl;

[ 0, 0, 255, 0, 0, 255;
0, 0, 255, 0, 0, 255]

Python风格

std::cout << format(matrix,Formatter::FMT_PYTHON) << std::endl;

[[[ 0, 0, 255],
[ 0, 0, 255]],
[[ 0, 0, 255],
[ 0, 0, 255]]]

Numpy风格

std::cout << format(matrix, Formatter::FMT_NUMPY) << std::endl;

array([[[ 0, 0, 255], [ 0, 0, 255], [ 0, 0, 255]],
[[ 0, 0, 255], [ 0, 0, 255], [ 0, 0, 255]],
[[ 0, 0, 255], [ 0, 0, 255], [ 0, 0, 255]]], dtype=’uint8’)

版权声明:原创,转载请注明来源,否则律师函警告



opencv3      opencv3

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!