OpenCV常用操作之计时、缩放、旋转、镜像

上传人:碎****木 文档编号:220862118 上传时间:2021-12-09 格式:DOCX 页数:9 大小:259.61KB
返回 下载 相关 举报
OpenCV常用操作之计时、缩放、旋转、镜像_第1页
第1页 / 共9页
OpenCV常用操作之计时、缩放、旋转、镜像_第2页
第2页 / 共9页
OpenCV常用操作之计时、缩放、旋转、镜像_第3页
第3页 / 共9页
亲,该文档总共9页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《OpenCV常用操作之计时、缩放、旋转、镜像》由会员分享,可在线阅读,更多相关《OpenCV常用操作之计时、缩放、旋转、镜像(9页珍藏版)》请在金锄头文库上搜索。

1、常用操作在 OpenCV 开发过程中用于测试性能计时的:计时计算处理的时间。在一般的图像处理中有的几个操作:缩放放大、缩小,旋转90 度的倍数、镜像x 轴反向、y 轴反向。留意:意角度的旋转使用 cv:Mat 不太适宜,开发过程中会用到其他 ui 框架, 所以使用其他 ui 框架做旋转是比较适宜的。计时函数OpenCV 供给了两个渐变的计时函数:getTickCount()和 getTickFrequency()。getTickCount():getTickCount()函数返回 CPU 自某个大事如启动电脑以来走过的时钟周期数。getTickFrequency():getTickFreque

2、ncy()函数返回 CPU 一秒钟所走的时钟周期数。测试结果如下:cv:getTickFrequency()猎取的频率为 10,000,000,得到 cpu 的周期为一千万次每秒。访问图像中像素的三类方法cv:Mat 访问的三类方法: 方法一:at 函数方法二:使用迭代器 方法三:通过数据指针旋转90 度的整数倍旋转 90的整数就是对矩阵位置进展变换,如以下图:旋转函数 1:cv:transpose()该函数无任何函数,直接对矩阵进展顺时钟旋转 90,函数原型如下: CV_EXPORTS_W void transpose(InputArray src, OutputArray dst); 旋转

3、函数 2:cv:rotate()该函数旋转函数,三个枚举可以旋转 90,180,270,逆时针旋转 90就是顺时钟 270,函数原型如下:CV_EXPORTS_W void rotate(InputArray src, OutputArray dst, int rotateCode);参数一:输入 mat 参数二:输出 mat参数三:旋转枚举,如下: enum RotateFlags ROTATE_90_CLOCKWISE = 0,/Rotate 90 degrees clockwise ROTATE_180 = 1,/Rotate 180 degrees clockwise ROTATE_9

4、0_COUNTERCLOCKWISE = 2, /Rotate 270 degrees clockwise;代码例如:cv:rotate(srcMat, srcMat, cv:ROTATE_90_CLOCKWISE); 镜像x 轴翻转,y 轴翻转镜像就是对 X 轴和 Y 轴的值翻转对调,如以下图:翻转函数:cv:flip该函数为翻转函数,函数圆形如下:CV_EXPORTS_W void flip(InputArray src, OutputArray dst, int flipCode); 参数一:输入 mat参数二:输出 mat参数三:只有 3 种值,小于 0,等于 0,大于 0,分别对应

5、xy 轴翻转、x 轴翻转、y 轴翻转。代码例如:cv:flip(srcMat, srcMat, 0); 缩放缩放函数:cv:resize该函数为缩放函数,特别留意:函数缩放会失真,尤其是以缩放后的图像连续缩放会原来大小,所以笔者建议,缩放用缓存,缓存存放原图,每次以原图缩放。该函数原形如下:CV_EXPORTS_W void resize( InputArray src, OutputArray dst, Size dsize, double fx = 0, double fy = 0,int interpolation = INTER_LINEAR );参数一:输入 mat 参数二:输出 m

6、at参数三:缩放后的大小参数四:x 缩放比例,一般默认 0 就可以参数五:y 缩放比例,一般默认 0 就可以参数六:差值,一般默认即可此处额外介绍下差值的枚举:enum InterpolationFlagsINTER_NEAREST= 0,/ 最接近差值INTER_LINEAR= 1,/ 双线性差值INTER_CUBIC= 2,/ 双立方差值INTER_AREA= 3,INTER_LANCZOS4= 4, / 四周像素及原像素加权取值INTER_LINEAR_EXACT = 5,INTER_MAX= 7,WARP_FILL_OUTLIERS= 8,WARP_INVERSE_MAP= 16;De

7、mo 源码void OpenCVManager:testCommonOperate()#define TEST_GET_TICK_COUNT (1)#define TEST_ROTATE_90(1)#if TEST_GET_TICK_COUNT/ 测试计时函数for(int index = 0; index 10; index+)int64 tickCount = cv:getTickCount();qDebug() FUNCTIONLINE “= testcv:getTickCount(), now times:“ index;qDebug() FUNCTIONLINE “cv:getTic

8、kCount() =“ tickCount;/ Qt 的线程睡眠函数QThread:msleep(200 * index);int64 tickCount2 = cv:getTickCount();qDebug() FUNCTIONLINE “cv:getTickCount() =“ tickCount2; int64 ms = (double)tickCount2 - tickCount) * 1000.0f/ cv:getTickFrequency(); qDebug() FUNCTIONLINE “cv:getTickFrequency() =“ (int64)cv:getTickFre

9、quency() “, ms:“ ms;#endif#if TEST_ROTATE_90cv:Mat srcMat;QString fileName =“D:/qtProject/openCVDemo/openCVDemo/modules/openCVManager/images/1.jpg“;srcMat = cv:imread(fileName.toStdString(); if(!srcMat.data)qDebug() FILELINE “Failed to load image:“ fileName; return;cv:imshow(“OpenCVDemo v1.5.0 QQ:21

10、497936 blog: srcMat); float scaleStep = 0.05f;while(true)int key = cv:waitKey();if(key = ”1”)/ 逆时钟旋转 90 度int64 tickCount = cv:getTickCount();qDebug() FUNCTIONLINE “cv:getTickCount() =“ tickCount;cv:rotate(srcMat, srcMat, cv:ROTATE_90_COUNTERCLOCKWISE); int64 tickCount2 = cv:getTickCount();qDebug() F

11、UNCTIONLINE “cv:getTickCount() =“ tickCount2; int64 ms = (double)tickCount2 - tickCount) * 1000.0f/ cv:getTickFrequency(); qDebug() FUNCTIONLINE “take time ms:“ ms;cv:imshow(“OpenCVDemo v1.5.0 QQ:21497936 blog: srcMat);else if(key = ”2”)/ 顺时钟旋转 90 度int64 tickCount = cv:getTickCount();qDebug() FUNCTI

12、ONLINE “cv:getTickCount() =“ tickCount; cv:rotate(srcMat, srcMat, cv:ROTATE_90_CLOCKWISE);int64 tickCount2 = cv:getTickCount();qDebug() FUNCTIONLINE “cv:getTickCount() =“ tickCount2; int64 ms = (double)tickCount2 - tickCount) * 1000.0f/ cv:getTickFrequency(); qDebug() FUNCTIONLINE “take time ms:“ ms

13、;cv:imshow(“OpenCVDemo v1.5.0 QQ:21497936 blog: srcMat);else if(key = ”3”)/ x 轴翻转镜像int64 tickCount = cv:getTickCount();qDebug() FUNCTIONLINE “cv:getTickCount() =“ tickCount; cv:flip(srcMat, srcMat, 0);int64 tickCount2 = cv:getTickCount();qDebug() FUNCTIONLINE “cv:getTickCount() =“ tickCount2; int64 ms = (double)tickCount2 - tickCount) * 1000.0f/ cv:getTickFrequency(); qDebug() FUNCTIONLINE “take time ms:“ ms;cv:imshow(“OpenCVDemo v1.5.0 QQ:21497936 blog: srcMat);else if(key = ”4”)/ y轴翻转镜像int64 tickCount = cv:getTickCount();qDebug() FUNCTIONLINE “cv:getTic

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 教育/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号