OpenCV使用经验摘录

1(20211111),如何确定未知矩阵A的数据类型

方法1:A.type() 返回值为int ,大小 与类型的对应关系为

      C1 C2 C3 C4
CV_8U    0 8 16 24
CV_8S    1 9 17 25
CV_16U  2 10 18 26
CV_16S  3 11 19 27
CV_32S  4 12 20 28
CV_32F  5 13 21 29
CV_64F  6 14 22 30

其中C1 C2 C3 C4表示通道数

方法2:

cout<<"Numpy风格:\n"<<format(A,Formatter::FMT_NUMPY)<<endl;

输出:

Numpy风格:
array([[1, 0],
[0, 1]], dtype='float16')

 

2,对cv::Mat的

使用Matlab形式的初始化方式

Mat E = Mat::eye(4, 4, CV_64F);
Mat O = Mat::ones(2, 3, CV_32F);
Mat Z = Mat::zeros(3, 3, CV_8UC1);

//////////////////////////////////////////

记录20211222

  1. srcImage.at<uchar>(x, y) //表示的是 x+1 行 y+1 列 的这个像素
     
  2.  
    srcImage.at<uchar>(Point(x, y)) //表示的是 坐标(x,y)的像素
 

/////////////////////////////////////////

记录2021228

所以某个相机的相机坐标系是仅由相机内参和图像坐标系的连个坐标轴决定了?。。。不能人为修改像极坐标系的xy轴的方向。。

而对于opencv来讲,图像坐标系的原点在左上角,对于matlab来讲,图像坐标系的原点在左下角;于是对于一样的相机内参,二者对应的外部的相机坐标系的两个坐标轴的方向(主要是y轴的方向)是不同的。。

 

20220914

openCV的mat的初始化

K = (Mat_<double>(3, 3) << 1.0, 0.0, 0.5,
             0, 1.0, 0.5,
             0, 0, 1);
和输出
    cout<<"camerat intrinsic: K"<<K<<endl;
都是列优先的,即初始化时,后面数字的排列方式是先排满一列再排第二列??。。。不对不对,非图像mat的初始化和输出还是按行来的。。



    
posted @ 2021-11-11 21:27  SunnyWarm  阅读(46)  评论(0)    收藏  举报