基于opencv对图像的预处理
- 格式:docx
- 大小:1.33 MB
- 文档页数:11
基于OpenCV的图像处理实践一、引言随着计算机技术的持续发展,图像处理已经成为了一个重要的领域。
而在图像处理中,OpenCV(开源计算机视觉)的出现是一次重要的突破。
OpenCV作为一款规模宏大并且功能强大的开源图像处理库,其可用于许多不同的应用领域,如计算机视觉、机器学习和图像处理等。
本文旨在介绍OpenCV的基本概念和应用实践。
二、OpenCV的基本概念OpenCV(全称Open Source Computer Vision Library,即开源计算机视觉库)是一个跨平台的计算机视觉库,它以C/C++语言编写。
OpenCV是一个开放源代码的计算机视觉库,拥有非常多的计算机视觉算法实现,包括各种图像处理、拍摄、分析以及基于机器学习的功能等。
OpenCV的主要特点有以下几个方面:1. 跨平台OpenCV库可以同时运行在Windows、Linux、Mac OS X、Android和iOS等各种系统上,开发人员不需要因为平台的变化而写不同的代码,使用OpenCV可以使得跨平台的开发变得十分方便。
2. 灵活易用OpenCV对于图像处理的各个领域都拥有大量的各种算法实现,因此可以很灵活的搭建各种形式的计算机视觉应用。
3. 高效性和准确性OpenCV的各种库都经过了严格的测试和优化,因此在运行效率上和处理准确性上都表现出色。
4. 自由开源OpenCV是完全开源的库,其提供各种开源功能模块。
由于很多开源开发者的积极参与,使得OpenCV的更新速度很快,其支持的算法也越来越多。
三、OpenCV的常见应用1. 图像处理OpenCV最常见的应用领域就是图像处理,它拥有各种人脸识别、图像去噪、边缘检测、图像纠正等处理功能。
这些处理函数可以帮助开发人员对图像进行处理,得到更好的图像质量和更准确的结果。
2. 视频分析除了图像处理,OpenCV还涉及到视频和实时视频分析的领域,包括视觉物体跟踪、视频稳定、帧率控制等等,这些应用可以使得视频分析的效果更加准确和稳定。
opencv原理OpenCV的工作原理基于图像处理、计算机视觉和机器学习的一系列方法和算法。
它的设计目标是提供一个简单、高效、通用的计算机视觉库,使开发者能够快速地开发实时的计算机视觉应用程序。
以下是OpenCV的一些主要原理:1. 图像采集与加载:OpenCV可以从摄像头、视频文件或图像文件中采集图像数据。
它支持多种图像格式,包括JPEG、PNG、BMP等。
2. 图像预处理:在进行进一步处理之前,OpenCV通常需要对图像进行预处理。
这包括调整图像大小、灰度化、去噪、直方图均衡化和边缘检测等。
3. 特征提取:在计算机视觉任务中,特征提取是一个关键步骤。
OpenCV提供了各种方法来检测图像中的特征,如角点、边缘、线条、斑点等。
这些特征可以用于图像分类、对象识别、目标跟踪等任务。
4. 特征匹配:在一些应用中,需要在不同图像中找到相似的特征点或对象。
OpenCV提供了各种特征匹配算法,如基于模板匹配、基于特征描述符的匹配和基于兴趣点的匹配等。
5. 目标检测与跟踪:OpenCV可以通过使用分类器、机器学习算法和深度学习模型来检测和跟踪图像中的目标。
这可以用于人脸检测、行人检测、车辆检测等应用。
6. 图像分割:图像分割是将图像分成多个区域或对象的过程。
OpenCV提供了多种图像分割算法,如基于颜色、纹理、边缘等的分割方法。
7. 图像配准:图像配准是将多个图像对齐以进行比较或融合的过程。
OpenCV提供了多种图像配准方法,如特征点配准、基于几何变换的配准和基于深度学习的配准等。
8. 机器学习和深度学习:OpenCV集成了各种机器学习和深度学习算法,如支持向量机(SVM)、卷积神经网络(CNN)和循环神经网络(RNN)等。
这些算法可以用于图像分类、目标检测、图像生成等任务。
9. 图像的存储与输出:OpenCV可以将处理后的图像数据保存到文件中,支持多种图像格式。
它还可以将图像以各种方式显示出来,如窗口显示、视频流显示和Web显示等。
cv2findcontours 原理CV2 FindContours原理CV2 FindContours是一种计算图像轮廓的函数,它是OpenCV库中的一个重要函数。
该函数可以帮助我们找到图像中的所有轮廓,并将它们存储在一个列表中。
在本文中,我们将深入探讨CV2 FindContours的原理。
CV2 FindContours的原理是基于图像处理中的边缘检测算法。
边缘检测算法是一种用于检测图像中物体边缘的技术。
它可以通过检测图像中像素值的变化来确定物体的边缘。
在CV2 FindContours中,边缘检测算法被用来找到图像中的所有轮廓。
CV2 FindContours的工作原理可以分为以下几个步骤:1. 图像预处理在使用CV2 FindContours之前,我们需要对图像进行预处理。
预处理的目的是为了使图像中的轮廓更加明显。
常见的预处理方法包括灰度化、二值化、滤波等。
2. 边缘检测在预处理完成后,我们需要使用边缘检测算法来检测图像中的边缘。
常见的边缘检测算法包括Sobel算子、Canny算子等。
3. 轮廓查找在检测到图像中的边缘后,CV2 FindContours会根据边缘的像素点来查找轮廓。
它会将所有相邻的像素点组成一个轮廓,并将轮廓存储在一个列表中。
4. 轮廓绘制CV2 FindContours会将找到的轮廓绘制在原始图像上。
这样我们就可以看到图像中所有的轮廓了。
总结CV2 FindContours是一种非常重要的图像处理函数。
它可以帮助我们找到图像中的所有轮廓,并将它们存储在一个列表中。
CV2 FindContours的原理是基于边缘检测算法,它可以通过检测图像中像素值的变化来确定物体的边缘。
在使用CV2 FindContours之前,我们需要对图像进行预处理,包括灰度化、二值化、滤波等。
最后,CV2 FindContours会将找到的轮廓绘制在原始图像上,以便我们更好地观察图像中的轮廓。
基于OpenCV图像处理系统的开发与实现刘培军;马明栋;王得玉【摘要】In the research of digital image processing technology, when a small number of images are processed, various image processing algorithms are generally used for programming according to different requirements, and there are a lot of repetitive work. However, when the amount of digital image data is large and the real-time requirement of processed images is high, all images are processed, codes and algorithms are written manually, which is quite difficult and inefficient. In order to effectively solve the above problems, based on OpenCV computer vision library and under the integrated development environment of Qt Creator, we develop and implement an image processing system of object-oriented programming with better interface and convenient for users. The practice of digital image processing shows that the system can process images efficiently and quickly.%在数字图像处理技术的研究过程中,基于平时对少量图像进行处理时,一般都是针对不同需求运用各种图像处理算法进行编程,存在着许多重复性工作.而当数字图像数据量非常大且对处理的图像实时性要求非常高时,对所有图像进行处理,代码以及算法的实现都通过人工进行编写,存在着相当大的难度且效率十分低下.为有效解决上述问题,以OpenCV计算机视觉库为基础,在Qt Creator 集成开发环境下,采用面向对象编程,开发并实现了一款界面良好,方便用户使用的图像处理系统.通过对大量数字图像处理的实践表明,该系统能够有效快速地对图像进行处理.【期刊名称】《计算机技术与发展》【年(卷),期】2019(029)003【总页数】5页(P127-131)【关键词】图像处理算法;OpenCV;Qt Creator;面向对象;图像处理系统【作者】刘培军;马明栋;王得玉【作者单位】南京邮电大学通信与信息工程学院, 江苏南京 210003;南京邮电大学地理与生物信息学院, 江苏南京 210023;南京邮电大学地理与生物信息学院, 江苏南京 210023【正文语种】中文【中图分类】TP3020 引言在计算机技术如此成熟的今天,图像处理理论与技术已经得到了较为全面的发展并在持续不断的优化创新中,尤其在人工智能、航空航天、工业部件检测、交通、医学等领域得到了广泛应用[1-2]。
基于2DPCA的人脸识别算法研究摘要人脸识别技术是对图像和视频中的人脸进行检测和定位的一门模式识别技术,包含位置、大小、个数和形态等人脸图像的所有信息。
由于近年来计算机技术的飞速发展,为人脸识别技术的广泛应用提供了可能,所以图像处理技术被广泛应用了各种领域。
该技术具有广阔的前景,如今已有大量的研究人员专注于人脸识别技术的开发。
本文的主要工作内容如下:1)介绍了人脸识别技术的基础知识,包括该技术的应用、背景、研究方向以及目前研究该技术的困难,并对人脸识别系统的运行过程以及运行平台作了简单的介绍。
2)预处理工作是在原始0RL人脸库上进行的。
在图像的预处理阶段,经过了图象的颜色处理,图像的几何归一化,图像的均衡化和图象的灰度归一化四个过程。
所有人脸图像通过上述处理后,就可以在一定程度上减小光照、背景等一些外在因素的不利影响。
3)介绍了目前主流的一些人脸检测算法,本文采用并详细叙述了Adaboost人脸检测算法。
Adaboost算法首先需要创建人脸图像的训练样本,再通过对样本的训练,得到的级联分类器就可以对人脸进行检测。
4)本文介绍了基于PCA算法的人脸特征点提取,并在PCA算法的基础上应用了改进型的2DPCA算法,对两者的性能进行了对比,得出后者的准确度和实时性均大于前者,最后将Adaboost人脸检测算法和2DPCA算法结合,不仅能大幅度降低识别时间,而且还相互补充,有效的提高了识别率。
关键词:人脸识别 2DPCA 特征提取人脸检测2DPCA Face Recognition Algorithm Basedon The ResearchAbstract:Face recognition is a technology to detect and locate human face in an image or video streams,Including location, size, shape, number and other information of human face in an image or video streams.Due to the rapid development of computer operation speed makes the image processing technology has been widely applied in many fields in recent years. This paper's work has the following several aspects:1)Explained the background, research scope and method of face recognition,and introduced the theoretical method of face recognition field in general.2)The pretreatments work is based on the original ORL face database. In the image preprocessing stage, there are the color of the image processing, image geometric normalization, image equalization and image gray scale normalization four parts. After united processing, the face image is standard, which can eliminate the adverse effects of some external factors.3)All kinds of face detection algorithm is introduced, and detailed describing the Adaboost algorithm for face detection. Through the Adaboost algorithm to create a training sample,then Training the samples of face image,and obtaining the cascade classifier to detect human face.4)This paper introduces the facial feature points extraction based on PCA ,and 2DPCA is used on the basis of the PCA as a improved algorithm.Performance is compared between the two, it is concluds that the real time and accuracy of the latter is greater than the former.Finally the Adaboost face detection algorithm and 2DPCA are combined, which not only can greatly reduce the recognition time, but also complement each other, effectively improve the recognition rate.Key words:Face recognition 2DPCA Feature extraction Face detection目录第1章前言 (1)1.1 人脸识别的应用和研究背景 (1)1.2 人脸识别技术的研究方向 (2)1.3 研究的现状与存在的困难 (3)1.4 本文大概安排 (4)第2章人脸识别系统及软件平台的配置 (4)2.1 人脸识别系统概况 (4)2.1.1 获取人脸图像信息 (5)2.1.2 检测定位 (5)2.1.3 图像的预处理 (5)2.1.4 特征提取 (6)2.1.5 图像的匹配与识别 (6)2.2 OpenCV (6)2.2.1 OpenCV简介 (6)2.2.2 OpenCV的系统配置 (7)2.3 Matlab与图像处理 (8)第3章图像的检测定位 (8)3.1 引言 (8)3.2 人脸检测的方法 (8)3.3 Adaboost算法 (9)3.3.1 Haar特征 (10)3.3.2 积分图 (10)3.3.4 级联分类器 (11)第4章图像的预处理 (13)4.1 引言 (13)4.2 人脸图像库 (13)4.3 人脸预处理算法 (14)4.3.1 颜色处理 (14)4.3.2几何归一化 (15)4.3.3直方图均衡化 (16)4.3.4灰度归一化 (18)4.4 本章小结 (19)第5章图像的特征提取与识别 (19)5.1 引言 (19)5.2 图像特征提取方法 (20)5.2.1基于几何特征的方法 (20)5.2.2基于统计的方法 (20)5.2.3弹性图匹配(elastic graph matching) (21)5.2.4神经网络方法 (21)5.2.5支持向量机(SVM)方法 (22)5.3 距离分类器的选择 (22)5.4 PCA算法的人脸识别 (24)5.5 二维主成分分析(2DPCA) (25)5.5.1 2DPCA人脸识别算法 (25)5.5.2 特征提取 (27)5.5.3 分类方法 (27)5.5.4 基于2DPCA的图像重构 (28)5.6 实验分析 (28)第6章总结与展望 (33)6.1 本文总结 (33)6.2 未来工作展望 (33)致谢 (34)参考文献: (35)第1章前言1.1 人脸识别的应用和研究背景随着社会科学技术的发展进步,特别是最近几年计算机的软硬件技术高速发展,以及人们越来越将视野集中到快速高效的智能身份识别,使生物识别技术在科学研究中取得了重大的进步和发展。
基于opencv 对图像的预处理1.问题描述本次设计是基于opencv 结合c++语言实现的对图像的预处理,opencv 是用于开发实时的图像处理、计算机视觉及模式识别程序;其中图像的预处理也就是利用opencv 对图像进行简单的编辑操作;例如对图像的对比度、亮度、饱和度进行调节,同时还可以对图像进行缩放和旋转,这些都是图像预处理简单的处理方法;首先通过opencv 加载一幅原型图像,显示出来;设置五个滑动控制按钮,当拖动按钮时,对比度、亮度、饱和度的大小也会随之改变,也可以通过同样的方式调节缩放的比例和旋转的角度,来控制图像,对图像进行处理,显示出符合调节要求的图像,进行对比观察他们的之间的变化。
2.模块划分此次设计的模块分为五个模块,滑动控制模块、对比度和亮度调节模块、饱和度调节模块、缩放调节模块、旋转调节模块,他们之间的关系如下所示:图一、各个模块关系图调用调用调用调用滑动控制模块对比度和亮度调节模块饱和度调节模块缩放调节模块旋转调节模块滑动控制模块处于主函数之中,是整个设计的核心部分,通过createTrackbar创建五个滑动控制按钮并且调用每个模块实现对图像相应的调节。
3.算法设计(1)滑动控制:滑动控制是整个设计的核心部分,通过创建滑动控制按钮调节大小来改变相应的数据,进行调用函数实现对图像的编辑,滑动控制是利用createTrackbar(),函数中包括了滑动控制的名称,滑动控制显示在什么窗口上,滑动变量的地址和它调节的最大围,以及每个控制按钮应该调用什么函数实现什么功能;(2)对比度和亮度的调节:对比度和亮度的调节的原理是依照线性理论,它的公式如下所示:g(x)=a* f(x) +b,其中f(x)表示源图像的像素,g(x)表示输出图像的像素,参数a(需要满足a>0)被称为增益(gain),常常被用来控制图像的对比度,参数b通常被称为偏置(bias),常常被用来控制图像的亮度;(3)饱和度的调节:饱和度调节利用cvCvtColor( src_image, dst_image, CV_BGR2HSV )将RGB 颜色空间转换为HSV颜色空间,其中“H=Hue”表示色调,“S=Saturation”表示饱和度,“V=Value ”表示纯度;所以饱和度的调节只需要调节S的大小,H 和V的值不需要做任何的改变;(4)旋转的调节:旋转是以某参考点为圆心,将图像的个点(x,y)围绕圆心转动一个逆时针角度θ,变为新的坐标(x1,y1),x1=rcos(α+θ),y1=rsin(α+θ),其中r是图像的极径,α是图像与水平的坐标的角度的大小;(5)缩放的调节:首先得到源图像的宽度x和高度y,变换后新的图像的宽度和高度分别为x1和y1,x1=x*f,y1=y*f,其中f是缩放因子;4.函数功能描述(1)主函数main()用来设置滑动控制按钮,当鼠标拖动按钮可以得到相应的数据大小,实现手动控制的功能,当鼠标拖动对比度和亮度调节是,主函数调用对比度和亮度调节函数,类似这样分别对每个功能模块实现调用;(2)对比度和亮度调节函数ContrastAndBright(),当鼠标拖动对比度和亮度时将对比度和亮度的值传递给ContrastAndBright(),实现对图片的对比度和亮度的控制,并创建一个对比度和亮度显示窗口,将图像显示出来;(3)饱和度调节函数Statiate(),当鼠标拖动饱和度控制条将值从0~512时,饱和度的值就会传递给Statiate(),图像的饱和度就会随控制条变化而变化,将变化后图像显示在饱和度窗口上;(4)旋转函数Rotate(),旋转的角度变化围是0~360,在Rotate()中创建一个旋转图像显示窗口,当拖动鼠标改变旋转角度的变化,图像也会发生旋转; (5)缩放函数Zoom(),缩放的围是0~2,当缩放因为小于1时表示图像的缩小,当缩放因子大于1时,表示图像的放大,将缩放的图像显示在创建的缩放图像的窗口上;5.详细设计整个设计函数之间的的关系如下所示:图二、函数关系图Main ()createTrackbar ()ContrastAndBright ()Statiate ()Rotate()Zoom()利用include加载整个程序需要的库函数;定义相应的字符串变量、整形变量和指针变量并给他们赋初值;以下是整个设计中函数设计和运行的结果:(1)main()利用imread和cvLoadImage从文件夹中加载图像,运用if判断语句看是否读入图像成功,如过读入图像没有成功,则退出程序,如果读入图像成功则利用nameWindow创建并命名为原始图、滑动控制和对比度和亮度窗口,然后将图像显示在特定的窗口上,执行滑动控制函数createTrackbar();主函数得到原始图如下所示:(2)createTrackbar()其中括号的包括的容为(conststring& trackbarname, conststring& winname, int* value, int count, TrackbarCallback onChange=0,);第一个参数,const string&类型的trackbarname,表示轨迹条的名字,用来代表我们创建的轨迹条;第二个参数,const string&类型的winname,填窗口的名字,表示这个轨迹条会依附到哪个窗口上,即对应namedWindow()创建窗口时填的某一个窗口名;第三个参数,int* 类型的value,一个指向整型的指针,表示滑块的位置。
并且在创建时,滑块的初始位置就是该变量当前的值;第四个参数,int 类型的count,表示滑块可以达到的最大位置的;第五个参数,TrackbarCallback 类型的onChange,首先注意他有默认值0。
这是一个指向回调函数的指针,每次滑块位置改变时,这个函数都会进行回调。
并且这个函数的原型必须为void XXXX(int,void*);它的运行结果如下所示:(3)ContrastAndBright(),将图像转为矩阵阵列之后,执行运算g_dstImage(i,j) =a*g_srcImage(i,j) + b,其中i和j表示该像素点位于第i行和第j列,在执行上述运算在访问图像的每一个像素时,因为是对GBR图像进行运算,每个像素有三个值(G、B、R),所以我们必须分别访问它们,在访问像素的代码片段,利用三个for循环解决,第一个循环控制行,第二个循环控制列,第三个循环控制G、B、R,当调节亮度和对比度的轨迹条时所得的结果如下所示:(4)Statiate(),利用cvCloneImage复制源图像到地址dst3中去,在运用cvCloneImage()将RGB颜色空间转为HSV颜色空间,定义个lut[256][3]矩阵,矩阵的列表示H、S、V,利用一个for循环改变每个像素点饱和度S的值,它的色调和纯度不发生变化,它的效果图如下所示:(5)Zoom(),新的图像的宽度dst2_cvsize.width=rsc->width*g_nScaleValue/10.0和高度dst2_cvsize.height=rsc->height*g_nScaleValue/10.0,其中rsc->width、rsc-> —height分别为源图像的宽度和高度,g_nScaleValue为缩放因为,为了实现该图像的缩小功能,所以缩放因为除以10.0,小于1时实现缩小功能,大于1时实现的是放大的功能;运行结果如下所示:(6)Rotate(),定义一个浮点型的m[6]的数组,定义一个图形矩阵CvMat M,将m[6]中的数据可看做一个2行3列的矩阵,旋转就是是调节矩阵每个元素的值;获取源图像的宽度w和高度h,其中旋转中心为m[2]=w*0.5f,m[5]=h*0.5f;创建显示图像的窗口,最后将图像显示出来;它的运行结果如下所示:6.心得与体会计算机视觉是在图像处理的基础上发展起来的新兴学科。
opencv是一个开源的计算机视觉库,它为图像处理、模式识别、三维重建、物体跟踪、机器学习和线性代数提供了各种各样的算法;此次设计是我首次接触opencv,从opencv 基本的安装,到对图形,图像一些基本的操作,让我学到一点opencv的一些知识,尽管学到的东西不太多,但已经有了个初步的接触,在进行本次设计的过程中也遇到一些问题,例如滑动控制如何控制,饱和度如何设置,以及图像如何转为矩阵;在此次设计中仍然还有些地方不足,图像不能再同一个窗口上进行操作显示;虽然开始对opencv不了解,而且在此过程也会经常出现错误,我认为只有不断的出现错误,不断的调试,在做中学,不断的动手,才会掌握的更多,学到的更多,运用起来更加的熟练。
7.程序源代码#include "cv.h"#include<stdio.h>#include "highgui.h"using namespace cv;static void ContrastAndBright(int, void *);static void Rotate(int, void *);static void Zoom(int, void *);static void Statiate( int ,void * );string strWindowName = "滑动控制";string strWindowName1="对比度亮度效果图窗口";string strTraName = "对比度";string strTraName1 = "亮度";string strTraName2 = "饱和度";string strTraName3 = "缩放";string strTraName4 = "旋转";int g_nContraValue = 0;int g_nBrightValue = 0;int factor=0;int g_nScaleValue=0;int angle=0;IplImage *rsc = 0; //源图像指针IplImage *dst1 = 0; //目标图像指针IplImage *dst2 = 0;IplImage *dst3 = 0;CvSize dst1cv_size; //目标图像尺寸CvSize dst2_cvsize; //Mat g_srcImage,g_dstImage;int main( ){system("color 5E");g_srcImage= imread("E:\\程序\\新建文件夹\\opencv\\Debug\\1.jpg",1 );rsc=cvLoadImage("E:\\程序\\新建文件夹\\opencv\\Debug\\1.jpg",1);if(!g_srcImage.data ) { printf("Oh,no,读取g_srcImage图片错误~!\n"); return -1; }g_dstImage= Mat::zeros( g_srcImage.size(), g_srcImage.type() );//创建窗口namedWindow("【原始图窗口】", 1);//显示图像imshow("【原始图窗口】", g_srcImage);namedWindow(strWindowName);namedWindow(strWindowName1);//轨迹条的生成createTrackbar(strTraName,strWindowName,&g_nContraValue,100,ContrastAnd Bright);createTrackbar(strTraName1,strWindowName,&g_nBrightValue,100,ContrastAn dBright);createTrackbar(strTraName2,strWindowName,&factor,512,Statiate);createTrackbar(strTraName3,strWindowName,&g_nScaleValue,20,Zoom);createTrackbar(strTraName4,strWindowName,&angle,360,Rotate);waitKey(0);return 0;}void ContrastAndBright(int, void *)//对比和亮度的调节{ //三个for循环,执行运算g_dstImage(i,j) =a*g_srcImage(i,j) + b for(int y = 0; y < g_srcImage.rows; y++ ){for(int x = 0; x < g_srcImage.cols; x++ ){for(int c = 0; c < 3; c++ ){g_dstImage.at<Vec3b>(y,x)[c]=saturate_cast<uchar>( (g_nContraValue*0.01)*(g_srcImage.at<Vec3b>(y,x)[c] ) + g_nBrightValue );}}}imshow(strWindowName1, g_dstImage);}void Statiate( int ,void * ) //饱和度的调节{IplImage *hist_image = 0;dst3 = cvCloneImage(rsc);cvCvtColor( rsc, dst3, CV_BGR2HSV );int hue=factor-256;int i;float max_value = 0;uchar lut[256][3];CvMat* lut_mat;lut_mat = cvCreateMatHeader( 1, 256, CV_8UC3 );cvSetData( lut_mat, lut,0);for( i = 0; i < 256; i++ ) {int v = (i+hue);if( v < 0 )v = 0;if( v > 255 )v = 255;lut[i][1] = (uchar)v;lut[i][0] = (uchar)i;lut[i][2] = (uchar)i;}cvLUT( dst3, dst3, lut_mat );cvCvtColor( dst3, dst3, CV_HSV2BGR );cvShowImage("饱和度窗口", dst3 );}void Rotate(int, void *)//旋转的调节{dst1=cvCloneImage(rsc);float m[6];CvMat M=cvMat(2,3,CV_32F,m);int w=rsc->width;int h=rsc->height;m[0]=(float)(1*cos(-angle*CV_PI/180.));m[1]=(float)(1*sin(-angle*CV_PI/180.));m[3]=-m[1];m[4]=m[0];m[2]=w*0.5f;m[5]=h*0.5f;cvZero(dst1);cvGetQuadrangleSubPix(rsc,dst1,&M);cvShowImage( "旋转图窗口", dst1 ); //显示目标图像}void Zoom(int,void *)//缩放的调节{dst2_cvsize.width=int(rsc->width*g_nScaleValue/10.0);dst2_cvsize.height=int(rsc->height*g_nScaleValue/10.0);dst2=cvCreateImage(dst2_cvsize,rsc->depth,rsc->nChannels);cvResize(rsc,dst2,CV_INTER_LINEAR);cvShowImage("缩放图窗口",dst2);}。