1. #include <opencv2\core\core.hpp>//核心组件
  2. #include <opencv2\opencv.hpp>//GUI,包含媒体输入输出,视频捕捉、图形交互界面的接口等
  3. #include <opencv2\highgui\highgui.hpp>//图像上处理
  4. using namespace std;
  5. using namespace cv;

图像容器Mat

不必再手动开辟空间;

不必再不需要时立即将空间释放。

Mat是一个类,有两个数据部分组成:矩阵头(矩阵尺寸,存储方法、存储地址等)和一个指向存储所有像素值得矩阵的指针。

opencv使用了引用计数机制,每个Mat对象有自己的信息头,共享一个矩阵。这通过让矩阵指向同一地址而实现。

拷贝构造函数值复制信息头和矩阵指针,不复制矩阵。

  1. #include <opencv2\core\core.hpp>//核心组件
  2. #include <opencv2\opencv.hpp>//GUI,包含媒体输入输出,视频捕捉、图形交互界面的接口等
  3. #include <opencv2\highgui\highgui.hpp>//图像上处理
  4. using namespace std;
  5. using namespace cv;
  6.  
  7. int main(int argc, char** argv){//int argc, char* argv[]
  8. Mat A, C;//仅创建信息头部分
  9. A = imread("test.jpg");//为矩阵开辟内存空间
  10. Mat B(A);//使用拷贝构造函数
  11. C = A;//赋值运算符
  12. }

创建ROI,只需要创建包含边界信息的信息头:

  1. Mat D(A, Rect(, , , ));//使用矩形界定
  2. Mat E = A(Range::all(), Range(, ));//使用行和列界定

复制矩阵本身,使用clone()函数或copyTo函数:

  1. Mat F = A.clone();
  2. Mat G;
  3. A.copyTo(G);

创建Mat对象

Mat运算符<<只对二维矩阵有效。

方法一:Mat()构造函数

  1. Mat M(, , CV_8UC3, Scalar(, , ));
  2. cout << "M=" << endl << M << endl;

(1)2行2列;

(2)存储元素的数据类型及每个矩阵点的通道数;CV_8UC3表示使用8位的unsigned char型,每个像素由三个元素组成三通道。预先定义的通道数可以多达四个。

CV_[位数][带符号与否][类型前缀]C[通道数],大部分设备都是用无符号8位整数CV_8U表示像素亮度。

如果需要更多通道数,可以把通道数放在小括号内,如:Mat M(3,2,CV_8UC(5)),通道数为5

(3)Scalar是个short型向量,指定值初始化矩阵,还可以用于表示颜色。

BGR:(0,0,255)表示全红

输出:

方法二:在C\C++中通过构造函数进行初始化

  1. int main(int argc, char** argv){//int argc, char* argv[]
  2. int sz[] = { , , };//每个维度的尺寸
  3. Mat L(, sz, CV_8UC, Scalar::all());
  4. system("PAUSE");
  5. return EXIT_SUCCESS;
  6. }

 方法三:为已存在的IPlIMAGE指针创建信息头

  1. IPlImage* img = cvLoadImage("1.jpg",);
  2. Mat mtx(img);//转换IPlImage* -> Mat

方法四:Create()函数

  1. M.create(,,CV_8UC());

若create函数指定的参数与之前的参数相同,则不进行实质的内存申请,否则就申请。

方法五:Matlab形式

  1. Mat E = Mat::eye(,,CV_64F);//单位阵
  2. Mat O = Mat::ones(,,CV_32F);//全1矩阵
  3. Mat Z = Mat::zeros(,3CV_8UC1);//0矩阵

方法六:对小矩阵使用逗号分隔式初始化函数

  1. Mat C = (Mat_<double>(,) << ,-,,-,,-,,-,);
  2. cout << C << endl;

方法七:为已存在的对象创新信息头

clone函数和copyTo函数。

  1. int main(int argc, char** argv){//int argc, char* argv[]
  2. Mat C = (Mat_<double>(, ) << , -, , -, , -, , -, );
  3. Mat rowclone = C.row().clone();//把C的第一行赋值给了rowclone这个新的
  4. system("PAUSE");
  5. return EXIT_SUCCESS;
  6. }

格式化输出方法

  1. Mat r = Mat(,,CV_8UC3);
  2. randu(r,Scalar::all(), Scalar::all());//randu产生随机值填充矩阵,给定上下限
  3.  
  4. cout << r << endl;//opencv默认风格
  5.  
  6. cout << foramt(r,Formatter::FMT_PYTHON) << endl;//python
  7.  
  8. cout << format(r,Formatter::FMT_CSV) << endl;//逗号分隔风格
  9.  
  10. cout << format(r,Formatter::FMT_NUMPY) << endl;//numpy风格
  11.  
  12. cout << format(r,Formatter::FMT_FMT_C) << endl;//c风格

常用数据结构

点:Point类

  1. Point point;
  2. point.x = ;
  3. point.y = ;
  4.  
  5. //方法二
  6. Point point = Point(,);

Point_<int> == Point2i == Point

Point_<float> == Point2f

颜色表示:Scalar类

Scalar表示具有4个元素的数组,BGR,如果用不到第四个参数,就不需要写出来。

  1. Scalara,b,c

尺寸:Size类

  1. Size(width, height);

矩形:Rect类

  1. Rect rect = Rect(x,y,width,height);//左上角点坐标,宽,高
  2.  
  3. rect.Size();//返回size
  4. rect.area();//返回矩形面积
  5. rect.contains(Point);//判断点是否在矩形内
  6. rect.inside(Rect);//判断矩形是否在该矩形内
  7.  
  8. Rect newrect1 = rect1 & rect2;//交集
  9. Rect newrect2 = rect1 | rect2;//并集
  10.  
  11. Rect newrect3 = rect + point;//平移操作
  12. Rect newrect4 = rect + size;//放缩操作

颜色空间转换:cvtColor函数

  1. void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=);

(1)输入图像;

(2)输出图像

(3)颜色空间转换标识符;

(4)目标图像通道数,默认值0,0表示目标图像取源图像的通道数;

opencv3中的COLOR_式的宏命名前缀取代了opencv2的CV_。

opencv数据结构与基本绘图的更多相关文章

  1. opencv 2 Opencv数据结构与基本绘图

    基础图像容器Mat Mat 是一个类,又两个数据部分组成:矩阵头(包含矩阵尺寸,存储方法,存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法不同,矩阵可以是不同的维数)的指针.矩阵头的尺 ...

  2. Opencv实现的简易绘图工具

    第一次写博,还是个菜鸟.最近开始学习Opencv,试着写了个简易的绘图工具(目前只写了画线和橡皮擦部分,画其它图形还有待往里添加),也算是记录自己的学习之路. #include "stdaf ...

  3. opencv数据结构总结

    OpenCV里面用到了很多图像相关的数据结构,熟练掌握它们是学习图像的基础. 1.IplImage IplImage IplImage IPL 图像头 typedef struct _IplImage ...

  4. opencv数据结构-MAT结构详解

    1.定义 OpenCV中的C结构体有 CvMat 和 CvMatND,但后续的应用中指出 CvMat 和 CvMatND 弃用了,在C++封装中用 Mat 代替,另外旧版还有一个 IplImage,同 ...

  5. OpenCV学习笔记(四十)——再谈OpenCV数据结构Mat详解

    原文:http://blog.csdn.net/yang_xian521/article/details/7107786 我记得开始接触OpenCV就是因为一个算法里面需要2维动态数组,那时候看cor ...

  6. Opencv step by step - 绘图

    有时候我们需要在图像上写一些字或者画一些简单的几何图案. 祭上代码: #include <cv.h> #include <highgui.h> int main(int arg ...

  7. OpenCV数据结构:CvMat,IplImage,CvArr的应用

    最近看HS算法时,发现在新的OpenCV3.0已经移除了该算法,于是不得不看老版的.这其中涉及到了CvMat,CvArr,IplImage的使用.关于这三个结构与Mat的转换关系,总结如下: (1)派 ...

  8. OpenCV编程入门目录

    第一部分 快速上手OpenCV 第1 章 邂逅OpenCV 图像处理.计算机视觉与OpenCV OpenCV 概述 起源及发展 应用概述 .2OpenCV 基本架构分析 .3OpenCV3 带来了什么 ...

  9. 小强学Python+OpenCV之-1.3绘图

    目标 今天的课程比较轻松,我们来学习一下OpenCV中几个绘图函数: cv2.line cv2.rectangle cv2.circle 画直线 直接经过前面两节的内容.我想直接上代码应该是可以接受的 ...

随机推荐

  1. iOS七种手势

    // 初始化一个UIimageView UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, ...

  2. Binary Indexed Tree

    我借鉴了这个视频中的讲解的填坑法,我认为非常易于理解.有FQ能力和基本英语听力能力请直接去看视频,并不需要继续阅读. naive 算法 考虑一个这样的场景: 给定一个int数组, 我们想知道它的连续子 ...

  3. 上传文件时文件类型限制 <input id="File1" type="file" accept=""/>

    在做项目项目中经常需要上传文件,类型也就那几种.虽然在js中加了上传文件类型的限制,但是为了减少因为用户选择不当而造成的反复检验.可以在input标签上加上accept属性.这种限制只是优化了选择文件 ...

  4. 记一次"未将对象引用设置到对象的实例"问题的排查过程

    最近在给一个老项目做数据对接接口. 背景一 该项目最后更新日期为2006年,使用ASP.NET WebForm..Net2.0.OJB.Castle Avtive Record等.由于是某集团的子系统 ...

  5. 为什么同样的数据,俩人生成的obj和bin文件不一样

    http://bbs.csdn.net/topics/270055083 编译器编译的时候可能有些东西依赖时间,或许是优化的原因,如果可以,换个编译器试试,或许两次编译的时候,强制把系统时间调成一个看 ...

  6. shell-3.bash的基本功能:通配符和其他特殊字符

    1. 2.

  7. h5实现 微信的授权登录

    本文重点 判断是不是微信环境 localstorage设置一个值 微信授权登录 获取一个时间戳 new Date().getTime() const wx = (function () { retur ...

  8. Linux 文件系统的层次化结构

    FHS,Filesystem Hierarchy Standard,文件系统层次化标准.这是一个推荐标准,可以从 http://www.pathname.com/fhs/ 获取. 本文不讨论 FHS, ...

  9. 紫书 例题 11-14 UVa 1279 (动点最小生成树)(详细解释)

    这道题写了好久-- 在三维空间里面有动的点, 然后求有几次最小生成树. 其实很容易发现, 在最小生成树切换的时候,在这个时候一定有两条边相等, 而且等一下更大的那条边在最小生成树中,等一下更小的边不在 ...

  10. 网页里如何使用js禁用F12事件

    接上一篇,突然想起来,类似于网页里如何使用js禁用鼠标右击事件,还有禁用F12事件也可以禁用一下,总所周知,对于Web开发人员来说,常常要进行界面的调试.使用F12调试工具能够很方便地进行调试,查看h ...