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。怎么改进?

最新文章

  1. OCP考点实战演练02-日常维护篇
  2. 递推 hdu 1330
  3. java版简易socket客户端
  4. 在Linux和Windows的Docker容器中运行ASP.NET Core
  5. js学习
  6. linux 时间管理——概念、注意点(一)【转】
  7. Django~Settings.py
  8. Git CMD - branch: List, create, or delete branches
  9. 设置从本地copy文件到远程计算机上
  10. IT第二天 - JAVA环境的配置、Hello的编写
  11. [Django实战] 第9篇 - 表单、视图、模型、模板的交互
  12. TRIZ系列-创新原理-26-复制原理
  13. java性能调优---------------------JVM调优方案
  14. 【已解决】React中配置Sass引入.scss文件无效
  15. git 命令添加整个文件夹以及文件夹下的内容
  16. 数据库事务的四大特性以及事务的隔离级别-与-Spring事务传播机制&amp;隔离级别
  17. k8s Nodeport方式下service访问,iptables处理逻辑(转)
  18. Resnet小记
  19. [转载]论asp.net out、ref、return
  20. [你必须知道的.NET]第二十七回:interface到底继承于object吗?

热门文章

  1. ansible special topics
  2. 配置sublime text 前端环境
  3. cogs 7. 通信线路
  4. v$open_cursor的几个问题
  5. 装饰器 转载自 http://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html
  6. 软件测试之怎么避免Bug漏测?
  7. [Mini Program] 尺寸单位 rpx
  8. 十分钟学会canvas
  9. 数据结构之---C语言实现最短路径之Dijkstra(迪杰斯特拉)算法
  10. cocos2d-html5开发之本地数据存储