opencv笔记

1、             在计算机看来,图像只是一堆亮度各异的点;一副黑白的尺寸为M X N 的图像可以用一个M X N 的矩阵来表示;矩阵中的元素表示这个位置上的像素的亮度,数值越大表示该点越亮。

2、             一般来说,灰度图用2维矩阵表示,彩色(多通道)图像用3维矩阵(M X N X 3)表示;对于图像显示来说,目前大部分设备都是用无符号8位整数(类型为CV_8U)表示像素亮度。

3、             Mat:图像类,通用矩阵类,可以用于创建和操作多维矩阵。

4、             Mat 类可用构造函数创建图像,或采用creat()函数创建图像。

5、             模版类Vec,表示一个向量,可用于矩阵元素的表达。

6、             像素值的读取:(1)at()函数:实现读取矩阵中的某个像素,或对某个像素进行赋值;优缺点:代码的可读性高,但效率并不很高,如果要遍历图像,并不推荐使用at()函数。

(2)迭代器(iterator):遍历方便;

(3)指针(ptr):运行效率高,可靠性不高。

7、选取图像局部区域的方法:如果将局部区域赋值给新的Mat对象,新的对象与原式对象公用相同的数据区域,并不申请新的内存,因此执行速率都比较快;(1)单行或单列选取:row()函数和col()函数;

(2)选取多行或多列:Rang类:Rang(star,end)(注:包含star ,不含end)或Rang::all();

(3)选取感兴趣区域:一种是使用构造函数,如:Mat img(Size(320,240),CV_8UC3);Mat rot(img,Rect(10,10,100,100))或Mat rot(img,Rang(10,100),Rang(10,100));另外一种是使用括号运算符:Mat rot=img(Rect(10,10,100,100))或Mat rot=img(Rang(10,100),Rang(10,100));

(4)选取对角线元素:diag(int d);当d = 0时,表示主对角线;当d >0时,表示主对角线下方第d条次对角线;当d<0时,表示主对角线上方第d条次对角线;

8、Mat类的内存管理:Mat类由两部分组成:矩阵头(矩阵尺寸、存储方法、存储地址等信息)和一个指向所有像素值的矩阵的指针;为了解决矩阵数据传递过大的问题,Opencv使用了引进计数机制;其思路是让每个Mat对象都有自己的矩阵头信息,但多个Mat对象可以共享同一个矩阵数据,即让多个矩阵指针指向同一地址。

9、格式转换:

(1)Mat转换为IplImage 和CvMat格式:直接通过赋值操作完成;

(2)IplImage 和CvMat转换为Mat格式:通过构造函数完成。

10、读取图像文件:

Mat imread(const string & filename, int flags);

Flags >0时,返回3通道图像;

Flags=0 时,返回单通道图像;

Flags<0 时,则不对图像进行通道转换。

11、写入图像文件:

Bool imwrite(conststring& filename, InputArray image, const vector<int> & params =vector<int>());

参数params:JPEG表示图像质量,取值范围:0到100,默认95;

PNG:表示压缩级别,取值范围0到9,默认是3;

PPM,PGM,PBM:表示文件是以二进制还是纯文本方式存储,取值为1时,表示二进制方式存储,默认为1。

注意:在保存文件时,如果文件已经存在,imwrite()函数不会进行提醒,将会直接覆盖以前的文件。

12、读取视频类:VidieoCapture 既可以从视频读取图像,又可以从摄像头读取图像;可以通过其构造函数打开资源或通过其方法open()函数打开资源,open()函数会调用released()函数,先释放已经打开的视频,再打开新视频。

13、写视频类:Videowriter(文件名,编解码器,帧频,宽度,高度);

时间: 2024-10-13 21:40:03

opencv笔记的相关文章

【OpenCV笔记】使用VS2012和OpenCV2.4.9搭建配置OpenCV开发环境

使用MS Visual C++来创建OpenCV工程,由于不同的VS版本在配置时有所差别,现特把配置过程总结下来,以方便自己和其他朋友使用. 1.软件准备 安装Visual Studio2012和OpenCV2.4.9 这里就不再对软件的安装和环境变量的设置进行说明了,其他类似的文章的设置都大抵相似,本文重点介绍一下VS2012环境的配置. 2.配置VS2012环境 (1)新建工程 你可以创建简单的控制台应用或者拥有图形用户界面的复杂应用,此处我们选择最简单常用的控制台应用. 理解解决方案(So

OpenCV笔记(十二)—自定义线性滤波器

在<OpenCV笔记(七)>中,写了四种线性滤波的方法:箱式滤波器.高斯滤波器.中值滤波器和双边滤波器. 在OpenCV中,我们可以使用filter2D函数自定义kernel进行线性滤波. void filter2D(InputArray src, OutputArray dst, int ddepth, InputArray kernel, Point anchor=Point(-1, -1), double delta=0, int borderType=BORDER_DEFAULT) 参

OpenCV笔记大集锦(转载)

整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址:http://blog.csdn.NET/column/details/opencv-manual.html 2:部分OpenCV的函数解读和原理解读 作者:梦想腾飞数量:20篇博文网址:http://blog.csdn.Net/xidianzhimeng/article/category/1593

OpenCV笔记(十八)——使用霍夫变换检测圆圈

这些笔记的最初,我是以接近于源码分析的形式来梳理自己学习OpenCV的过程. 然而写下来,一是执行力,二是时间的问题,确实越写越马虎了.用我老师的话:观其大略了. 但是,暂时就这么写着吧. 在笔记<十七>中,我们简单地谈到了霍夫变换检测直线的原理,就是判断相邻像素点的值(x, y)对应的r-theta曲线是否能够相交,如果有足够多的相邻的像素点的曲线相交,我们就认为这些相邻的像素点构成一条直线. 圆圈亦然,只是把直线的方程替换成了圆的方程.除了极坐标的r,多了两个变量:Xcenter和Ycen

OpenCV基本架构[OpenCV 笔记0]

最近正在系统学习OpenCV,将不定期发布笔记,主要按照毛星云的<OpenCV3编程入门>的顺序学习,会参考官方教程和文档.学习工具是Xcode+CMake,会对书中一部分内容更正,并加入cmakelist的内容. 书中大部分内容来自OpenCV文档,其实比较推荐官方文档和教程 OpenCV2.4.13: http://docs.opencv.org/2.4/index.html OpenCV安装路径下的include文件夹包含opencv和opencv2两个文件夹.opencv文件夹包含Op

OpenCV笔记(十五)——使用Laplace算子进行图像的边缘检测

在笔记十四中,我们使用了Sobel算子对图像进行边缘检测,理论依据是像素变化最快的地方最有可能是边缘处,所以使用sobel算子对图像做微分,得到的结果图像当中灰度较大的区域,即为边缘处. 在这里,我们使用Laplace算子来做边缘检测,也是类似的道理,只不过换成了二阶微分,在一阶微分的极大值的地方,二阶微分为零.我们以二阶微分为零的区域作为边缘.当然了一阶微分极小值的地方,即图像变化很慢很慢的地方,二阶微分也可能为零.所以我们还需要进行额外的滤波. 在理论上是这样,但是在实现上,OpenCV使用

查找并绘制轮廓[OpenCV 笔记XX]

好久没有更新了,原谅自己放了个假最近又在赶进度,所以...更新的内容是很靠后的第八章,因为最近工作要用就先跳了,后面会更新笔记编号...加油加油! 在二值图像中寻找轮廓 void cv::findContours ( InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point() ) image: 输入图像,需为8位单

OpenCV笔记1

所用头文件 #include <opencv2/opencv.hpp> #include <iostream> #include <fstream> 显示图片 void DrawImage() { string filepath = "/home/yang/Datasets/lfpw/testset/Path_Images.txt"; ifstream fin; fin.open(filepath.c_str()); //string类型转为字符串类

输出图像到文件 imwrite()[OpenCV 笔记7]

bool imwrite(const string& filename, InputArray img, const vector<int>& params=vector<int>()); filename 待写入的文件名.保存图像的格式由扩展名决定. img 一般为一个Mat类型的图像 params 特定格式保存的参数编码: JPEG:params表示0到100的图片质量(CV_IMWRITE_JPEG_QUALITY),默认值为95: PNG:params表示压

Opencv 笔记 opencv tutorial 2.1节 mat

前言:opencv中,mat类型非常基础和重要.以下是opencv tutorial 2.1章节的中英文整理. Mat 简介 IplImage c 结构 需要管理内存 mat是c++中的类class 自动内存分配 Mat  包括: header A pointer to the matrix containing the pixel values  (can take dimentionlity 根据存储方法) 头大小不变  矩阵大小变 复制数据的速度由矩阵大小决定 将图像传给函数是常见做法 图