1. OpenCV安装

OpenCV是一个开源的跨平台的计算机视觉类库,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV的应用包括:人机互动,物体识别,图像分割,人脸识别,动作识别,运动跟踪,机器人,运动分析,机器视觉,结构分析,汽车安全驾驶等领域。自己也坚信计算机视觉会成为AR/VR,机器人,无人机,自动驾驶等的重要组成部分。

[1]安装依赖库

sudo apt-get install libgtk2.0-dev pkg-config
sudo apt-get install build-essential
sudo apt-get install cmake
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev

[2]编译OpenCV

将OpenCV放到任意目录,然后unzip opencv-2.4.13.zip。创建编译目录,然后编译和安装,如下所示:

cd opencv-2.4.13
mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
make
sudo make install

[3]OpenCV参数设置

在/etc/ld.so.conf.d/opencv.conf文件中加入一行:/usr/local/lib,然后执行命令sudo ldconfig。在/etc/bash.bashrc文件中添加内容,如下所示:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

说明:至此OpenCV安装配置全部完成。

[4]一个人脸检测的例子

进入目录opencv-2.4.13/samples/c,然后执行命令./build_all.sh。如下所示:

./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" --scale=1.5 lena.jpg

输出结果,如下所示:

2. Nsight Eclipse Edition开发OpenCV应用程序

主要是配置Cross G++ Compiler中的Includes和Cross G++ Linker中的Libraries [详细配置请参考[2]]。给出一个测试例子,如下所示:

#include <string>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main() {string imagename = "/root/CUDAProgram/TestOpenCV/src/test.png";Mat img = imread(imagename);if(img.empty()) {cout<<"read failed!";return -1;}namedWindow("image", 1);imshow("image", img);waitKey();return 0;
}

解析:

[1]Mat是OpenCV最基本的数据结构,它主要包含2部分:Header和Pointer。Header中主要包含矩阵的大小,存储方式,存储地址等信息;而Pointer中存储指向像素值的指针。

[2]waitKey(delay=0):delay参数表示等待delay毫秒,如果在此期间有按键按下,那么立即结束并返回按键的ASCII码,否则返回-1。如果delay≤0,那么无限等待下去,直到有按键按下。

3. OpenCV数据结构

OpenCV主要分为5个模块,CV模块包含基本的图像处理函数和高级的计算机视觉算法;ML是机器学习库,包含一些基于统计的分类和聚类工具;HighGUI包含图像和视觉输入/输出的函数;CXCore包含OpenCV的一些基本数据结构和相关函数;CxAux模块一般存放一些即将被淘汰的算法和函数[比如,基于嵌入式隐马尔可夫模型的人脸识别算法等],同时还有一些新出现的实验性的算法和函数 [比如,前景和背景的分割等]。

[1]OpenCV基本数据类型

解析:

  • CvPoint:2D point with integer coordinates
  • CvPoint2D32f:2D point with floating-point coordinates
  • CvPoint3D32f:3D point with floating-point coordinates
  • CvPoint2D64f:2D point with double precision floating-point coordinates
  • CvPoint3D64f:3D point with double precision floating-point coordinates
  • CvSize:pixel-accurate size of a rectangle
  • CvSize2D32f:sub-pixel accurate size of a rectangle
  • CvRect:offset and size of a rectangle
  • CvScalar:A container for 1-,2-,3- or 4-tuples of numbers
  • CvTermCriteria:Termination criteria for iterative algorithms
  • CvMat:Multi-channel matrix
  • CvMatND:Multi-dimensional dense multi-channel array
  • CvSparseMat:Multi-dimensional sparse multi-channel array
  • IplImage:IPL image header
  • CvArr:Arbitrary array

说明:关于OpenCV基本数据类型的结构体定义请参考$OpenCV\cxcore\include\cxtypes.h。

[2]CvArr数据结构

解析:typedef void CvArr;

[3]CvMat数据结构

解析:

typedef struct CvMat
{ int type; // 类型         int step; // 用字节表示行数据长度*/int* refcount; // 内部访问union {uchar*  ptr;short*  s;int*    i;float*  fl;double* db;} data; // 数据指针 union {int rows;int height; // 高度};union {int cols;   int width; // 宽度};
} CvMat; // 矩阵结构头

[4]IplImage数据结构

解析:

IplImage是我们用来为图像进行编码的基本结构,这些图像可以是灰度、彩色、4通道的等,其中每个通道可以包含任意的整数或浮点数。因此,IplImage结构体是整个OpenCV函数库的基础。

typedef struct _IplImage
{int nSize; // IplImage大小int ID; // 版本int nChannels; // 大多数OpenCV函数支持1,2,3或4个通道 int alphaChannel; // 被OpenCV忽略 int depth;//像素的位深度,支持:IPL_DEPTH_8U,IPL_DEPTH_8S,IPL_DEPTH_16U,IPL_DEPTH_16S,IPL_DEPTH_32S,IPL_DEPTH_32F和IPL_DEPTH_64Fchar colorModel[4]; // 被OpenCV忽略 char channelSeq[4]; // 被OpenCV忽略 int dataOrder; // 0:交叉存取颜色通道;1:分开的颜色通道。cvCreateImage只可以创建交叉存取图像int origin; // 图像原点位置:0表示顶-左结构,1表示底-左结构int align; // 图像行排列方式(4或8)。被OpenCV忽略,使用widthStep代替int width; // 图像宽像素数 int height; // 图像高像素数struct _IplROI *roi; // 图像感兴趣区域,当该值非空时,只对该区域进行处理struct _IplImage *maskROI; // 在OpenCV中必须为NULLvoid *imageId; // 在OpenCV中必须为NULLstruct _IplTileInfo *tileInfo; // 在OpenCV中必须为NULLint imageSize; // 图像数据大小(在交叉存取格式下ImageSize = image->height*image->widthStep),单位字节char *imageData; // 指向排列的图像数据int widthStep; // 排列的图像行大小,以字节为单位 int BorderMode[4]; // 边际结束模式,被OpenCV忽略int BorderConst[4]; // 边际结束模式,被OpenCV忽略char *imageDataOrigin; // 指针指向一个不同的图像数据结构(不是必须排列的),主要是为了纠正图像内存分配准备的
} IplImage;

[5]Mat数据结构

解析:

Mat是一个多维的密集数据数组,可以用来处理向量和矩阵、图像、直方图等常见的多维数据。与CvMat和IplImage相比,Mat有更强的矩阵运算能力。因此,将CvMat与IplImage转化为Mat将大大减少计算时间。Mat常用的3个方法,如下所示:

  • Mat mat = imread(const String* filename); // 读取图像
  • imshow(const string frameName, InputArray mat); // 显示图像
  • imwrite(const string& filename, InputArray img); // 存储图像

假设Mat类型的imgMat图像数据存在,那么IplImage pImg = IplImage(imgMat);[Mat -> IplImage]和CvMat cvMat = imgMat;[Mat -> CvMat]。

参考文献:

[1] opencv在ubuntu下的安装:http://www.cnblogs.com/jeakon/archive/2013/05/08/3066469.html

[2] Using OpenCV with Eclipse (plugin CDT):http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/introduction/linux_eclipse/linux_eclipse.html

[3] Welcome to OpenCV-Python Tutorials’s documentation!:http://opencv-python-tutroals.readthedocs.io/en/latest/

[4] OpenCV中文网站:http://wiki.opencv.org.cn/index.php/%E9%A6%96%E9%A1%B5

[5] OpenCV 3.0.0-dev documentation:http://docs.opencv.org/3.0-last-rst/

[6] IplImage,CvMat,Mat的关系:http://www.cnblogs.com/summerRQ/articles/2406109.html

[7] CXCORE Reference Manual:http://opencv.jp/opencv-1.0.0_org/docs/ref/opencvref_cxcore.htm#cxcore_basic_structures

[8] IplImage:http://baike.baidu.com/link?url=vGa0nWnXuJXpR-JHWyS2fdg9OUAkyd7eDY7XRu3XwxeZq65g7AM7_kEkbhVT78Wp0TVCAljWnmRvvama_TZzo_

OpenCV学习日记1相关推荐

  1. opencv学习日记——娜扎小姐姐与猫咪的图像融合,超美哈哈哈

    opencv学习日记--图像的比较和融合,超美哈哈哈 图在后边哦,不看代码也要看看图,很酷,opencv绝了!!! #include<iostream> #include<openc ...

  2. OpenCV学习日记(2)

    绪言 图像基本要素简介 1.灰度色彩空间 2.BGR色彩空间 3.HSV色彩空间 数学知识简介 图像处理中的数学 连续傅里叶变换 离散时间傅里叶变换 离散傅里叶变换 傅里叶逆变换 卷积 滤波器 简介 ...

  3. opencv学习日记——CV_8UC1 含义

    CV_8UC1 含义 预定义: CV_<bit_depth>(S|U|F)C<number_of_channels> 1–bit_depth-比特数-代表8bite,16bit ...

  4. caffe学习日记--lesson5: VS下新建工程,探究Blob

    caffe学习日记--lesson5: VS下新建工程,探究Blob 在VS2013下新建工程,探究caffe的数据结构Blob,并使用.熟悉caffe 1.新建空白的控制台应用程序,添加main.c ...

  5. OpenCV 学习笔记03 boundingRect、minAreaRect、minEnclosingCircle、boxPoints、int0、circle、rectangle函数的用法...

    函数中的代码是部分代码,详细代码在最后 1 cv2.boundingRect 作用:矩形边框(boundingRect),用于计算图像一系列点的外部矩形边界. cv2.boundingRect(arr ...

  6. opencv学习笔记(二):基于肤色的人手检测

    opencv学习笔记(二):基于肤色的人手检测 原文:http://blog.csdn.net/wzmsltw/article/details/50849810 先写了人手的检测程序,下一步基于检测程 ...

  7. Python+OpenCV学习(17)---摄像机标定

    Python+OpenCV学习(17)---摄像机标定 原文:http://blog.csdn.net/firemicrocosm/article/details/48594897 利用python学 ...

  8. OpenCV学习之六: 使用方向梯度直方图估计图像旋转角度

    OpenCV学习之六: 使用方向梯度直方图估计图像旋转角度 原文:http://blog.csdn.net/zhjm07054115/article/details/26964275 下面的代码通过计 ...

  9. python做直方图-python OpenCV学习笔记实现二维直方图

    本文介绍了python OpenCV学习笔记实现二维直方图,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/dd/d0d/tutorial_py_2d ...

最新文章

  1. 谷歌浏览器linux版_Chrome apps 要被谷歌干掉了
  2. Android多模块覆盖率,Android代码覆盖率初探—问题已解决!
  3. 从零开始的全栈工程师——html篇1.2
  4. 内核中的UDP socket流程(7)——udp_sendmsg
  5. 慕课学习--DNS的作用
  6. 华晨中华v3车质量怎么样_宝马发动机加持,销量仅个位数?这些车有点惨
  7. SVN—怎么删除 SVN 上已有的URl
  8. 店宝宝:京东重新进军社区团购
  9. linux 帝国cms 刷新,帝国cms怎么自动刷新网站首页?(帝国CMS自动刷新首页的方法)...
  10. 从“大恐怖”展望AI未来,未来人类会好吗?
  11. 自动修改hosts文件
  12. safari支持Ajax同步请求吗,在同步“Ajax”请求之前强制在Webkit(Safari和Chrome)中重绘UI...
  13. Inversion Lemma
  14. Xmanager Enterprise 5破解版
  15. Nmap命令详解(全)
  16. Android onKeyDown监听返回键无效
  17. 如何免费获取县级气象数据?
  18. 计算机考研英语自我介绍范文,考研复试英语自我介绍范文
  19. oracle 提取手机号码
  20. Python官方教程.pdf

热门文章

  1. 由一幅数据对比图引发的Excel使用
  2. SpringMVC + ajax传值
  3. 【计算机网络】OSI七层模型
  4. 一文搞懂让你懵圈的超级计算机:真的不是堆CPU就行
  5. 微信小程序 组件与页面的传参、方法调用(二)
  6. TA - 一种省资源的卡通树的做法
  7. python入门教程之五元组
  8. python十大语法_精华-Python十大语法有哪些?
  9. java 深度二叉树_Java 实现二叉树的深度
  10. 体验管理|“以旧换新”重塑“家电和耐用品”低频的消费需求