core初探

本文深入探讨了Mat对象的初始化、赋值及颜色空间转换的概念,并展示了如何在OpenCV中创建、操作和理解Mat类对象与不同颜色空间之间的关系。通过实例演示,帮助读者掌握Mat类的基础知识及其在图像处理任务中的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mat 对象初试化

Mat A,C; // 创建信息头部分

A= imread(“1.jpg”,CV_LOAD_IMAGE_COLOR);

Mat B(A);//使用拷贝函数,拷贝A的信息头部分到B信息头部分

C=A;//将A的信息头部分赋值给C的信息头

           //以上创建的信息头都指向同一个矩阵。

创建ROI

Mat D (A, Rect(10,10,100,100));   //使用矩阵定界ROI

Mat E =A(Rang:all(),Range(1,3));  //使用行和列定界ROI

总结:Mat类对象包括两个部分1、描述矩阵的信息头部分  2、指向矩阵的指针

赋值矩阵

Mat F=A.clone();  //将A的信息头部分和所指向的矩阵拷贝给F

Mat G;

A.copyTo(G);        //将A的信息头部分和所指向的矩阵拷贝给G


颜色空间

最简单的颜色空间是灰度级空间,每种颜色空间都有一种及以上的基本元素。

常见的颜色空间:RGB 

HSV 色调 饱和度 亮度。 HLS 色调 饱和度 明度。可以抛去最后一个元素,使算法对输入图像的光照条件不明感

CIE L*a*b 适合用来度量两个颜色之间的距离


创建Mat类对象

1、   //创建2*2矩阵,CV_8UC3表示深度8bit,无符号char型,3通道,初值0,0,225

Mat M(2,2, CV_8UC3,Scalar(0,0,225));

2、//创建3维矩阵,数组表示每个维度的尺寸

int sz[3] ={2,2,2};

Mat L(3,sz, CV_8UC,Scalar:: all(0));

3、//使用Creat函数创建4*4阶函数CV_8UC(2)表示2通道

Mat A;

A.create(4,4,CV_8UC(2));

Mat dstImage;

dstImage.create(A.rows,A.cols,A.type()); //创建和A相同的行列和类型的矩阵

//此创建方法不嫩为矩阵设初值,只能在该百年尺寸时重新为矩阵数据开辟内存

4、//使用MATLAB的方式

//单位矩阵,4*4阶,1通道

Mat E= Mat :: eye(4,4,CV_64F);

//全1矩阵,2*2阶,1通道

Mat O=Mat::ones(2,2,CV_32F);

//零矩阵,3*3阶,1通道

Mat F=Mat::zeros(3,3,CV_8UC1);

5、对小矩阵使用都好分隔式初始化

//3*3阶,double深度,1通道

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

6、//使用clone() 函数,

//克隆Mat C的第一行

Mat RowClone = C.row(1).clone();

7、//使用成员函数定义10*3阶矩阵

Mat r=Mat(10,3,CV_8UC3);

randu(r,Scalar::all(0),Scallar::all(255));

矩阵输出格式Python style

cout<<"r(Python style)="<<format(r,"Python")<<";"<<endl<<endl;




输出其他常用的数据结构

使用运算符"<<"打印常用的数据结构

1、//输出2维点

Point2f p(6,2); //定义一个二维点并初始化

cout<<p<<";\n"<<endl;

2、//定义输出3维点

Pont3f p(8,2,0);

cout<<p<<";\n"<<endl;





 常用数据结构

Point类

Point p;

p.x=10;

p.y=8;

或者

Point p =Pont(1,8);



 颜色表示类:Scalar类

Scalar();表示具有4个元素的数组,如果用不着第4个元素,可以不用写出,默认三个元素

Scalar(a,b,c); 

尺寸表示: Size类

成员变量width,height

Size(5,5);//给成员变量赋值

Rect类

http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html#Rect_

 //颜色空间转换

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

http://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html?highlight=cvtcolor#cv2.cvtColor

P4=0表示目标图像取源图像的通道数


基本图形的绘制

直线:line

椭圆:ellipse

矩形:rectangle

圆:circle

绘制填充的多边形:fillpoly


定义ROI

Mat imageROI;

imageROI=imae(Rect(400,400,logo.cols,logo.rows));

//imageROI=image(Range(200,200+logoImae.rows),Range(200,200+logoImage.cols));

Mat srcImage=imread("data.jpg");

if(!srcImage.data)

{

printf("读取失败"); 

return false;

}

//判断图像读入是否成功





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值