opencv基础学习

固定向量模板类cv::Vec<>

固定向量别名命名规则:

cv::Vec{2,3,4,6}{b, s ,w , i, f, d}
{2,3,4,6}代表向量的长度。
{b, s ,w , i, f, d}表示向量内数据类型。
b:unsigned char ; s:short int
w:unsigned short; i:int
f:float; d:double

Mat矩阵(图像Mat)初始化

1.
Mat M( 2, 2, CV_8UC3, Scalar(0,255,0) );//行数;列数,数据类型以及通道数;初始化矩阵,

//用来表示颜色信息其实是2*6的矩阵,因为每个元素有3个通道。
Mat M1( 2, 2, CV_8UC1,Scalar(0) );//单通道
2.创建三维的0矩阵
int sz[3] = {2, 2, 2};
Mat L( 3, sz, CV_8UC(1), Scalar::all(0) );

3.构造一个3*3的矩阵,构造一个显式Mat类。

Mat t_x = ( Mat_<double> ( 3,3 ) <<
                0,                      -t.at<double> ( 2,0 ),     t.at<double> ( 1,0 ),
                t.at<double> ( 2,0 ),      0,                      -t.at<double> ( 0,0 ),
                -t.at<double> ( 1,0 ),     t.at<double> ( 0,0 ),      0 );
    cout<<"t^R="<<endl<<t_x*R<<endl;
    cout<<"t_x is"<<endl<<t_x<<endl ;

4.利用create函数

M.create( 4, 4, CV_8UC2);//CV_8UC2里面的2表示2通道
5.采用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);
6.Mat矩阵比较小时,学会直接赋值的方法,即用Mat_

Mat C =(Mat_<double>(3,3)<<0,-1,0,-1,5,-1,0,-1,0);//直接赋初始值的方法
 

CV_<bit_depth>(S|U|F)C<number_of_channels>

其中,

(1)bit_depth:图像深度(位数),代表8、16、32、64位

(2)S|U|F

S:signed int ,即有符号整型;

U:unsigned int,即无符号整型;

F:float ,单精度浮点型

(3)C<number_of_channels>:所存储的图片的通道数

       eg:1、GRAYIMG,灰度图像,单通道图像

              2、二值图像,2通道图像,用于图像压缩,傅里叶变化

              3、RGB,彩色图像,3通道图像

              4、带Alpha通道的RGB彩色图像,4通道图像

scalar()参数

(255,0,0) 蓝色

(0,255,0) 绿色

(0,0,255) 红色

(255,255,0)青色

(255,255,255) 白色

(0,255,255) 黄色

cv::cvtColor

cv::cvtColor是OpenCV库中的一个函数,主要用于图像颜色空间的转换。函数的全称为Color Conversion,即颜色转换。主要用于把图像从一个颜色空间转换到另一个颜色空间。例如,从BGR颜色空间(即蓝/绿/红,这是默认的颜色空间)转换到灰度图或者从BGR颜色空间转换到HSV颜色空间(Hue(色调), Saturation(饱和度), Value(明度))等。

函数原型如下

void cv::cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 )

参数说明:

src – 输入图像:8-bit 无符号、16-bit 无符号 ( CV_16UC... ) 或者单浮点数。

dst – 输出图像,大小,深度等参数会自动由src图像决定。

code – 颜色空间转换类型。

dstCn – 输出图像的通道数;如果参数为0,通道数会自动由src图像和code决定。
cvtColor(img,imgGray,cv::COLOR_BGR2GRAY);//源图像,目标图像,灰度


findChessboardCorners(image,patternSize,corners,flags = None)
此函数试图确定输入图片是否有棋盘图案,并定位棋盘板上的内角点。如果所有的角点被找到且以一定的顺序排列(一行接一行,从一行的左边到右边),该函数会返回一个非零值。另外,如果该函数没有找到所有的角点或者重新排列他们,则返回0。


findChessboardCorners(image,patternSize,corners,flags = None)
//参数
//image:输入原始的棋盘板图像。该图像必须是一张8位的灰度图或色彩图。

//patternSize:(w,h),棋盘上每一排和每一列的内角数。w=棋盘板一行上黑白块的数量-1,h=棋盘板一列上黑白块的数量-1,例如:10x6的棋盘板,则(w,h)=(9,5)

//corners:array,检测到的角点的输出数组。

//flags:int,不同的操作标记,能够为0或者下述值的组合:

//CALIB_CB_ADAPTIVE_THRESH 使用自适应阈值法把图像转换为黑白图,而不是使用一个固定的阈值。

//CALIB_CB_NORMALIZE_IMAGE 在利用固定阈值或自适应阈值法二值化图像之前,利用直方图均衡化图像。

//CALIB_CB_FILTER_QUADS 使用额外的标准(如轮廓面积,周长,正方形形状)来过滤掉在轮廓检索阶段提取的假四边形。

//CALIB_CB_FAST_CHECK 对图像运行一个快速检查机制以查找棋盘板的角点,如果没有找到角点则返回一个快捷提醒。当没有观察到棋盘时,可以极大地加快在退化条件下的调用。

cv::drawChessboardCorners()棋盘格角点的绘制

cv::drawChessboardCorners()的具体调用形式如下:


    void cv::drawChessboardCorners(
        cv::InputOutputArray image, // 棋盘格图像(8UC3)即是输入也是输出
        cv::Size patternSize, // 棋盘格内部角点的行、列数
        cv::InputArray corners, // findChessboardCorners()输出的角点
        bool patternWasFound // findChessboardCorners()的返回值
    );


第一个参数是棋盘格图像(8UC3)。

第二个参数是棋盘格内部角点的行、列,和cv::findChessboardCorners()指定的相同。

第三个参数是检测到的棋盘格角点。

第四个参数是cv::findChessboardCorners()的返回值。

eigen 与 opencv 矩阵的相互转换
需要包含以下头文件:

#include <Eigen/Dense>
#include <Eigen/Core>
// eigen 头文件必须放在 opencv 前面
#include <opencv2/opencv.hpp>
#include <opencv2/core/eigen.hpp>

然后使用 cv::cv2eigen 和 cv::eigen2cv 进行转换。

有一个cv::Vec2f类型的对象,并希望转换成Eigen::Vector2f类型用于向量运算

auto vec2ToEigen(cv::Vec2f vec) -> Eigen::Vector2f {
        return Eigen::Vector2f{vec[0],vec[1]};
    }

vec2ToEigen函数用于将一个cv::Vec2f类型的向量转换为Eigen::Vector2f类型。cv::Vec2f是OpenCV库的二维向量类型,Eigen::Vector2f是Eigen库的二维符点型向量。这个函数接收一个cv::Vec2f类型的变量vec作为参数,然后返回一个Eigen::Vector2f类型的对象。

转换过程:

用vec[0]和vec[1]得到cv::Vec2f向量的两个元素。

然后用这两个元素构造一个Eigen::Vector2f类型的对象并返回。

参考:https://blog.csdn.net/duiwangxiaomi/article/details/93075571
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值