跟我一起学opencv 第三课之图像在opencv中的表示-Mat对象
1.下面第一章图是一位美女图像,和其他数据一样图像在计算机中也是以二进制存储,下面第二张图


2.在摄像头眼里一幅图像就是一个矩阵或者说是二维数组,数组元素是像素值

3.opencv中以Mat对象表示图像的数据结构
-------lpllmage是从2001年opencv发布之后就一直存在,是c语言表示的数据结构,需要开发者自己分配和管理内存,对大型程序使用它容易导致内存泄漏问题。
-------Mat对象是opencv2.0之后引进的图像数据结构,自动分配内存,不存在内存泄漏问题,是面向对象的数据结构,分为两部分:头部和数据部分。
4.Mat对象介绍
(1)从文件加载一幅图像
//从文件加载一幅图像
Mat src;
src = imread("E:\\vsprom\\learn03\\nv02.jpg");
if (src.empty())
{
cout << "can't load image..." << endl;
return -;
}
namedWindow("in win", CV_WINDOW_AUTOSIZE);
imshow("in win", src);
(2)根据一幅图像的尺寸和类型创建一副空图像
Mat dst;
dst = Mat(src.size(),src.type());
dst = Scalar(0, 0, 255);//初始化像素值B=127,G=0,R=255
namedWindow("out win", CV_WINDOW_AUTOSIZE);
imshow("out win", dst);
截图显示

(3)克隆图像与原图像一模一样
Mat dst;
//dst = Mat(src.size(),src.type());
//dst = Scalar(0, 0, 255);//初始化像素值B=127,G=0,B=255
dst = src.clone();//克隆出一幅图像
namedWindow("out win", CV_WINDOW_AUTOSIZE);
imshow("out win", dst);

(4)拷贝和克隆一样,都是产生一幅与原来图像一样的一幅图
src.copyTo(dst);//拷贝图像到dst与clone一样
(5)图像转换(色彩空间的转换)cvtColor(src, dst, CV_BGR2GRAY);
cvtColor(src, dst, CV_BGR2GRAY);//将src从BGR色彩空间转为灰度,并输出到dst这幅图中
效果图:

(6)Mat对象使用要点:
-----输出图像的内存是自动分配的
-----使用opencv的c++接口不用考虑内存分配问题
-----赋值操作和拷贝构造函数只会复制头部分,不会赋值图像的数据部分
-----使用clone和copyTo两个函数实现图像数据的完全拷贝
(7)//访问dst的第一个像素的灰度值
Mat m1;
m1.create(src.size(), src.type());
m1 = Scalar(, , );
(8)创建小数组,也就是我们前面使用的掩膜
Mat ker = (Mat_<char>(, ) << , -, , -, , -, , -, );
(9)使用构造函数Mat M
Mat m(100,100,CV_8UC1,Scalar(127));//第一个参数行数,第二个参数列数,第三个参数8表示每个通道占8位,U表示无符号,C表示char类型,3表示通道数是3,第四个参数Scalar是向量表示初始化每个像素值是多少,向量长度对应通道数目一致
cout << "m=" << endl << m << endl;
//Mat ker = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0); namedWindow("out win", CV_WINDOW_AUTOSIZE);
imshow("out win", m);
效果:

(10)小技巧生成一个指定行数和列数的二维数组-zeros函数
Mat m2 = Mat::zeros(, , CV_8UC1);
cout << "m2=" << endl << m2 << endl;
效果图:

有疑问可加QQ群:218436354
跟我一起学opencv 第三课之图像在opencv中的表示-Mat对象的更多相关文章
- opencv第三课,图像滤波
1.介绍 OpenCV图像处理技术中比较热门的图像滤波操作主要被分为了两大类:线性邻域滤波和非线性滤波.线性邻域滤波常见的有“方框滤波“,”均值滤波“和”高斯滤波“三种,二常见的非线性滤波主要是中值滤 ...
- 跟我一起学opencv 第四课之图像的基本操作
1.图像是由像素组成的,所以修改了像素就可以实现图像的改变. 2先看灰度图像(单通道): *****2.获取灰度图像的像素值使用: int gray = gray_src.at<uchar&g ...
- 跟我一起学opencv 第五课之图像的混合
*理论-线性混合操作 g(x) = (1-α)f0(x)+αf1(x) α的取值范围位0-1之间 f0(x)为图像1,f1(x)表示第二张图像 α是混合系数 g(x)是生成的图像,对每一个像素 ...
- opencv第三课 Canny边缘检测
#include<stdio.h> #include<iostream> #include<opencv2\opencv.hpp> using namespace ...
- 小哈学Python第三课-字符集编码
table.hovertable { font-family: verdana, arial, sans-serif; font-size: 11px; color: #333333; border- ...
- 快学Scala 第三课 (定长数组,变长数组, 数组循环, 数组转换, 数组常用操作)
定长数组定义: val ar = new Array[Int](10) val arr = Array("aa", "bb") 定长数组赋值: arr(0) = ...
- 从零开始学Kotlin第三课
kotlin函数和函数式表达式的简化写法: fun main(args:Array<String>) { var result=add(2,5) println(result) ///简化 ...
- 跟我一起学opencv 第一课之图像加载,修改,保存
使用opencv前记得引入库和头文件: #include<opencv2\opencv.hpp> 1.加载图像(cv::imread)(OPENCV 支持 JPG,PNG,TIFF等常见格 ...
- 跟我一起学opencv 第二课之图像的掩膜操作
1.掩膜(mask)概念 用选定的图像,图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程.用于覆盖的特定图像或物体称为掩模或模板.光学图像处理中,掩模可以足胶片,滤光片等 ...
随机推荐
- python教你用微信每天给女朋友说晚安
但凡一件事,稍微有些重复.我就考虑怎么样用程序来实现它. 这里给各位程序员朋友分享如何每天给朋友定时微信发送"晚安",故事,新闻,等等··· ···最好运行在服务器上,这样后台挂起 ...
- python之@property
在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 这显然不合逻辑.为了限制score的 ...
- traceback模块
traceback模块被用来跟踪异常返回信息 如下例所示: import traceback try: raise SyntaxError, "traceback test" ex ...
- Mongodb数据更新命令、操作符
一.Mongodb数据更新命令 Mongodb更新有两个命令:update.save. 1.1update命令 update命令格式: db.collection.update(criteria,ob ...
- 获得指定数据库中指定块表中所有实体的id
该函数也使用外部指定图纸中的数据库中的块 Int getIdsByDwgBlkName(AcDbDatabase *pDwg, CString strBlkName, AcDbObjectIdArra ...
- C++实现离散数学的关系类,支持传递闭包运算
#include <vector> #include <cassert> #include <iostream> using namespace std; clas ...
- 玩转PHP中的正则表达式
玩转PHP中的正则表达式 检验用户输入.解析用户输入和文件内容,以及重新格式化字符串 级别: 中级 正则表达式提供了一种处理文本的强大方法.使用正则表达式,您可以对用户输入进行复杂的检验.解析用户输入 ...
- knowledge, Experience & Creativity
In a training session, the trainer asked the audience "knowledge is power, how many of you agre ...
- Android6.0 源码修改之 Contacts应用
一.Contacts应用的主界面和联系人详情界面增加顶部菜单添加退出按钮 通过Hierarchy View 工具可以发现 主界面对应的类为 PeopleActivity 联系人详情界面对应的类为 Qu ...
- Python:logging 的巧妙设计
引言 logging 的基本用法网上很多,这里就不介绍了.在引入正文之前,先来看一个需求: 假设需要将某功能封装成类库供他人使用,如何处理类库中的日志? 数年前在一个 C# 开发的项目中,我用了这样的 ...