opencv(c++)笔记1 (Mat 类创建)

ubuntu几种编译opencv方式
CMake与Make最简单直接的区别
图像数据类型
CV_[bit][U/S/F]C[channels]
bit:位数
U|S|F:无符号整形|有符号整形|float 浮点类型
C:图像通道数,1通道为灰度 2通道为RGB555和RGB565 3通道 彩色RGB 4通道:RGBA RGB加上alpha(透明度)

数据类型字节名称范围
8U8CV_8UC1/CV_8UC2/CV_8UC3/CV_8UC40-255
8S8CV_8SC1/CV_8SC2/CV_8UC3/CV_8SC4-128-127
16U16CV_16UC1/CV_16UC2/CV_16UC3/CV_16UC40-65535
16S16CV_16SC1/CV_16SC2/CV_16SC3/CV_16SC3-32768-32767
32U32CV_32UC1/CV_32UC2/CV_32UC3/CV_32UC40-( 2 32 2^{32} 232-1)
32S32CV_32SC1/CV_32SC2/CV_32SC3/CV_32SC4 2 − 16 2^{-16} 216-( 2 16 2^{16} 216-1)
32F32CV_32FC1/CV_32FC2/CV_32FC3/CV_32FC4 1.18 ∗ 1 0 − 308 − 3.40 ∗ 1 0 308 1.18*10^{-308}-3.40*10^{308} 1.18103083.4010308
64F32CV_64FC1/CV_64FC2/CV_64FC3/CV_64FC4 2.23 ∗ 1 0 − 308 − 1.79 ∗ 1 0 308 2.23*10^{-308}-1.79*10^{308} 2.23103081.7910308

1 Mat类
创建5种方法
(1)使用构造函数

	cv::Mat M1(3,3,CV_8UC4,cv::Scalar(0,1,0,255));
	std::cout << "M1" << std::endl<<M1<<std::endl;

输出

M=
[  0,   0,   0, 255,   0,   0,   0, 255,   0,   0,   0, 255;
   0,   0,   0, 255,   0,   0,   0, 255,   0,   0,   0, 255;
   0,   0,   0, 255,   0,   0,   0, 255,   0,   0,   0, 255]

(2) 通过数组初始化

int sz[2]={3,3};
int data[3][3]={1,2,3,4,5,6,7,8,9};
cv::Mat b(2,sz,CV_8UC4,data);
//通过数组转换时:一个数组元素对应一个像素的4个通道值,即将数组中的1转化为1,0,0,0,且不受图像类型影响,也就是说类型CV_8UC3时,1也对对应1,0,0,0,所以使用数组初始化请使用CV_**C4

输出

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

(3) 通过create函数

cv::Mat c;
c.create(4,4,CV_8UC(1));

输出

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

(4) 自定义Mat

cv::Mat d=(cv::Mat_<double>(3,3)<< 0,-1,0,-1,0,0,0,0,1);

输出

M=
[0, -1, 0;
 -1, 0, 0;
 0, 0, 1]

(5) 赋值

    cv::Mat e1=d.row(0).clone();//拷贝
    cv::Mat e2=cv::Mat::eye(3,3,CV_64F);//斜对角阵
    cv::Mat e3=cv::Mat::ones(3,3,CV_64F);//单位矩阵
    cv::Mat e4=cv::Mat::zeros(3,3,CV_64F);//零矩阵
    std::cout << "e1="<<std::endl<<e1<<std::endl;
    std::cout << "e2="<<std::endl<<e2<<std::endl;
    std::cout << "e3="<<std::endl<<e3<<std::endl;
    std::cout << "e4="<<std::endl<<e4<<std::endl;

输出

e1=
[0, -1, 0]
e2=
[1, 0, 0;
 0, 1, 0;
 0, 0, 1]
e3=
[1, 1, 1;
 1, 1, 1;
 1, 1, 1]
e4=
[0, 0, 0;
 0, 0, 0;
 0, 0, 0]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值