opencv中文手册精编版
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训练图像集中文版资料

级联分类器训练引言级联分类器的工作主要包括两个阶段:训练和检测。
检测阶段被描述在一个常规的OpenCV 文件的objdetect 模块的文档里。
文档介绍了级联分类器的一些基本信息。
目前的指南描述了如何训练级联分类器:一个训练数据集和运行训练应用程序的准备。
重要的笔记在OpenCV里有两个应用程序可以用来训练级联分类器:opencv_haartraining和opencv_traincascade。
opencv_traincascade是一个较新的版本,用C++按照OpenCV 2.x API 的标准编写。
但这两个应用程序之间的主要区别是,opencv_traincascade同时支持Haar [Viola2001] 和LBP [Liao2007](局部二值模式)的特征。
相比于Haar特征,LBP特征是整数,所以用LBP训练和检测比用Haar特征快好几倍。
至于LBP和Haar的检测质量取决于训练:首先是训练数据集的品质还有训练参数。
训练一个和基于Haar的分类有几乎相同的质量的基于LBP的分类是有可能的。
opencv_traincascade和opencv_haartraining以不同的文件格式存储训练好的分类器。
值得注意的是,较新的级联检测接口(见objdetect模块的级联分类器类)两种格式都支持。
opencv_traincascade可以用旧格式保存(输出)训练好的级联。
但opencv_traincascade和opencv_haartraining无法在中断后以另一种格式加载(输入)一个分类器来进一步训练。
注意,opencv_traincascade应用程序可以使用TBB实现多线程。
在多核模式下使用,OpenCV 必须要用TBB来构建。
并且这有一些和训练相关的辅助工具。
·opencv_createsamples是用来准备正训练数据集和测试样本集的。
opencv_createsamples产生一个opencv_haartraining和opencv_traincascade都支持的格式的正样本数据集。
OpenCv参考手册-CvImage类参考手册

OpenCv参考手册-CvImage类参考手册CvImage类参考手册Wikipedia,自由的百科全书CvImage使用前需要包含 cv.h 头文件#include目录1 CvImage::CvImage2 CvImage::~CvImage3 CvImage::clone4 CvImage::create5 CvImage::release6 CvImage::clear7 CvImage::attach8 CvImage::detach9 CvImage::load10 CvImage::read11 CvImage::save12 CvImage::write13 CvImage::show14 CvImage::is_valid15 CvImage::width16 CvImage::height17 CvImage::size18 CvImage::roi_size19 CvImage::roi20 CvImage::coi21 CvImage::set_roi22 CvImage::reset_roi23 CvImage::set_coi24 CvImage::depth25 CvImage::channels26 CvImage::pix_size27 CvImage::data28 CvImage::step29 CvImage::origin30 CvImage::roi_row31 运算符重载32 编写者[编辑]CvImage::CvImagebool CvImage::CvImage();bool CvImage::CvImage(CvSize size, int depth, int channels);bool CvImage::CvImage(IplImage* pIplImg);bool CvImage::CvImage(const CvImage& cvImg);bool CvImage::CvImage(const char* filename, const char* imgname=0, int color=-1);bool CvImage::CvImage(CvFileStorage* fs, const char* mapname, const char* imgname);bool CvImage::CvImage(CvFileStorage* fs, const char* seqname, int idx);默认构造函数,创建一个图像。
OpenCV中文入门

Open Source Computer Vision Library by Gary R. Bradski, Vadim Pisarevsky, and Jean-Yves Bouguet, Springer, 1st ed. (June, 2006).视频处理例程(位于<opencv-root>/samples/c/目录中):色彩跟踪: camshiftdemo点跟踪: lkdemo动作分割: motempl边缘检测: laplace图像处理例程(位于<opencv-root>/samples/c/目录中):边缘检测: edge分割: pyramid_segmentation形态: morphology直方图: demhist距离转换: distrans椭圆拟合 fitellipseOpenCV 命名约定函数命名:cvActionTarget[Mod](...)Action = 核心功能(例如设定set, 创建create)Target = 操作目标(例如轮廓contour, 多边形polygon)[Mod] = 可选修饰词(例如说明参数类型)矩阵数据类型:CV_<bit_depth>(S|U|F)C<number_of_channels>S = 带符号整数U = 无符号整数F = 浮点数例: CV_8UC1 表示一个8位无符号单通道矩阵,CV_32FC2 表示一个32位浮点双通道矩阵.图像数据类型:IPL_DEPTH_<bit_depth>(S|U|F)例: IPL_DEPTH_8U 表示一个8位无符号图像.IPL_DEPTH_32F 表示一个32位浮点数图像.头文件:#include <>#include <>#include <>#include <> C程序实例关闭窗口:cvDestroyWindow("win1");改变窗口尺寸:cvResizeWindow("win1",100,100);直接获取键盘操作:key=cvWaitKey(10); .break;case 'i':...break;}}处理滚动条事件:定义滚动条handler:void trackbarHandler(int pos){printf("Trackbar ",pos);}注册handler:int trackbarVal=25;int maxVal=100;cvCreateTrackbar("bar1", "win1", &trackbarVal ,maxVal , trackbarHandler); 获取滚动条当前位置:int pos = cvGetTrackbarPos("bar1","win1");设定滚动条位置:cvSetTrackbarPos("bar1", "win1", 25);OpenCV基础数据结构图像数据结构IPL 图像:IplImage|-- int nChannels; 若不为NULL则表示需要处理的图像| |-- char *imageDataOrigin;它不是C++的构造函数.其他数据结构点:CvPoint p = cvPoint(int x, int y);CvPoint2D32f p = cvPoint2D32f(float x, float y);CvPoint3D32f p = cvPoint3D32f(float x, float y, float z);例如:=;=;长方形尺寸:CvSize r = cvSize(int width, int height);CvSize2D32f r = cvSize2D32f(float width, float height);带偏移量的长方形尺寸:CvRect r = cvRect(int x, int y, int width, int height);图像处理分配与释放图像空间分配图像空间:IplImage* cvCreateImage(CvSize size, int depth, int channels);size: cvSize(width,height);depth: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U,IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F, IPL_DEPTH_64Fchannels: 1, 2, 3 or 4.注意数据为交叉存取.彩色图像的数据编排为b0 g0 r0 b1 g1 r1 ...举例:设定/获取兴趣通道:void cvSetImageCOI(IplImage* image, int coi); 读取存储图像从文件中载入图像:IplImage* img=0;img=cvLoadImage(fileName);if(!img) printf("Could not load image file: %s\n",fileName);Supported image formats: BMP, DIB, JPEG, JPG, JPE, PNG, PBM, PGM, PPM,SR, RAS, TIFF, TIF载入图像默认转为3通道彩色图像. 如果不是,则需加flag:img=cvLoadImage(fileName,flag);flag: >0 载入图像转为三通道彩色图像=0 载入图像转为单通道灰度图像<0 不转换载入图像(通道数与图像文件相同).图像存储为图像文件:if(!cvSaveImage(outFileName,img)) printf("Could not save: %s\n",outFileName);输入文件格式由文件扩展名决定.存取图像元素假设需要读取在i行j列像点的第k通道. 其中, 行数i的范围为[0, height-1], 列数j的范围为[0, width-1], 通道k的范围为[0, nchannels-1].间接存取: (比较通用, 但效率低, 可读取任一类型图像数据)对单通道字节图像:IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);CvScalar s;s=cvGet2D(img,i,j); = 111;imgA[i][j].g = 111;imgA[i][j].r = 111;多通道浮点图像:IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3);RgbImageFloat imgA(img);imgA[i][j].b = 111;imgA[i][j].g = 111;imgA[i][j].r = 111;图像转换转为灰度或彩色字节图像:cvConvertImage(src, dst, flags=0);src = float/byte grayscale/color imagedst = byte grayscale/color imageflags = CV_CVTIMG_FLIP (flip vertically)CV_CVTIMG_SW AP_RB (swap the R and B channels)转换彩色图像为灰度图像:使用OpenCV转换函数:cvCvtColor(cimg,gimg,CV_BGR2GRAY); * +cimgA[i][j].g* +cimgA[i][j].r*;颜色空间转换:cvCvtColor(src,dst,code); CV_BGR2GRAY, CV_BGR2HSV, CV_BGR2Lab绘图命令画长方体:许多其他方法提供了更加方便的C++接口,其效率与OpenCV一样.OpenCV将向量作为1维矩阵处理.矩阵按行存储,每行有4字节的校整.分配矩阵空间:CvMat* cvCreateMat(int rows, int cols, int type);type: 矩阵元素类型. 格式为CV_<bit_depth>(S|U|F)C<number_of_channels>.例如: CV_8UC1 表示8位无符号单通道矩阵, CV_32SC2表示32位有符号双通道矩阵. 例程:CvMat* M = cvCreateMat(4,4,CV_32FC1);释放矩阵空间:CvMat* M = cvCreateMat(4,4,CV_32FC1);cvReleaseMat(&M);复制矩阵:CvMat* M1 = cvCreateMat(4,4,CV_32FC1);CvMat* M2;M2=cvCloneMat(M1);初始化矩阵:double a[] = { 1, 2, 3, 4,5, 6, 7, 8,9, 10, 11, 12 };CvMat Ma=cvMat(3, 4, CV_64FC1, a);另一种方法:CvMat Ma;cvInitMatHeader(&Ma, 3, 4, CV_64FC1, a);初始化矩阵为单位阵:CvMat* M = cvCreateMat(4,4,CV_32FC1);cvSetIdentity(M);间接存取矩阵元素:cvmSet(M,i,j,; Mb -> MccvDiv(Ma, Mb, Mc); Mb -> MccvAddS(Ma, cvScalar, Mc); Vb -> rescvCrossProduct(&Va, &Vb, &Vc);单矩阵操作:CvMat *Ma, *Mb;cvTranspose(Ma, Mb);视频序列操作从视频序列中抓取一帧OpenCV支持从摄像头或视频文件(A VI)中抓取图像.从摄像头获取初始化:CvCapture* capture = cvCaptureFromCAM(0); 在抓取动作都结束后再恢复帧图像.释放抓取源:cvReleaseCapture(&capture);注意由设备抓取的图像是由capture函数自动分配和释放的. 不要试图自己释放它.获取/设定帧信息获取设备特性:cvQueryFrame(capture); 用摄像头时不对,奇怪!!!.获取帧信息:float posMsec = cvGetCaptureProperty(capture, CV_CAP_PROP_POS_MSEC);int posFrames = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES);float posRatio = cvGetCaptureProperty(capture, CV_CAP_PROP_POS_A VI_RATIO);获取所抓取帧在视频序列中的位置, 从首帧开始按[毫秒]算. 或者从首帧开始从0标号, 获取所抓取帧的标号. 或者取相对位置,首帧为0,末帧为1, 只对视频文件有效.设定所抓取的第一帧标号:不过似乎也不成功!!!存储视频文件初始化视频存储器:CvVideoWriter *writer = 0;int isColor = 1;int fps = 25;存储视频文件:IplImage* img = 0;int nFrames = 50;for(i=0;i<nFrames;i++){cvGrabFrame(capture);释放视频存储器:cvReleaseVideoWriter(&writer);。
OpenCV 编程简介教程(中文版),Image Processing, C

Open Source Computer Vision Libraryintro.html#SECTION00040000000000000000/chenyusiyuan/archive/2010/01/26/5259060.aspx2.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、矩阵/向量运算[编辑][编辑][编辑][编辑]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 优化代码,提高程序性能(译注:OpenCV 2.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).结构分析(连通域/分支、轮廓处理、距离转换、图像矩、模板匹配、霍夫变换、多项式逼近、曲线拟合、椭圆拟[编辑][编辑][编辑][编辑][编辑][编辑]合、狄劳尼三角化)Structural analysis (connected components, contour processing, distance transform, various moments, templatematching, Hough transform, polygonal approximation, line fitting, ellipse fitting, Delaunay triangulation).摄像头定标(寻找和跟踪定标模式、参数定标、基本矩阵估计、单应矩阵估计、立体视觉匹配)Camera calibration (finding and tracking calibration patterns, calibration, fundamental matrix estimation,homography estimation, stereo correspondence).运动分析(光流、动作分割、目标跟踪)Motion analysis (optical flow, motion segmentation, tracking).目标识别(特征方法、HMM 模型)Object recognition (eigen-methods, HMM).基本的GUI (显示图像/视频、键盘/鼠标操作、滑动条)Basic GUI (display image/video, keyboard and mouse handling, scroll-bars).图像标注(直线、曲线、多边形、文本标注)Image labeling (line, conic, polygon, text drawing)(3) OpenCV模块cv –核心函数库cvaux – 辅助函数库cxcore –数据结构与线性代数库highgui – GUI 函数库ml – 机器学习函数库2、有用的学习资源(1)参考手册:<opencv-root>/docs/index.htm (译注:在你的OpenCV 安装目录<opencv-root>内)(2)网络资源:官方网站: /technology/computing/opencv/软件下载: /projects/opencvlibrary/(3) 书籍:Open Source Computer Vision Libraryby Gary R. Bradski, Vadim Pisarevsky, and Jean-Yves Bouguet, Springer, 1st ed. (June, 2006). chenyusiyuan: 补充以下书籍Learning OpenCV - Computer Vision with the OpenCV Libraryby Gary Bradski & Adrian Kaehler, O'Reilly Media, 1 st ed. (September, 2008).OpenCV 教程——基础篇作者:刘瑞祯 于仕琪,北京航空航天大学出版社,出版日期:200706(4)视频处理例程(在<opencv-root>/samples/c/):颜色跟踪: camshiftdemo 点跟踪: lkdemo 动作分割: motempl。
学习opencv中文版教程——第二章

学习opencv中⽂版教程——第⼆章学习opencv中⽂版教程——第⼆章所有案例,跑起来~~~然⽽并没有都跑起来。
我只把我能跑的都尽量跑了,毕竟看书还是很⽣硬,能运⾏能出结果,才⽐较好。
越着急,⼼越慌,越是着急,越要慢,越是陌⽣,越不能盲进。
否则更容易⾛错路。
看了⼀些东西发现都挺坑的,然后看了看书,发现书上写的也。
所以就把看书笔记,和跑动例程都来做⼀个整理。
关于如何配置,是重中之重然后是看书⼜看回到了这本学习opencv的⽩⾊装帧书上。
初试⽜⼑——显⽰图像例2-1#include "highgui.h"//1、int main(int argc,char **argv){ //2、IplImage* img = cvLoadImage(argv[1]);//3、cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE);//4、cvShowImage("Example1", img);//5、cvWaitKey(0);//6、cvReleaseImage(&img);//7、cvDestroyWindow("Example1");//8、}1、⾼级GUI图像⽤户界⾯,包含媒体的输⼊输出,视频捕捉,图像视频的编解码,图形交互界⾯的接⼝。
GUI:Graphical User Interface 图形⽤户界⾯(接⼝)3、如果能明⽩主函数的参数情况,那么在命令⾏⾥⾯键⼊:opencv教程——显⽰图像 1.png 。
其中第⼀个参数要想展⽰的话是:argv[0]如果cout<<argv[0]将会是“opencv教程——显⽰图像”,所以argv[1] 是 “1.png”所以下⾯⼀同也给了⼀个⽬录结构,为了能在当前⽬录⾥⾯找到1.png这张图⽚。
如果找到的话,就加载这张图⽚,并且把图像信息赋给img。
Opencv自制中文帮助文档

/*********void cvShowImage(const char* name, const CvArr* image)*******************
*功能:显示图片
*参数:
:窗口的名字
2.image:需要显示的图片
*返回:
*说明:
*****************************************************************************/
cout << element_21_Read << endl;
//这里推荐使用cvPtr*D函数族来读取元素
CvMat *mat_2 = cvCreateMat(5, 3, CV_8UC1);
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 3; j++)
如果用户没有按下任何按键,delay毫秒后,程序继续运行。
2.delay<=0:程序将一直等待,直到用户触发一个按键,程序继续运行
*返回:用户按键
*说明:
cvWaitKey还可以检测用户输入了什么按键
hile(1)
{
key=cvWaitKey(10);
if(key==27) break;
cvNamedWindow("RoadDetector", 1);
cvShowImage("RoadDetector", img);
cvWaitKey(0);
cvReleaseImage(&img);//释放资源
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录∙ 1 梯度、边缘和角点o 1.1 Sobelo 1.2 Laplaceo 1.3 Cannyo 1.4 PreCornerDetecto 1.5 CornerEigenValsAndVecso 1.6 CornerMinEigenValo 1.7 CornerHarriso 1.8 FindCornerSubPixo 1.9 GoodFeaturesToTrack ∙ 2 采样、插值和几何变换o 2.1 InitLineIteratoro 2.2 SampleLineo 2.3 GetRectSubPixo 2.4 GetQuadrangleSubPixo 2.5 Resizeo 2.6 WarpAffineo 2.7 GetAffineTransformo 2.8 2DRotationMatrixo 2.9 WarpPerspectiveo 2.10 WarpPerspectiveQMatrixo 2.11 GetPerspectiveTransformo 2.12 Remapo 2.13 LogPolar∙ 3 形态学操作o 3.1 CreateStructuringElementExo 3.2 ReleaseStructuringElemento 3.3 Erodeo 3.4 Dilateo 3.5 MorphologyEx∙ 4 滤波器与色彩空间变换o 4.1 Smootho 4.2 Filter2Do 4.3 CopyMakeBordero 4.4 Integralo 4.5 CvtColoro 4.6 Thresholdo 4.7 AdaptiveThreshold∙ 5 金字塔及其应用o 5.1 PyrDowno 5.2 PyrUp∙ 6 连接部件o 6.1 CvConnectedCompo 6.2 FloodFillo 6.3 FindContourso 6.4 StartFindContourso 6.5 FindNextContouro 6.6 SubstituteContouro 6.7 EndFindContourso 6.8 PyrSegmentationo 6.9 PyrMeanShiftFilteringo 6.10 Watershed∙7 图像与轮廓矩o7.1 Momentso7.2 GetSpatialMomento7.3 GetCentralMomento7.4 GetNormalizedCentralMomento7.5 GetHuMoments∙8 特殊图像变换o8.1 HoughLineso8.2 HoughCircleso8.3 DistTransformo8.4 Inpaint∙9 直方图o9.1 CvHistogramo9.2 CreateHisto9.3 SetHistBinRangeso9.4 ReleaseHisto9.5 ClearHisto9.6 MakeHistHeaderForArrayo9.7 QueryHistValue_1Do9.8 GetHistValue_1Do9.9 GetMinMaxHistValueo9.10 NormalizeHisto9.11 ThreshHisto9.12 CompareHisto9.13 CopyHisto9.14 CalcHisto9.15 CalcBackProjecto9.16 CalcBackProjectPatcho9.17 CalcProbDensityo9.18 EqualizeHist∙10 匹配o10.1 MatchTemplateo10.2 MatchShapeso10.3 CalcEMD2梯度、边缘和角点Sobel使用扩展 Sobel 算子计算一阶、二阶、三阶或混合图像差分void cvSobel( const CvArr* src, CvArr* dst, int xorder, int yorder, int aperture_size=3 );src输入图像.dst输出图像.xorderx 方向上的差分阶数yordery 方向上的差分阶数aperture_size扩展 Sobel 核的大小,必须是 1, 3, 5 或 7。
除了尺寸为 1,其它情况下,aperture_size ×aperture_size 可分离内核将用来计算差分。
对 aperture_size=1的情况,使用 3x1 或 1x3 内核(不进行高斯平滑操作)。
这里有一个特殊变量 CV_SCHARR (=-1),对应 3x3 Scharr 滤波器,可以给出比 3x3 Sobel 滤波更精确的结果。
Scharr 滤波器系数是:对 x-方向或矩阵转置后对 y-方向。
函数 cvSobel 通过对图像用相应的内核进行卷积操作来计算图像差分:由于Sobel 算子结合了 Gaussian 平滑和微分,所以,其结果或多或少对噪声有一定的鲁棒性。
通常情况,函数调用采用如下参数 (xorder=1, yorder=0, aperture_size=3) 或 (xorder=0, yorder=1, aperture_size=3) 来计算一阶x- 或 y- 方向的图像差分。
第一种情况对应:核。
第二种对应:或者核的选则依赖于图像原点的定义 (origin 来自 IplImage 结构的定义)。
由于该函数不进行图像尺度变换,所以和输入图像(数组)相比,输出图像(数组)的元素通常具有更大的绝对数值(译者注:即像素的位深)。
为防止溢出,当输入图像是 8 位的,要求输出图像是 16 位的。
当然可以用函数 cvConvertScale 或cvConvertScaleAbs 转换为 8 位的。
除了 8-位图像,函数也接受 32-位浮点数图像。
所有输入和输出图像都必须是单通道的,并且具有相同的图像尺寸或者ROI尺寸。
Laplace计算图像的 Laplacian 变换void cvLaplace( const CvArr* src, CvArr* dst, int aperture_size=3 ); src输入图像.dst输出图像.aperture_size核大小 (与 cvSobel 中定义一样).函数 cvLaplace 计算输入图像的 Laplacian变换,方法是先用 sobel 算子计算二阶 x- 和 y- 差分,再求和:对 aperture_size=1 则给出最快计算结果,相当于对图像采用如下内核做卷积:类似于 cvSobel 函数,该函数也不作图像的尺度变换,所支持的输入、输出图像类型的组合和cvSobel一致。
Canny采用 Canny 算法做边缘检测void cvCanny( const CvArr* image, CvArr* edges, double threshold1,double threshold2, int aperture_size=3 );image单通道输入图像.edges单通道存储边缘的输出图像threshold1第一个阈值threshold2第二个阈值aperture_sizeSobel 算子内核大小 (见 cvSobel).函数 cvCanny 采用 CANNY 算法发现输入图像的边缘而且在输出图像中标识这些边缘。
threshold1和threshold2 当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。
∙注意事项:cvCanny只接受单通道图像作为输入。
∙外部链接:经典的canny自调整阈值算法的一个opencv的实现见在OpenCV中自适应确定canny算法的分割门限PreCornerDetect计算用于角点检测的特征图,void cvPreCornerDetect( const CvArr* image, CvArr* corners, int aperture_size=3 );image输入图像.corners保存候选角点的特征图aperture_sizeSobel 算子的核大小(见cvSobel).函数 cvPreCornerDetect 计算函数其中D表示一阶图像差分,表示二阶图像差分。
角点被认为是函数的局部最大值:// 假设图像格式为浮点数IplImage* corners = cvCloneImage(image);IplImage* dilated_corners = cvCloneImage(image);IplImage* corner_mask = cvCreateImage( cvGetSize(image), 8, 1 ); cvPreCornerDetect( image, corners, 3 );cvDilate( corners, dilated_corners, 0, 1 );cvSubS( corners, dilated_corners, corners );cvCmpS( corners, 0, corner_mask, CV_CMP_GE );cvReleaseImage( &corners );cvReleaseImage( &dilated_corners );CornerEigenValsAndVecs计算图像块的特征值和特征向量,用于角点检测void cvCornerEigenValsAndVecs( const CvArr* image, CvArr* eigenvv,int block_size, int aperture_size=3 ); image输入图像.eigenvv保存结果的数组。
必须比输入图像宽 6 倍。
block_size邻域大小 (见讨论).aperture_sizeSobel 算子的核尺寸(见 cvSobel).对每个象素,函数 cvCornerEigenValsAndVecs 考虑block_size × block_size 大小的邻域 S(p),然后在邻域上计算图像差分的相关矩阵:然后它计算矩阵的特征值和特征向量,并且按如下方式(λ1, λ2, x1, y1, x2, y2)存储这些值到输出图像中,其中λ1, λ2 - M 的特征值,没有排序(x1, y1) - 特征向量,对λ 1(x2, y2) - 特征向量,对λ 2CornerMinEigenVal计算梯度矩阵的最小特征值,用于角点检测void cvCornerMinEigenVal( const CvArr* image,CvArr* eigenval, int block_size, int aperture_size=3 );image输入图像.eigenval保存最小特征值的图像. 与输入图像大小一致block_size邻域大小 (见讨论 cvCornerEigenValsAndVecs).aperture_sizeSobel 算子的核尺寸(见 cvSobel). 当输入图像是浮点数格式时,该参数表示用来计算差分固定的浮点滤波器的个数.函数 cvCornerMinEigenVal 与 cvCornerEigenValsAndVecs 类似,但是它仅仅计算和存储每个象素点差分相关矩阵的最小特征值,即前一个函数的 min(λ1, λ2)CornerHarris哈里斯(Harris)角点检测void cvCornerHarris( const CvArr* image, CvArr* harris_responce,int block_size, int aperture_size=3, double k=0.04 );image输入图像。