OpenCV:OpenCV图像旋转的代码
生活随笔
收集整理的這篇文章主要介紹了
OpenCV:OpenCV图像旋转的代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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图像旋转的代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 保价费怎么算
- 下一篇: 外汇怎么炒,四步即可炒外汇