OpenCV图像旋转的代码

cv::transpose( bfM, bfM )

前提:使用两个矩阵Mat型进行下标操作是不行的,耗费的时间太长了。直接使用两个指针对拷贝才是王道。不知道和OpenCV比较效果如何。

贴出下面的代码:  C++

    //图像旋转cv::Mat Transpose(cv::Mat &inMat)  {cv::Mat outMat( inMat.cols, inMat.rows, inMat.type() );const int L = inMat.cols;std::vector<unsigned char*>  headers(L);for ( int x=0; x< inMat.cols; ++x ){//unsigned char* ptrB = ( unsigned char* )(outMat.data + x * outMat.step) ;headers[x] = ptrB;}for ( int y=0 ;y < inMat.rows; ++y ){unsigned char* ptrA = ( unsigned char* )( inMat.data + y * inMat.step );for ( int x=0; x< inMat.cols; ++x ){*headers[x]= *ptrA;++(headers[x]);++ptrA;}}return outMat;}//cv::Mat  Transpose(cv::Mat &inMat)

效果图:

原始图像:爱德华.蒙克的《星夜》(Edvard Munch  《Starry Night 》. 1893. 135.6 × 140 cm.J. Paul Getty Museum.)

测试结果1:

很遗憾,图像336*400,速度是为使用OpenCV库的1/20,3.167s。怎么改进?0.166s。

改进一下:

 void cvWish::transpose( unsigned char* data, size_t step, int col ){int i, j;for( i = 0; i < col; i++ ){unsigned char* row   = (unsigned char*)(data + step*i);unsigned char* dataR = data + i*sizeof(unsigned char);for( j = i+1; j < col; j++ )std::swap( row[j], *( unsigned char* )( dataR + step*j ) );}}int Transpose( cv::Mat &inMat, cv::Mat &outMat )  {outMat = inMat.clone();size_t step = inMat.step;int col  = inMat.cols;cvWish::transpose( outMat.data,step, col );return 1;}

测试结果2:

很遗憾,图像336*400,速度依然是为使用OpenCV库的1/6, 0.947s。怎么改进?

OpenCV:OpenCV图像旋转的代码相关推荐

  1. 应用OpenCV进行图像旋转和平移

    简 介: 本文中,你了解了了如何通过OpenCV完成对于图像的旋转和平移.我们首先通过 getRotationMatrix2D() 获取2D旋转矩阵,然后完成了对于图像的旋转.具体是通过warpAff ...

  2. Opencv 基础(四):使用OpenCV进行图像旋转和平移

    如今,图像编辑变得越来越流行,因为手机有内置的功能,可以让你裁剪.旋转和更多的操作你的图像. 这篇文章中,我们将探索和学习这些图像编辑技术.具体来说,我们将学习如何: 旋转图像 移动图像 基本图像变换 ...

  3. Opencv:图像旋转,cv2.getRotationMatrix2D 和 cv2.warpAffine 函数

    学习记录如何使用opencv实现对图像的旋转操作. 1 cv2.getRotationMatrix2D(center, angle, scale) 图像的旋转矩阵一般为: 但是单纯的这个矩阵是在原点处 ...

  4. OpenCV中图像旋转(warpAffine)算法的实现过程

    在OpenCV中,目前并没有现成的函数直接用来实现图像旋转,它是用仿射变换函数cv::warpAffine来实现的,此函数目前支持4种插值算法,最近邻.双线性.双三次.兰索斯插值,如果传进去的参数为基 ...

  5. 【OpenCV】图像旋转详解,边缘用黑色填充

    项目要用到图像旋转,OpenCV里面居然没有专门封装好的函数,只好自己写了.根据<learnning OpenCV>发现效果不是很理想,旋转后图像大小不变,可是图像却被裁减了. 例子如下: ...

  6. 吐嘈OpenCV的图像旋转功能 _7

    實在出乎我的意料!OpenCV竟然連這么簡單的功能都沒有封裝!還要讓本大爺自己動手寫!強烈要求OpenCV下一個版本添加本功能! 函數功能和這個網頁一樣,只不過這個作者寫的太糟了,我把它變得簡潔了一點 ...

  7. android opencv 图像旋转90度,使用OpenCV转换图像( 旋转 90度)的简单方法?

    以下是我的EmguCV ( OpenCV的C# 端口) 解决方案:public static Image Rotate90(this Image img) where TColor : struct, ...

  8. 图像旋转c代码实现(90度, -90度, 180度)

    // 顺时针 90 度 // src 图像数据 // srcW 图像宽度 // srcH 图像高度 // channel 图像通道,如果是RGB,BGR,=3, RGBA = 4,GRAY=1 注意旋 ...

  9. 经验 | OpenCV图像旋转的原理与技巧

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|OpenCV学堂 01 引言 初学图像处理,很多人遇到的 ...

最新文章

  1. 【安富莱原创开源应用第3期】花式玩转网络摄像头之VNC远程桌面版本,稳定运行2年不死机...
  2. 实验室服务器18.04LTS+RTX2080Ti+CUDA10.0+CUDAnn7.4+tf1.13装机之路
  3. 【大总结3】leetcode解题总览(算法、剑指offer、SQL、多线程、shell)
  4. csdn博客markdown 如何输入上下标(如平方指数等)
  5. Numpy | Python列表与Numpy数组对比
  6. JavaScript里的函数加或不加括号的区别
  7. python-requests数据驱动延伸
  8. 华为管理学案例分析_案例分析 华为——基于价值、围绕结果展开的绩效考核...
  9. 0-1背包问题(回溯算法)
  10. jQuery Gantt Package控件发布v3.0版本
  11. visio专业版svg图片裁剪
  12. Unity Webm格式视频报错
  13. Markdown中表格中内容换行、左对齐等基本操作
  14. java 实现邮箱验证注册
  15. 06.看板实践——限制在制品
  16. 【C++】CGAL学习笔记
  17. Flutter学习之Dart语言基础(内置类型)
  18. 简单的ps去掉图片上不想留的文字
  19. 计算机默认应用程序怎么取消,如何取消默认打开的QQ浏览器
  20. word表格之跨页断行

热门文章

  1. JVM类加载机制详解(一)JVM类加载过程
  2. 双刃剑与灰色地带:“泄露数据收藏家”的素描
  3. Linux 下查看某一个程序所使用的内存方法介绍
  4. 《HTML、CSS、JavaScript 网页制作从入门到精通》——第6章 使用表格
  5. HTTP Session、Cookie机制详解
  6. Android震动vibrator系统开发全过程
  7. python matplotlib画图产生的Type 3 fonts字体没有嵌入问题
  8. Sublime Text 2 入门技巧
  9. PHP 入门 - 2.函数
  10. 安装MySQL-python报错 error: command 'gcc' failed with exit status 1解决方法