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的图像旋转功能 >_<7

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

  2. OpenCV计算机视觉学习(11)——图像空间几何变换(图像缩放,图像旋转,图像翻转,图像平移,仿射变换,镜像变换)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 图像 ...

  3. opencv 图像旋转

    理论 http://www.cnblogs.com/wangguchangqing/p/4045150.html 翻开任意一本图像处理的书,都会讲到图像的几何变换,这里面包括:仿射变换(affine ...

  4. opencv 图像仿射变换 计算仿射变换后对应特征点的新坐标 图像旋转、缩放、平移

    常常需要最图像进行仿射变换,仿射变换后,我们可能需要将原来图像中的特征点坐标进行重新计算,获得原来图像中例如眼睛瞳孔坐标的新的位置,用于在新得到图像中继续利用瞳孔位置坐标. 仿射变换在:http:// ...

  5. OpenCL + OpenCV 图像旋转

    ▶ 使用 OpenCV 从文件读取彩色的 png 图像,旋转一定角度以后写回文件 ● 代码,核函数 // rotate.cl //__constant sampler_t sampler = CLK_ ...

  6. 基于c++和opencv底层的图像旋转

    图像旋转:本质上是对旋转后的图片中的每个像素计算在原图的位置. 在opencv包里有自带的旋转函数,当你知道倾斜角度theta时: 用getRotationMatrix2D可得2X3的旋转变换矩阵 M ...

  7. OpenCV图像旋转

    图像旋转是指图像按照某个位置转动一定角度的过程,旋转中图像仍保持这原始尺寸.图像旋转后图像的水平对称轴.垂直对称轴及中心坐标原点都可能会发生变换,因此需要对图像旋转中的坐标进行相应转换. 如下图: 假 ...

  8. OpenCV文本图像的旋转矫正

    用户在使用Android手机拍摄过程中难免会出现文本图像存在旋转角度.这里采用霍夫变换.边缘检测等数字图像处理算法检测图像的旋转角度,并根据计算结果对输入图像进行旋转矫正. 首先定义一个结构元素,再通 ...

  9. 【OpenCV学习笔记】之六 手写图像旋转函数---万丈高楼平地起

    话说,平凡之处显真格,这一点也没错!  比如,对旋转图像进行双线性插值,很简单吧?  可,对我,折腾了大半天,也没有达到预期效果!  尤其是三个误区让我抓瞎好久: 1,坐标旋转公式.   这东西,要用 ...

随机推荐

  1. PAT 1110 Complete Binary Tree

    Given a tree, you are supposed to tell if it is a complete binary tree. Input Specification: Each in ...

  2. poj 2831 次小生成树模板

    /*次小生成树 题意:给你一些路径,现在将一部分路径权值减少后问是否可以替代最小生成树里面的边. 解:次小生成树,即将这条边连上,构成一个环 求出任意两点路径之间的除了这条边的最大值,比较这个最大值& ...

  3. [Bzoj3940] [AC自动机,USACO 2015 February Gold] Censor [AC自动机模板题]

    AC自动机模板题(膜jcvb代码) #include <iostream> #include <algorithm> #include <cstdio> #incl ...

  4. nyoj_655_光棍的yy_201311281539

    光棍的yy 时间限制:1000 ms  |           内存限制:65535 KB 难度:2   描述 yy经常遇见一个奇怪的事情,每当他看时间的时候总会看见11:11,这个很纠结啊. 现在给 ...

  5. MVC.Net 5:允许保存和输出Html内容

    当我们在保存表单内容时,如果其中有一项内容包含Html的tag时,系统会报如下错误: A potentially dangerous Request.Form value was detected f ...

  6. HDU 4543

    这道题感觉很坑..不过,注意一些小问题. 参考http://www.cnblogs.com/Lattexiaoyu/archive/2013/03/31/2992553.html改进了原来自己的复杂度 ...

  7. (IT/互联网行业)你给自己当前的职位拼几分?(评分标准,个人看法,勿喷~)

    常常有身边的关系好的朋友或网友.问如今我该不该跳槽的问题. 我一般给他们的答复你能给当前的工作拼几分. 下面是我自己总结的一个评分标准.如有不当之处,勿喷~ --------------------- ...

  8. spring基于通用Dao的多数据源配置

    有时候在一个项目中会连接多个数据库,须要在spring中配置多个数据源,近期就遇到了这个问题,因为我的项目之前是基于通用Dao的,配置的时候问题不断.这样的方式和资源文件冲突:扫描映射文件的话,Sql ...

  9. iOS 通讯录编程【总结】

    第一大块儿:读取通讯录 1.iOS 6以上系统,争取获取用户允许: 初始化的时候须要推断.设备是否授权 -(id)init{ self = [super init]; [self createdABH ...

  10. STL_算法_逆转(reverse,reverse_copy)

    C++ Primer 学习中.. . 简单记录下我的学习过程 (代码为主) //全部容器适用 reverse(b,e)        //逆转区间数据 reverse_copy(b,e,b2) /** ...