OpenCV图像处理函数详解

需积分: 14 1 下载量 194 浏览量 更新于2024-09-11 收藏 57KB DOC 举报
"OpenCV库函数是图像处理和图像识别领域的核心工具,它提供了一系列功能强大的函数,使得开发者能够高效地处理和分析图像与视频。本文将简要介绍一些常用的OpenCV函数及其用途。 1、cvLoadImage:该函数用于从磁盘加载图像文件到内存中,可以指定颜色模式(如灰度或彩色)。 2、cvNamedWindow:创建一个指定名称的窗口,用于后续的图像显示。 3、cvShowImage:在创建的窗口中显示图像,是图像展示的关键函数。 4、cvWaitKey:程序暂停并等待用户按下键盘上的键,常用于交互式应用中。 5、cvReleaseImage:释放图像数据占用的内存,防止内存泄漏。 6、cvDestroyWindow:关闭指定的窗口,释放相关资源。 7、cvCreateFileCapture:打开一个视频文件,为读取视频帧做准备。 8、cvQueryFrame:从打开的视频文件中获取下一帧,并将其加载到内存。 9、cvReleaseCapture:释放由CvCapture结构体占用的内存,关闭视频源。 10、cvCreateTrackbar:创建一个滑动条,用于交互式调整图像处理参数。 11、cvSetCaptureProperty和cvGetCaptureProperty:分别用于设置和查询CvCapture对象的属性,如视频帧率、分辨率等。 12、cvGetSize:返回图像的尺寸信息,包括宽度和高度。 13、cvSmooth:对图像进行平滑处理,如高斯滤波,减少噪声。 14、cvPyrDown:实现图像金字塔下采样,通常用于图像缩放和快速模糊。 15、cvCanny:执行Canny边缘检测,用于找出图像中的边缘。 16、cvCreateCameraCapture:连接到摄像头,开始实时捕获视频流。 17、cvCreateVideoWriter:创建一个视频写入器,用于将处理后的图像序列写入视频文件。 18、cvWriteFrame:将一帧图像写入到视频文件中。 19、cvReleaseVideoWriter:释放由CvVideoWriter结构体占用的内存,结束视频写入。 20、矩阵操作函数:例如CV_MAT_ELEM用于访问矩阵中的元素,cvAbs计算数组元素的绝对值,cvAbsDiff和cvAbsDiffS计算数组间差值的绝对值,cvAdd、cvAddS和cvAddWeighted进行数组的加法运算,cvAvg和cvAvgSdv计算平均值和标准差,cvCalcCovarMatrix用于计算协方差矩阵。 这些OpenCV函数是进行图像处理和计算机视觉任务的基础,涵盖了图像读取、显示、处理、分析以及视频的输入输出等多个方面。通过熟练掌握这些函数,开发者可以构建复杂的图像处理和识别系统。"
2016-10-11 上传
OpenCV小项目 这是一个个人在使用OpenCV过程中写的一些小项目,以及一些非常有用的OpenCV代码,有些代码是对某论文中的部分实现。 注意:代码是在Xcode里写的,如果要在win下测试,遇到问题自己修改。 opencv-rootsift-py 用python和OpenCV写的一个rootsift实现,其中RootSIFT部分的代码参照Implementing RootSIFT in Python and OpenCV这篇文章所写,通过这个你可以了解Three things everyone should know to improve object retrieval这篇文章中RootSIFT是怎么实现的。 sift(asift)-match-with-ransac-cpp 用C++和OpenCV写的一个图像匹配实现,里面包含了采用1NN匹配可视化、1NN匹配后经RANSAC剔除错配点可视化、1NN/2NN<0.8匹配可视化、1NN/2NN<0.8经 RANSAC剔除错配点可视化四个过程,其中1NN/2NN<0.8匹配过程是Lowe的Raw feature match,具体可以阅读Lowe的Distinctive image features from scale-invariant keypoints这篇文章。这个对图像检索重排非常有用。另外里面还有用OpenCV写的ASIFT,这部分来源于OPENCV ASIFT C++ IMPLEMENTATION,ASIFT还可以到官网页面下载,ASIFT提取的关键点 比SIFT要多得多,速度非常慢,不推荐在对要求实时性的应用中使用。 更多详细的分析可以阅读博文SIFT(ASIFT) Matching with RANSAC。 有用链接 OpenCV3.0文档 // 测试sparse unsigned int centersNum = 10; vector descrNums; descrNums.push_back(8); descrNums.push_back(12); //unsigned int T[] = {1, 2, 1, 3, 2, 5, 4, 3, 10, 5; 4, 2, 6, 5, 2, 5, 4, 6, 2, 4}; unsigned int T[] = {1, 2, 1, 3, 2, 5, 4, 3, 10, 5, 4, 2, 6, 5, 2, 5, 4, 6, 2, 4}; sp_mat Hist(descrNums.size(), centersNum); static long int count = 0; for (int i = 0; i < descrNums.size(); i++){ unsigned int* desrcElementsTmp = new unsigned int[descrNums[i]]; memcpy(desrcElementsTmp, T + count, descrNums[i] * sizeof(T[0])); //cout << desrcElementsTmp[0] << '\t' << desrcElementsTmp[1] << '\t' << desrcElementsTmp[2] << '\t' << desrcElementsTmp[3] << '\t' << desrcElementsTmp[4] << '\t' <<endl; //cout << desrcElementsTmp[5] << '\t' << desrcElementsTmp[6] << '\t' << desrcElementsTmp[7] << '\t' << desrcElementsTmp[8] << '\t' << desrcElementsTmp[9] << '\t' << desrcElementsTmp[10] << '\t' <<endl; //cout << endl; sp_mat X(1, centersNum); X.zeros(); for (int j = 0; j < descrNums[i]; j++){ X(0, desrcElementsTmp[j]-1) += 1; } X.print("X:"); X = X/norm(X, 2); Hist.row(i) = X; count = count + descrNums[i]; delete desrcElementsTmp; } //Hist.print("Hist:");