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对象的更多相关文章

  1. opencv第三课,图像滤波

    1.介绍 OpenCV图像处理技术中比较热门的图像滤波操作主要被分为了两大类:线性邻域滤波和非线性滤波.线性邻域滤波常见的有“方框滤波“,”均值滤波“和”高斯滤波“三种,二常见的非线性滤波主要是中值滤 ...

  2. 跟我一起学opencv 第四课之图像的基本操作

    1.图像是由像素组成的,所以修改了像素就可以实现图像的改变. 2先看灰度图像(单通道): *****2.获取灰度图像的像素值使用:  int gray = gray_src.at<uchar&g ...

  3. 跟我一起学opencv 第五课之图像的混合

    *理论-线性混合操作 g(x) = (1-α)f0(x)+αf1(x)  α的取值范围位0-1之间  f0(x)为图像1,f1(x)表示第二张图像 α是混合系数   g(x)是生成的图像,对每一个像素 ...

  4. opencv第三课 Canny边缘检测

    #include<stdio.h> #include<iostream> #include<opencv2\opencv.hpp> using namespace ...

  5. 小哈学Python第三课-字符集编码

    table.hovertable { font-family: verdana, arial, sans-serif; font-size: 11px; color: #333333; border- ...

  6. 快学Scala 第三课 (定长数组,变长数组, 数组循环, 数组转换, 数组常用操作)

    定长数组定义: val ar = new Array[Int](10) val arr = Array("aa", "bb") 定长数组赋值: arr(0) = ...

  7. 从零开始学Kotlin第三课

    kotlin函数和函数式表达式的简化写法: fun main(args:Array<String>) { var result=add(2,5) println(result) ///简化 ...

  8. 跟我一起学opencv 第一课之图像加载,修改,保存

    使用opencv前记得引入库和头文件: #include<opencv2\opencv.hpp> 1.加载图像(cv::imread)(OPENCV 支持 JPG,PNG,TIFF等常见格 ...

  9. 跟我一起学opencv 第二课之图像的掩膜操作

    1.掩膜(mask)概念 用选定的图像,图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程.用于覆盖的特定图像或物体称为掩模或模板.光学图像处理中,掩模可以足胶片,滤光片等 ...

随机推荐

  1. 详解vue生命周期

    vue生命周期 @(vue)[生命周期] 前言 在使用vue一个多礼拜后,感觉现在还停留在初级阶段,虽然知道怎么和后端做数据交互,但是对于mounted这个挂载还不是很清楚的.放大之,对vue的生命周 ...

  2. 电梯调度算法---SCAN算法

    请珍惜小编劳动成果,该文章为小编原创,转载请注明出处. 扫描(SCAN)调度算法:总是从磁臂当前位置开始,沿磁臂的移动方向去选择离当前磁臂最近的那个柱面的访问者.如果沿磁臂的方向无请求访问时,就改变磁 ...

  3. JAVA API操作hbase1.4.2

    package com.quyf; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; imp ...

  4. gen_server terminate与trap_exit

    不论是新手还是熟手,写gen_server时常会遇到terminate/2,有时执行,有时却不执行的困惑. 比如stackoverflow中的Handling the cleanup of the g ...

  5. Java通过JDBC 进行MySQL数据库操作

    转自: http://blog.csdn.net/tobetheender/article/details/52772157 Java通过JDBC 进行MySQL数据库操作 原创 2016年10月10 ...

  6. Java 读书笔记 (十) 循环

    while循环 只要布尔表达式为true,循环就一直执行下去. public class Test( public static void main(String args[]){ int x=10; ...

  7. 电梯调度二——曹玉松&&蔡迎盈

    电梯初步版本    经过去实际大楼的调查和一周的学习,初步完成了电梯的制作,但是这个版本的电梯功能并不是很全面,而且界面有待于改善,现在做出了测试版本,稍后进一步跟进新的版本,现在的版本初步完成的是电 ...

  8. Django 基础二(View和urls)

    上一篇博文已经成功安装了python环境和Django,并且新建了一个空的项目.接下来就可以正式开始进行Django下 的Web开发了.首先进入项目的主目录: cd ./DjangoLearn/hol ...

  9. ruby整理

    参考博客:https://www.cnblogs.com/felixzh/p/8081622.html 官网地址 https://rvm.io/rvm/install 一.前提  centos6.8下 ...

  10. CentOS 本地和网络yum源简单说明及配置

    1.简述 Yellow dog Updater, Modified由Duke University团队,修改Yellow Dog Linux的Yellow Dog Updater开发而成,是一个基于R ...