跟我一起学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)概念 用选定的图像,图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程.用于覆盖的特定图像或物体称为掩模或模板.光学图像处理中,掩模可以足胶片,滤光片等 ...
随机推荐
- jmeter利用自身代理录制电脑脚本(一)
在利用代理录制脚本时一定要安装java jdk,不然不能录制的. 没有安装过java jdk安装jmeter后打开时会提示安装jdk,但是mac系统中直接打开提示安装jdk页面后下载的java并不是j ...
- 你不知道的JavaScript--Item9 call(),apply(),bind()与回调
1.call(),apply(),bind()方法 JavaScript 中通过call或者apply用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定 ...
- SourceTree安装跳过注册
问题描述 SourceTree是一个可视化管理版本文件的工具,但是注册的时候需要打开外国的网站. 因此要安装时需要绕过这一步才能使用. 解决方案 1. 在下面路径下创建一个accounts.json文 ...
- TProfiler部署文档--笔记
TProfiler是一个可以在生产环境长期使用的性能分析工具.它同时支持剖析和采样两种方式,记录方法执行的时间和次数,生成方法热点 对象创建热点 线程状态分析等数据,为查找系统性能瓶颈提供数据支持. ...
- CString 转化成 const char* 类型
写程序的时候经常会遇到无法将“CString”转换为“const char *”的错误,这里我找到了一个解决办法,与大家分享下: CString cs = _T("); ) * ; char ...
- BZOJ_4128_Matrix_矩阵乘法+哈希+BSGS
BZOJ_4128_Matrix_矩阵乘法+哈希+BSGS Description 给定矩阵A,B和模数p,求最小的x满足 A^x = B (mod p) Input 第一行两个整数n和p,表示矩阵的 ...
- BZOJ_2298_[HAOI2011]problem a_线段树
BZOJ_2298_[HAOI2011]problem a_线段树 Description 一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低.”问最少有几个人没有说真话( ...
- CentOS7系统操作httpd服务 - 开机启动/重启/查看状态
第一.启动.终止.重启 systemctl start httpd.service #启动 systemctl stop httpd.service #停止 systemctl restart htt ...
- 张高兴的 Windows 10 IoT 开发笔记:串口红外编解码模块 YS-IRTM
This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub: https://github.c ...
- 已管理员身份从cmd框进入mysql,及常用的简单操作!
在命令框中操作mysql已管理员的身份进入操作权限较高,已普通用户进入cmd框也可对mysql进行操作,不过一般建议用管理员身份进入. 1.启动MYSQL Notifier 2.已管理员身份进入cmd ...