OpenCV+编程入门
OpenCV 编程简介(矩阵/图像/视频的基本读写操作) - OpenCV China :图像处理,计算机视觉库,Image Processing, Computer Visionhttp://www.opencv.org.cn/index.php/OpenCV_编程简介(矩阵/图像/视频的基本读写操作)[2013/1/18 20:14:57] 导航首页新闻动态最近更改编辑帮助关于本站
Personal tools用户登录工具链入页面链出更改上载文件特殊页面可打印版
讨论编辑history不转换繁体爱车要保养?找"养车无忧网"养车无忧网,专业汽车保养用品在线平台 自助保养更省心,100%正品行货.www.yangche51.comOpen Source Computer Vision LibraryOpenCV 编程简介(矩阵/图像/视频的基本读写操作)Introduction to programming with OpenCVOpenCV编程简介作者: Gady AgamDepartment of Computer ScienceJanuary 27, 2006Illinois Institute of TechnologyURL: http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html#SECTION00040000000000000000翻译: chenyusiyuanJanuary 26, 2010http://blog.csdn.net/chenyusiyuan/archive/2010/01/26/5259060.aspx摘要: 本文旨在帮助读者快速入门OpenCV,而无需阅读冗长的参考手册。掌握了OpenCV的以下基础知识后,有需要的话再查阅相关的参考手册。目录 [隐藏]1 一、简介1.1 1、OpenCV的特点1.1.1 (1) 总体描述1.1.2 (2) 功能1.1.3 (3) OpenCV模块1.2 2、有用的学习资源1.2.1 (1) 参考手册:1.2.2 (2) 网络资源:1.2.3 (3) 书籍:1.2.4 (4) 视频处理例程(在 /samples/c/):1.2.5 (5) 图像处理例程 (在 /samples/c/):1.3 3、OpenCV 命名规则1.3.1 (1) 函数名:1.3.2 (2) 矩阵数据类型:1.3.3 (3) 图像数据类型:1.3.4 (4) 头文件:1.4 4、编译建议1.4.1 (1) Linux:1.4.2 (2) Windows:1.5 5、C++例程2 二、GUI 指令2.1 1、窗口管理2.1.1 (1) 创建和定位一个新窗口:2.1.2 (2) 载入图像:2.1.3 (3) 显示图像:2.1.4 (4) 关闭窗口:2.1.5 (5) 改变窗口大小:条目简体搜索文档搜索论坛OpenCV 编程简介(矩阵/图像/视频的基本读写操作) - OpenCV China :图像处理,计算机视觉库,Image Processing, Computer Vision
http://www.opencv.org.cn/index.php/OpenCV_编程简介(矩阵/图像/视频的基本读写操作)[2013/1/18 20:14:57]2.2 2、输入处理2.2.1 (1) 处理鼠标事件:2.2.2 (2) 处理键盘事件:2.2.3 (3) 处理滑动条事件:3 三、OpenCV的基本数据结构3.1 1、图像数据结构3.1.1 (1) IPL 图像:3.2 2、矩阵与向量3.2.1 (1) 矩阵:3.2.2 (2) 一般矩阵:3.2.3 (3) 标量:3.3 3、其它结构类型3.3.1 (1) 点:3.3.2 (2) 矩形框大小(以像素为精度):3.3.3 (3) 矩形框的偏置和大小:4 四、图像处理4.1 1、图像的内存分配与释放4.1.1 (1) 分配内存给一幅新图像:4.1.2 (2) 释放图像:4.1.3 (3) 复制图像:4.1.4 (4) 设置/获取感兴趣区域ROI:4.1.5 (5) 设置/获取感兴趣通道COI:4.2 2、图像读写4.2.1 (1) 从文件中读入图像:4.2.2 (2) 保存图像:4.3 3、访问图像像素4.3.1 (1) 假设你要访问第k通道、第i行、第j列的像素。4.3.2 (2) 间接访问: (通用,但效率低,可访问任意格式的图像)4.3.3 (3) 直接访问: (效率高,但容易出错)4.3.4 (4) 基于指针的直接访问: (简单高效)4.3.5 (5) 基于 c++ wrapper 的直接访问: (更简单高效)4.4 4、图像转换4.4.1 (1) 字节型图像的灰度-彩色转换:4.4.2 (2) 彩色图像->灰度图像:4.4.3 (3) 不同彩色空间之间的转换:4.5 5、绘图指令4.5.1 (1) 绘制矩形:4.5.2 (2) 绘制圆形:4.5.3 (3) 绘制线段:4.5.4 (4) 绘制一组线段:4.5.5 (5) 绘制一组填充颜色的多边形:4.5.6 (6) 文本标注:5 五、矩阵处理5.1 1、矩阵的内存分配与释放5.1.1 (1) 总体上:5.1.2 (2) 为新矩阵分配内存:5.1.3 (3) 释放矩阵内存:5.1.4 (4) 复制矩阵:5.1.5 (5) 初始化矩阵:5.1.6 (6) 初始化矩阵为单位矩阵:5.2 2、访问矩阵元素5.2.1 (1) 假设需要访问一个2D浮点型矩阵的第(i, j)个单元.5.2.2 (2) 间接访问:5.2.3 (3) 直接访问(假设矩阵数据按4字节行对齐):5.2.4 (4) 直接访问(当数据的行对齐可能存在间隙时 possible alignment gaps):5.2.5 (5) 对于初始化后的矩阵进行直接访问:5.3 3、矩阵/向量运算OpenCV 编程简介(矩阵/图像/视频的基本读写操作) - OpenCV China :图像处理,计算机视觉库,Image Processing, Computer Visionhttp://www.opencv.org.cn/index.php/OpenCV_编程简介(矩阵/图像/视频的基本读写操作)[2013/1/18 20:14:57][编辑][编辑][编辑]
[编辑]
5.3.1 (1) 矩阵之间的运算:5.3.2 (2) 矩阵之间的元素级运算:5.3.3 (3) 向量乘积:5.3.4 (4) 单一矩阵的运算:5.3.5 (5) 非齐次线性方程求解:5.3.6 (6) 特征值与特征向量 (矩阵为方阵):6 六、视频处理6.1 1、从视频流中捕捉一帧画面6.1.1 (1) OpenCV 支持从摄像头或视频文件(AVI格式)中捕捉帧画面.6.1.2 (2) 初始化一个摄像头捕捉器:6.1.3 (3) 初始化一个视频文件捕捉器:6.1.4 (4) 捕捉一帧画面:6.1.5 (5) 释放视频流捕捉器:6.2 2、获取/设置视频流信息6.2.1 (1) 获取视频流设备信息:6.2.2 (2) 获取帧图信息:6.2.3 (3) 设置从视频文件抓取的第一帧画面的位置:6.3 3、保存视频文件6.3.1 (1) 初始化视频编写器:6.3.2 (2) 保持视频文件:6.3.3 (3) 释放视频编写器:
一、简介1、OpenCV的特点(1) 总体描述OpenCV是一个基于C/C++语言的开源图像处理函数库其代码都经过优化,可用于实时处理图像具有良好的可移植性可以进行图像/视频载入、保存和采集的常规操作具有低级和高级的应用程序接口(API)提供了面向Intel IPP高效多媒体函数库的接口,可针对你使用的Intel CPU优化代码,提高程序性能(译注:OpenCV2.0版的代码已显着优化,无需IPP来提升性能,故2.0版不再提供IPP接口)
(2) 功能图像数据操作(内存分配与释放,图像复制、设定和转换)Image data manipulation (allocation, release, copying, setting, conversion).
图像/视频的输入输出(支持文件或摄像头的输入,图像/视频文件的输出)Image and video I/O (file and camera based input, image/video file output).
矩阵/向量数据操作及线性代数运算(矩阵乘积、矩阵方程求解、特征值、奇异值分解)Matrix and vector manipulation and linear algebra routines (products, solvers, eigenvalues, SVD).
支持多种动态数据结构(链表、队列、数据集、树、图)Various dynamic data structures (lists, queues, sets, trees, graphs).
基本图像处理(去噪、边缘检测、角点检测、采样与插值、色彩变换、形态学处理、直方图、图像金字塔结构)Basic image processing (filtering, edge detection, corner detection, sampling and interpolation, color conversion,morphological operations, histograms, image pyramids).
结构分析(连通域/分支、轮廓处理、距离转换、图像矩、模板匹配、霍夫变换、多项式逼近、曲线拟合、椭圆拟
opencv 使用手册
opencv 使用手册OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,提供了很多函数,这些函数非常高效地实现了计算机视觉算法。
OpenCV 使用 C/C++ 开发,同时也提供了 Python、Java、MATLAB 等其他语言的接口。
OpenCV 是跨平台的,可以在 Windows、Linux、Mac OS、Android、iOS 等操作系统上运行。
OpenCV 的应用领域非常广泛,包括图像拼接、图像降噪、产品质检、人机交互、人脸识别、动作识别、动作跟踪、无人驾驶等。
OpenCV 还提供了机器学习模块,可以使用正态贝叶斯、K最近邻、支持向量机、决策树、随机森林、人工神经网络等机器学习算法。
要使用 OpenCV,首先需要安装 OpenCV 库。
可以使用 pip 命令安装opencv-python 和 opencv-contrib-python。
安装完成后,可以通过以下命令导入 OpenCV 模块:```pythonimport cv2 as cv```然后可以调用 OpenCV 提供的各种函数来处理图像和视频。
例如,可以使用 `()` 函数读取图像,使用 `()` 函数显示图像,使用 `()` 函数等待用户按键,使用 `()` 函数关闭所有窗口。
以下是一个简单的示例代码,用于读取一张图片并显示出来:```pythonimport cv2 as cv读取图片img = ("./data/")显示图片("image", img)等待用户按键,按下 q 键退出while True:if (1000) & 0xFF == ord("q"):break()```以上是 OpenCV 的基本使用手册,更多详细信息和函数文档可以在OpenCV 官方网站上查看。
opencv使用手册
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它包含了大量的图像处理和计算机视觉算法。
以下是OpenCV的使用手册:1. 安装OpenCV首先需要下载OpenCV的源代码并进行编译,生成动态链接库(DLL)和头文件。
可以从OpenCV 的官方网站下载最新版本的源代码。
2. 使用OpenCV在使用OpenCV之前,需要包含OpenCV的头文件和链接相应的动态链接库。
在C++中,可以使用以下代码包含OpenCV的头文件:#include <opencv2/opencv.hpp>在使用OpenCV时,通常需要创建一个VideoCapture或FileCapture对象来读取图像或视频流,并创建一个Mat对象来存储图像数据。
以下是一个简单的读取图像并显示的例子:#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main(int argc, char** argv){// 打开摄像头VideoCapture cap(0);if (!cap.isOpened()){cout << "Failed to open camera!" << endl;return 1;}// 读取并显示图像Mat img;cap.read(img);imshow("Image", img);// 等待用户按下任意键waitKey(0);// 释放资源cap.release();return 0;}3. 图像处理OpenCV提供了丰富的图像处理函数,包括滤波、边缘检测、形态学操作、特征提取等等。
以下是一个简单的图像滤波例子:#include <opencv2/opencv.hpp>#include <iostream>using namespace cv;using namespace std;int main(int argc, char** argv){// 读取图像Mat img = imread("lena.jpg");if (img.empty()){cout << "Failed to open image file!" << endl;return 1;}// 高斯滤波Mat filtered_img;GaussianBlur(img, filtered_img, Size(7, 7), 0, 0);// 显示结果imshow("Filtered Image", filtered_img);// 等待用户按下任意键waitKey(0);// 释放资源return 0;}4. 视频处理OpenCV还提供了视频处理的功能,包括视频捕获、视频处理、视频输出等等。
opencv学习之Point操作
opencv中Point操作 为了描述图像中的点,opencv中提供了点的模板类,分为2维点模板类Point_和3维点模板类Point3_。Point_通过2维图像平面中的x和y坐标确定点的位置,Point3_通过3维立体图像中的x、y、z坐标确定点的位置。对于点的坐标的类型可以是int、double、float类型,下面是源代码中的定义: typedef Point_ Point2i; typedef Point2i Point; typedef Point_ Point2f; typedef Point_ Point2d; typedef Point3_ Point3i; typedef Point3_ Point3f; typedef Point3_ Point3d; 由上面的定义我们可以发现Point_、Point2i、Point互相等价,所以为了方便我们在定义整型点的时候会直接使用Point。同样,Point_与 Point2f等价,Point_ 与Point2d等价,Point3_与 Point3i等价,Point3_ 与Point3f等价,Point3_与 Point3d等价,这样的定义会方便用户的使用。另外可以转换点的坐标到指定的类型,对于浮点型的点向整型的点进行转换采用的是四舍五入的方法。 实例化一个类也是非常方便的,用法如下(以2D整型坐标点为例): Point point;//创建一个2D点对象 point.x = 10;//初始化x坐标值 point.y = 8;//初始化y坐标值 或者Point point = Point(10, 8); 这些点的类可以实现运算操作(三维点还支持向量运算和比较运算): pt1 = pt2 + pt3; pt1 = pt2 - pt3; pt1 = pt2 * a; pt1 = a * pt2; pt1 += pt2; pt1 -= pt2; pt1 *= a; double value = norm(pt); // L2 normpt1 == pt2; pt1 != pt2; 下面是示例代码: Point2f a(0.3f, 0.f), b(0.f, 0.4f); Point pt = (a + b)*10.f;//浮点型坐标可以直接与整型坐标进行赋值操作 cout << pt.x <<", "<< pt.y << endl;
在MFC中使用OpenCV教程
典型例图 ExampleL.bmp、 ExampleQ.bmp
简要说明 仅适用于单连通区域, 不能处理多连通区域与孔边界
ExampleC.bmp、
适用各类二值图像,使用范围较宽
SteelBar.bmp、pic3.png 图像反相后也可进行处理,得到不同结果
ExampleD.bmp
为灰值形态学运算,波谷检测又称黑顶帽变换
三、用 DirectShow 编制的视频采集程序 采用 DirectShow 实现视频采集,其优点是支持高分辨率图像采集,最高分辨率由所用的摄像头决定, 如罗技 130 万像素 USB 摄像头 C300 最高分辨率可达 1280*1024,在 MPEG 模式下采集速度为每秒 15 帧。 使用时 CPU 的时间占用率在 15~30%之间。 通过多图像平均可以采集得到质量不错的图像,经过 4 幅图像平均采集所得图像的信噪比可提高一倍。 由于需要连续采集多帧图像,约需 0.25 秒,故适宜采集静态或缓慢移动对象的图像。 视频采集功能调用 OpenCV China 网站下载的软件 camerads 中的函数实现。
主要内容
下面列出 stdafx.h 尾部集中的几个头文件,程序结构由此可见一斑。
#include "CVMFC.h"
// 窗口管理
#include "cv.h" #include "highgui.h"
// OpenCV 头文件
#include "CameraDS.h" #include "CVDSCap.h"
图像反相后处理与另一方法直接处理等价
lena.jpg、fruits.jpg lena.jpg、fruits.jpg
【python】opencv教程CV2模块——简单画图
【python】opencv教程CV2模块——简单画图opencv教程CV2模块系列——简单画图import numpy as npimport cv2# 创建⼀个宽512⾼512的⿊⾊画布,RGB(0,0,0)即⿊⾊img=np.zeros((512,512,3),np.uint8)# 画直线,图⽚对象,起始坐标(x轴,y轴),结束坐标,颜⾊,宽度cv2.line(img,(0,0),(311,511),(255,0,0),10)# 画矩形,图⽚对象,左上⾓坐标,右下⾓坐标,颜⾊,宽度cv2.rectangle(img,(30,166),(130,266),(0,255,0),3)# 画圆形,图⽚对象,中⼼点坐标,半径⼤⼩,颜⾊,宽度cv2.circle(img,(222,222),50,(255.111,111),-1)# 画椭圆形,图⽚对象,中⼼点坐标,长短轴,顺时针旋转度数,开始⾓度(右长轴表0度,上短轴表270度),颜⾊,宽度cv2.ellipse(img,(333,333),(50,20),0,0,150,(255,222,222),-1)# 画多边形,指定各个点坐标,array必须是int32类型pts=np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)# -1表⽰该纬度靠后⾯的纬度⾃动计算出来,实际上是4pts = pts.reshape((-1,1,2,))# print(pts)# 画多条线,False表不闭合,True表⽰闭合,闭合即多边形cv2.polylines(img,[pts],True,(255,255,0),5)#写字,字体选择font=cv2.FONT_HERSHEY_SCRIPT_COMPLEX# 图⽚对象,要写的内容,左边距,字的底部到画布上端的距离,字体,⼤⼩,颜⾊,粗细cv2.putText(img,"OpenCV",(10,400),font,3.5,(255,255,255),2)a=cv2.imwrite("./out/picture.jpg",img)cv2.imshow("picture",img)cv2.waitKey(0)cv2.destroyAllWindows()。
opencv 2 计算机视觉编程手册
opencv 2 计算机视觉编程手册摘要:1.OpenCV 简介2.OpenCV2 计算机视觉编程手册的内容3.手册的特点和适用对象4.手册的内容安排5.案例与实践正文:OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,用于开发各种计算机视觉和机器视觉应用程序。
它包含了大量的图像处理、分割和识别等算法,适用于各种场景。
对于那些想要学习OpenCV 的人来说,《OpenCV2 计算机视觉编程手册》是一个很好的资源。
《OpenCV2 计算机视觉编程手册》以案例的形式介绍OpenCV2.x 的新特性和C++新接口。
手册内容涵盖了OpenCV 的核心功能,如底层数据结构和算法函数,以及图像读写、用户界面操作等。
手册的特点在于很好地平衡了基础知识与进阶内容,要求读者具有基础的C++知识。
因此,该手册既适合想要学习计算机视觉的C++初学者,也适合专业的软件开发人员。
手册的内容安排如下:首先,介绍OpenCV 的基本概念和安装方法;然后,分别讲解OpenCV 的各个模块,如core、highgui、features2d、calib3d 和video 等;最后,通过实际案例和练习,帮助读者巩固所学知识。
通过学习《OpenCV2 计算机视觉编程手册》,读者可以掌握OpenCV 的基本用法和进阶技巧。
此外,手册还提供了最佳实践和建议,以便读者能够确定如何在开发环境中设置OpenCV 以及如何使用各种算法。
总之,《OpenCV2 计算机视觉编程手册》是一本实用性很强的教程,既可以作为高等院校计算机视觉课程的辅助教材,也可以作为图像处理和计算机视觉领域研究人员的参考手册。
OpenCV使用说明
目录1引言 (1)2 OpenCV的结构 (1)3 VC 6下的安装与配置 (2)3.1安装OpenCV(略) (2)3.2 配置Windows环境变量 (2)4 VC++的环境设置 (4)5如何创建一个项目来开始OpenCV 编程 (5)6如何读入和显示图像 (7)7如何访问图像像素 (10)8如何访问矩阵元素 (11)9如何在OpenCV 中处理我自己的数据 (12)10. 例程 (13)10.1 Kalman滤波进行旋转点的跟踪 (13)10.2 背景建模 (16)10.3 视频I/O (21)10.4 矩阵操作 (23)10.5 轮廓检测 (27)1引言OpenCV(Intel® Open Source Computer Vision Library) 是Intel 公司面向应用程序开发者开发的计算机视觉库,其中包含大量的函数用来处理计算机视觉领域中常见的问题,例如运动分析和跟踪、人脸识别、3D 重建和目标识别等。
目前该函数库的最新版本是OpenCV 4.0,可以通过访问/projects/opencvlibrary免费获得OpenCV 库以及相关的资料。
另外,还可以通过访问/group/OpenCV,对于OpenCV使用中的一些问题与经验进行讨论。
相对于其它图像函数库,OpenCV是一种源码开放式的函数库,开发者可以自由地调用函数库中的相关处理函数。
OpenCV中包含500多个处理函数,具备强大的图像和矩阵运算能力,可以大大减少开发者的编程工作量,有效提高开发效率和程序运行的可靠性。
另外,由于OpenCV具有很好的移植性,开发者可以根据需要在MS-Windows和Linux两种平台进行开发,速度快,使用方便。
2 OpenCV的结构目前OpenCV包含如下几个部分:Cxcore: 一些基本函数(各种数据类型的基本运算等)Cv: 图像处理和计算机视觉功能(图像处理,结构分析,运动分析,物体跟踪,模式识别,摄像定标)Highgui: 用户交互部分(GUI, 图像视频I/O, 系统调用函数)Cvaux: 一些实验性的函数(ViewMorphing, 三维跟踪,PCA,HMM)另外还有cvcam, 不过linux版本中已经抛弃。
OpenCV教程2(python)
OpenCV教程2(python)OpenCV教程2(python)上节我们简单的介绍了⼀下OpenCV操作图⽚,这节我们讲⼀下视频的有关操作。
视频和图⽚从某种程度上来讲其实是同⼀种东西,基本上所有的视频都是由⼀帧⼀帧图⽚组成的,操作视频其实就是对每⼀帧的图⽚进⾏操作。
OpenCV基础操作-视频1.获取视频和播放视频还是先上代码,再去解释代码,这样便于学习。
import numpy as npimport cv2#读取摄像头,若想读取视频,参数0换成视频的路径+⽂件名cap = cv2.VideoCapture(0)while(True):ret, frame = cap.read()cv2.imshow('frame',frame)if cv2.waitKey(1)== ord('q'):breakcap.release()cv2.destroyAllWindows()对照前⾯操作图像的代码,是不是发现很像。
cv2.VideoCapture()创建了⼀个VideoCapture对象,⽤来捕获视频。
它的参数可以是设备的索引号,或是⼀个视频⽂件。
设备的索引号是指定要⽤的摄像头,⼀般内置的摄像头的索引号为0,可以换成1或其他的数字调⽤其他的摄像头。
因为视频是⼀帧⼀帧获取的,所以接下来是个⼀个while True循环,循环读取每⼀帧。
ret, frame = cap.read()读取每⼀帧,其中ret表⽰⼀个True/False的布尔值,⽤来表⽰是否读取成功。
frame表⽰读取到的np.array类型的每⼀帧,就是图⽚。
cv2.imshow('frame',frame)将每⼀帧显⽰在⼀个叫frame的窗⼝上。
这⾥解释⼀下,为什么这样显⽰在窗⼝上会产⽣视频的效果。
前⾯操作图⽚的时候,我们提到过,显⽰多幅图像的时候,若cv2.imshow()指定相同的窗⼝名,这样后⾯显⽰的图⽚会覆盖前⾯的图⽚,⽽产⽣⼀个窗⼝。
OpenCV教程
Mat - 基本图像容器目的从真实世界中获取数字图像有很多方法,比如数码相机、扫描仪、CT或者磁共振成像。
无论哪种方法,我们(人类)看到的是图像,而让数字设备来“看“的时候,则是在记录图像中的每一个点的数值。
比如上面的图像,在标出的镜子区域中你见到的只是一个矩阵,该矩阵包含了所有像素点的强度值。
如何获取并存储这些像素值由我们的需求而定,最终在计算机世界里所有图像都可以简化为数值矩以及矩阵信息。
作为一个计算机视觉库,OpenCV其主要目的就是通过处理和操作这些信息,来获取更高级的信息。
因此,OpenCV如何存储并操作图像是你首先要学习的。
Mat在2001年刚刚出现的时候,OpenCV基于C语言接口而建。
为了在内存(memory)中存放图像,当时采用名为IplImage的C语言结构体,时至今日这仍出现在大多数的旧版教程和教学材料。
但这种方法必须接受C语言所有的不足,这其中最大的不足要数手动内存管理,其依据是用户要为开辟和销毁内存负责。
虽然对于小型的程序来说手动管理内存不是问题,但一旦代码开始变得越来越庞大,你需要越来越多地纠缠于这个问题,而不是着力解决你的开发目标。
幸运的是,C++出现了,并且带来类的概念,这给用户带来另外一个选择:自动的内存管理(不严谨地说)。
这是一个好消息,如果C++完全兼容C的话,这个变化不会带来兼容性问题。
为此,OpenCV在2.0版本中引入了一个新的C++接口,利用自动内存管理给出了解决问题的新方法。
使用这个方法,你不需要纠结在管理内存上,而且你的代码会变得简洁(少写多得)。
但C++接口唯一的不足是当前许多嵌入式开发系统只支持C语言。
所以,当目标不是这种开发平台时,没有必要使用旧方法(除非你是自找麻烦的受虐狂码农)。
关于Mat,首先要知道的是你不必再手动地(1)为其开辟空间(2)在不需要时立即将空间释放。
但手动地做还是可以的:大多数OpenCV函数仍会手动地为输出数据开辟空间。
【OpenCV入门教程之十四】OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑
本系列文章由@浅墨_毛星云出品,转载请注明出处。
文章链接: /poem_qianmo/article/details/26977557作者:毛星云(浅墨)微博:/u/1723155442知乎:/people/mao-xing-yun邮箱:happylifemxy@写作当前博文时配套使用的OpenCV版本: 2.4.9本篇文章中,我们一起探讨了OpenCV中霍夫变换相关的知识点,以及了解了OpenCV中实现霍夫线变换的HoughLines、HoughLinesP函数的使用方法,实现霍夫圆变换的HoughCircles函数的使用方法。
此博文一共有四个配套的简短的示例程序,其详细注释过的代码都在文中贴出,且文章最后提供了综合示例程序的下载。
先尝鲜一下其中一个示例程序的运行截图:一、引言在图像处理和计算机视觉领域中,如何从当前的图像中提取所需要的特征信息是图像识别的关键所在。
在许多应用场合中需要快速准确地检测出直线或者圆。
其中一种非常有效的解决问题的方法是霍夫(Hough)变换,其为图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。
最基本的霍夫变换是从黑白图像中检测直线(线段)。
这篇文章就将介绍OpenCV中霍夫变换的使用方法和相关知识。
二、霍夫变换概述霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果。
霍夫变换于1962年由PaulHough首次提出,最初的Hough变换是设计用来检测直线和曲线,起初的方法要求知道物体边界线的解析方程,但不需要有关区域位置的先验知识。
这种方法的一个突出优点是分割结果的Robustness,即对数据的不完全或噪声不是非常敏感。
然而,要获得描述边界的解析表达常常是不可能的。
后于1972年由Richard Duda & Peter Hart推广使用,经典霍夫变换用来检测图像中的直线,后来霍夫变换扩展到任意形状物体的识别,多为圆和椭圆。
