OpenCV:OpenCV图像旋转的代码
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图像旋转的代码相关推荐
- 应用OpenCV进行图像旋转和平移
简 介: 本文中,你了解了了如何通过OpenCV完成对于图像的旋转和平移.我们首先通过 getRotationMatrix2D() 获取2D旋转矩阵,然后完成了对于图像的旋转.具体是通过warpAff ...
- Opencv 基础(四):使用OpenCV进行图像旋转和平移
如今,图像编辑变得越来越流行,因为手机有内置的功能,可以让你裁剪.旋转和更多的操作你的图像. 这篇文章中,我们将探索和学习这些图像编辑技术.具体来说,我们将学习如何: 旋转图像 移动图像 基本图像变换 ...
- Opencv:图像旋转,cv2.getRotationMatrix2D 和 cv2.warpAffine 函数
学习记录如何使用opencv实现对图像的旋转操作. 1 cv2.getRotationMatrix2D(center, angle, scale) 图像的旋转矩阵一般为: 但是单纯的这个矩阵是在原点处 ...
- OpenCV中图像旋转(warpAffine)算法的实现过程
在OpenCV中,目前并没有现成的函数直接用来实现图像旋转,它是用仿射变换函数cv::warpAffine来实现的,此函数目前支持4种插值算法,最近邻.双线性.双三次.兰索斯插值,如果传进去的参数为基 ...
- 【OpenCV】图像旋转详解,边缘用黑色填充
项目要用到图像旋转,OpenCV里面居然没有专门封装好的函数,只好自己写了.根据<learnning OpenCV>发现效果不是很理想,旋转后图像大小不变,可是图像却被裁减了. 例子如下: ...
- 吐嘈OpenCV的图像旋转功能 _7
實在出乎我的意料!OpenCV竟然連這么簡單的功能都沒有封裝!還要讓本大爺自己動手寫!強烈要求OpenCV下一個版本添加本功能! 函數功能和這個網頁一樣,只不過這個作者寫的太糟了,我把它變得簡潔了一點 ...
- android opencv 图像旋转90度,使用OpenCV转换图像( 旋转 90度)的简单方法?
以下是我的EmguCV ( OpenCV的C# 端口) 解决方案:public static Image Rotate90(this Image img) where TColor : struct, ...
- 图像旋转c代码实现(90度, -90度, 180度)
// 顺时针 90 度 // src 图像数据 // srcW 图像宽度 // srcH 图像高度 // channel 图像通道,如果是RGB,BGR,=3, RGBA = 4,GRAY=1 注意旋 ...
- 经验 | OpenCV图像旋转的原理与技巧
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|OpenCV学堂 01 引言 初学图像处理,很多人遇到的 ...
最新文章
- 【安富莱原创开源应用第3期】花式玩转网络摄像头之VNC远程桌面版本,稳定运行2年不死机...
- 实验室服务器18.04LTS+RTX2080Ti+CUDA10.0+CUDAnn7.4+tf1.13装机之路
- 【大总结3】leetcode解题总览(算法、剑指offer、SQL、多线程、shell)
- csdn博客markdown 如何输入上下标(如平方指数等)
- Numpy | Python列表与Numpy数组对比
- JavaScript里的函数加或不加括号的区别
- python-requests数据驱动延伸
- 华为管理学案例分析_案例分析 华为——基于价值、围绕结果展开的绩效考核...
- 0-1背包问题(回溯算法)
- jQuery Gantt Package控件发布v3.0版本
- visio专业版svg图片裁剪
- Unity Webm格式视频报错
- Markdown中表格中内容换行、左对齐等基本操作
- java 实现邮箱验证注册
- 06.看板实践——限制在制品
- 【C++】CGAL学习笔记
- Flutter学习之Dart语言基础(内置类型)
- 简单的ps去掉图片上不想留的文字
- 计算机默认应用程序怎么取消,如何取消默认打开的QQ浏览器
- word表格之跨页断行
热门文章
- JVM类加载机制详解(一)JVM类加载过程
- 双刃剑与灰色地带:“泄露数据收藏家”的素描
- Linux 下查看某一个程序所使用的内存方法介绍
- 《HTML、CSS、JavaScript 网页制作从入门到精通》——第6章 使用表格
- HTTP Session、Cookie机制详解
- Android震动vibrator系统开发全过程
- python matplotlib画图产生的Type 3 fonts字体没有嵌入问题
- Sublime Text 2 入门技巧
- PHP 入门 - 2.函数
- 安装MySQL-python报错 error: command 'gcc' failed with exit status 1解决方法