《opencv 入门教程》

原创 2015年07月07日 21:21:23

一幅图像可以看做是一个m*n的矩阵,矩阵的元素的值表示这个位置上的像素的亮度,一般像素值越大则表示该点越亮。

灰度图像:2维矩阵,彩色图像:3维矩阵。

图像数据在计算机内存中的存储顺序为以图像最左上角开始。

Mat 类定义里关键属性:

int flag;

int dims;

int rows,cols;

uchar*data;

构造Mat;

Mat M(3,2,CV_8UC3,Scalar(0,0,255));

创建一个行数为3,列数为2的图像,图像元素是8位无符号整数类型,三个通道。且图像所有像素值被初始化为(0,0,255)

cout<<"M="<<M<<endl;

输出:

M=[0,0,255,0,0,255;

0,0,255,0,0,255;

0,0,255,0,0,255;

]

常用的构造函数有: 
  Mat::Mat() 
无参数构造方法; 
  Mat::Mat(int rows, int cols, int type) 
创建行数为 rows,列数为 col,类型为 type 的图像; 
  Mat::Mat(Size size, int type) 
创建大小为 size,类型为type 的图像; 
  Mat::Mat(int rows, int cols, int type, const Scalar& s)  
行数为 rows,列数为 col,类型为 type 的图像,并将所有元素初始
化为值s; 
  Mat::Mat(Size size, int type, const Scalar& s) 
创建大小为 size,类型为type 的图像,并将所有元素初始化为值 s; 
  Mat::Mat(const Mat& m) 
将m 赋值给新创建的对象,此处不会对图像数据进行复制,m 和新对象
共用图像数据; 
  Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP) 
创建行数为 rows,列数为 col,类型为 type 的图像,此构造函数不创建
图像数据所需内存,而是直接使用 data 所指内存,图像的行步长由 step
指定。 
  Mat::Mat(Size size, int type, void* data, size_t step=AUTO_STEP) 
创建大小为 size,类型为type 的图像,此构造函数不创建图像数据所需
内存,而是直接使用 data 所指内存,图像的行步长由step 指定。 
  Mat::Mat(const Mat& m, const Range& rowRange, const Range& colRange) 
创建的新图像为 m 的一部分,具体的范围由 rowRange 和 colRange 指
定,此构造函数也不进行图像数据的复制操作,新图像与 m 共用图像数
据; 
  Mat::Mat(const Mat& m, const Rect& roi) 
创建的新图像为 m 的一部分,具体的范围 roi 指定,此构造函数也不进
行图像数据的复制操作,新图像与 m 共用图像数据。

type可以是CV_8UC1, CV_16SC1, …,
CV_64FC4 等。里面的 8U表示8 位无符号整数,16S 表示16 位有符号整数,64F
表示64 位浮点数(即double 类型);C后面的数表示通道数,例如 C1 表示一个
通道的图像,C4 表示 4 个通道的图像.

可以用create进行创建图像

Mat M(2,2,CV_8UC3);

M.create(3,2,CV_8UC2);

注意,使用create()函数时,无法设置图像像素的初始值。



OpenCV 2 中提供了Matlab 风格的函数,

如zeros(),ones()和eyes()。这种方
法使得代码非常简洁,使用起来也非常方便。使用这些函数需要指定图像的大小
和类型,使用方法如下: 
Mat Z = Mat::zeros(2,3, CV_8UC1); 
cout << "Z = " << endl << " " << Z << endl; 
 
Mat O = Mat::ones(2, 3, CV_32F);     
cout << "O = " << endl << " " << O << endl; 
 
Mat E = Mat::eye(2, 3, CV_64F);     
cout << "E = " << endl << " " << E << endl; 


Vec类预定义了一些小向量,可以将之用于矩阵元素的表达。

typedef Vec<uchar, 2> Vec2b; 
typedef Vec<uchar, 3> Vec3b; 
typedef Vec<uchar, 4> Vec4b; 
 
typedef Vec<short, 2> Vec2s; 
typedef Vec<short, 3> Vec3s; 
typedef Vec<short, 4> Vec4s; 
 
typedef Vec<int, 2> Vec2i; 
typedef Vec<int, 3> Vec3i; 
typedef Vec<int, 4> Vec4i; 
 
typedef Vec<float, 2> Vec2f; 
typedef Vec<float, 3> Vec3f; 
typedef Vec<float, 4> Vec4f; 
typedef Vec<float, 6> Vec6f; 
 
typedef Vec<double, 2> Vec2d; 
typedef Vec<double, 3> Vec3d; 
typedef Vec<double, 4> Vec4d; 
typedef Vec<double, 6> Vec6d;


Vec3b color; //用color 变量描述一种 RGB颜色 
color[0]=255; //B分量 
color[1]=0; //G分量 
color[2]=0; //R分量 

【OpenCV入门教程之一】 OpenCV 2.4.8 +VS2010的开发环境配置

目录(?)[-] 因为读研期间的研究方向是图像处理所以浅墨这段时间闭门研究了很多OpenCV和图像处理相关的知识与内容眼看自己积累到一定的程度了于是决定开始开设这个OpenCV系列专栏总...
  • huang9012
  • huang9012
  • 2014年03月22日 17:24
  • 101936

【OpenCV人脸识别入门教程之三】CMake编译OpenCV源码

本文主要内容包括CMake的简介、使用CMake工具在Winsdows系统下编译OpenCV工程以及源码赏析。...
  • lsq2902101015
  • lsq2902101015
  • 2015年11月08日 11:40
  • 2135

opencv 入门教程, ubuntu安装,及python 下简单使用

的番外篇,因为严格来说不是在讲Python而是讲在Python下使用OpenCV。本篇将介绍和深度学习数据处理阶段最相关的基础使用,并完成4个有趣实用的小例子: - 延时摄影小程序 - 视频中截屏...
  • u013378306
  • u013378306
  • 2017年04月13日 19:12
  • 2175

初识OpenCV(基础篇)

OpenCV其实就是一堆C和C++语言的源代码文件,这些源代码文件中实现了许多常用的计算机视觉算法。例如C接口函数cvCanny()实现了Canny边缘提取算法。可以直接将这些源代码添加到我们自己的软...
  • songkai320
  • songkai320
  • 2016年07月13日 17:59
  • 2160

【OpenCV入门教程之一】 安装OpenCV

知乎:http://www.zhihu.com/people/mao-xing-yun 写作当前博文时配套使用的OpenCV版本: 2.4.8、24.9、3.0 ( 2014年4月28...
  • u013256831
  • u013256831
  • 2014年09月13日 10:07
  • 1224

《Opencv 入门教程》

很多初学者希望快速掌握opencv,但是会遇到很多困难,总结起来有两种: (1)c/c++编程基础不过关。提升编程能力,多练习编程。 (2)不了解算法原理。提升理论知识。系统学习《数字图像处理》《...
  • weiliangdemo
  • weiliangdemo
  • 2015年07月07日 21:09
  • 344

opencv入门教程 <一>

本篇博文作为系列博文的第一篇,主要讲解一些opencv的基本操作,包括读取、写回、访问像素、修改像素、显示照片。 读取照片     所用函数:Mat imread(const string& ...
  • u011747846
  • u011747846
  • 2014年06月15日 22:08
  • 978

【OpenCV入门教程之二】 一览众山小:OpenCV 2.4.8 or OpenCV 2.4.9组件结构全解析

写作当前博文时配套使用OpenCV版本:2.4.8 之前啃了不少OpenCV的官方文档,发现如果了解了一些OpenCV整体的模块架构后,再重点学习自己感兴趣的部分的话,就会有一览众山小的感觉,...
  • zhmxy555
  • zhmxy555
  • 2014年02月25日 20:56
  • 128665

OpenCV2/3基础入门高清视频教程

OpenCV2/3基础入门视频教程 版本说明: 本套视频讲解环境为VS2012+OpenCV2.48, 同时会讲解如何修改使用OpenCV3.0版本,本视频为基础入门视频,从安装配置到基本内容以...
  • stq054188
  • stq054188
  • 2016年12月18日 14:39
  • 3652

博客专栏 > 【OpenCV】入门教程

共18篇博文 博客专栏  >  编程语言   >  【OpenCV】入门教程 【OpenCV入门教程之十八】OpenCV仿射变换 & SURF特征点描述合辑 本篇文章中,我们一起探讨了O...
  • autumn20080101
  • autumn20080101
  • 2016年09月20日 10:37
  • 131
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《opencv 入门教程》
举报原因:
原因补充:

(最多只允许输入30个字)