跟我一起学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)概念 用选定的图像,图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程.用于覆盖的特定图像或物体称为掩模或模板.光学图像处理中,掩模可以足胶片,滤光片等 ...
随机推荐
- redis缓存本地安装教程
http://www.runoob.com/redis/redis-install.html
- 『个人の笔记』百度ife
✄--------------------------------------------task1分割线--------------------------------------------✄ 百 ...
- Android 框架练成 教你打造高效的图片加载框架
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/41874561,本文出自:[张鸿洋的博客] 1.概述 优秀的图片加载框架不要太多, ...
- 使用wordpress搭建自己的独立博客
最近想要搭建自己的私人博客, 各种百度,完整的搭建步骤如下! 首先得要有自己的vps或者云主机,我这里是自己的云主机,有自己的域名(我这边目前没有买域名)! 搭建步骤! 1,安装lnmp(linux+ ...
- 跟我学ASP.NET MVC之六:SportsStrore添加产品目录导航
摘要: 上一篇文章,我建立了SportsStore应用程序的核心架构.现在我将使用这个架构向这个应用程序添加功能,你将开始看到这个基础架构的作用.我将添加重要的面向客户的简单功能,在这个过程中,你将看 ...
- tcp.go
) _, err := io.ReadFull(clientConn, buf) if err != nil { p.ctx.nsqd.logf("ERROR ...
- BZOJ_5015_[Snoi2017]礼物_矩阵乘法
BZOJ_5015_[Snoi2017]礼物_矩阵乘法 Description 热情好客的请森林中的朋友们吃饭,他的朋友被编号为 1-N,每个到来的朋友都会带给他一些礼物:.其中,第 一个朋友会带给他 ...
- Django中用户权限模块
Django中用户权限模块 1 auth模块 auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理. auth可以和admin模块配合使用, 快速建立网站的管理系 ...
- RocketMQ源码 — 十一、 RocketMQ事务消息
分布式事务是一个复杂的问题,rmq实现了事务的最终一致性,rmq保证本地事务成功消息一定会发送成功并被成功消费,如果本地事务失败了,消息不会被发送. rmq事务消息的实现过程为: producer发送 ...
- appium+python+eclipse简单编写小示例!
Appium简单介绍! 一.appium分成3个部分来看,分别为:appium服务端.appium客户端.设备端 1.设备端 WebDriverAgentRunner 的应用,以后简称 WDA,这个应 ...