OpenCV下的图片旋转(转)
相关版本: OpenCV 2.1
#include "cv.h"#include "highgui.h"#include "math.h" // clockwise 为true则顺时针旋转,否则为逆时针旋转IplImage* rotateImage(IplImage* src, int angle, bool clockwise){ angle = abs(angle) % 180;if (angle > 90) { angle = 90 - (angle % 90); } IplImage* dst = NULL;int width = (double)(src->height * sin(angle * CV_PI / 180.0)) + (double)(src->width * cos(angle * CV_PI / 180.0 )) + 1;int height = (double)(src->height * cos(angle * CV_PI / 180.0)) + (double)(src->width * sin(angle * CV_PI / 180.0 )) + 1;int tempLength = sqrt(src->width * src->width + src->height * src->height) + 10;int tempX = (tempLength + 1) / 2 - src->width / 2;int tempY = (tempLength + 1) / 2 - src->height / 2;int flag = -1; dst = cvCreateImage(cvSize(width, height), src->depth, src->nChannels); cvZero(dst); IplImage* temp = cvCreateImage(cvSize(tempLength, tempLength), src->depth, src->nChannels); cvZero(temp); cvSetImageROI(temp, cvRect(tempX, tempY, src->width, src->height)); cvCopy(src, temp, NULL); cvResetImageROI(temp); if (clockwise) flag = 1; float m[6];int w = temp->width;int h = temp->height; m[0] = (float) cos(flag * angle * CV_PI / 180.); m[1] = (float) sin(flag * angle * CV_PI / 180.); m[3] = -m[1]; m[4] = m[0];// 将旋转中心移至图像中间 m[2] = w * 0.5f; m[5] = h * 0.5f;// CvMat M = cvMat(2, 3, CV_32F, m); cvGetQuadrangleSubPix(temp, dst, &M); cvReleaseImage(&temp);return dst;} int main(int argc, char **argv){ IplImage *src = 0; IplImage *dst = 0; int angle = 75; src = cvLoadImage("test.jpg"); dst = rotateImage(src, angle, false); cvNamedWindow("dst", 1); cvShowImage("dst", dst); cvWaitKey(0); cvReleaseImage(&src); cvReleaseImage(&dst);return 0;}
基本是通过改写OpenCV的官方论坛来实现的,除了那个用于旋转的m矩阵不知何用。
基本思路是把图片通过设置ROI复制到一个更大的黑色背景的图片中去,然后再旋转之后在截取其中的最小的包含旋转过后的矩形
OpenCV下的图片旋转(转)相关推荐
- IE下及标准浏览器下的图片旋转(二)—— Canvas(1)
文章过长,一篇无法保存. IE下及标准浏览器下的图片旋转(一)--滤镜,CSS3 3. canvas canvas 是html5中的新标签,使用canvas之前我们先看下它的定义:<canvas ...
- IE下及标准浏览器下的图片旋转(二)—— Canvas(2)
文章过长,一篇无法保存 IE下及标准浏览器下的图片旋转(二)-- Canvas(1) 同样,作为最后,我们使用使用jquery也为canvas写个旋转demo: javascript: $(funct ...
- 贾志刚-OpenCV下的图片读取,摄像头调用
贾志刚-OpenCV下的图片读取,摄像头调用 运行环境:Window10 + Python3.6 + PyCharm OpenCV3 import cv2 as cv import numpy as ...
- linux下BMP图片旋转
linux下BMP图片旋转 MP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持.随着Windows操作系统的流行与丰富的W ...
- ie浏览器下的图片旋转问题
今天做了一个项目,需要将图片旋转180度,可是使用ie自带过滤属性完全没效果. filter: progid:DXImageTransform.Microsoft.BasicImage(rotatio ...
- Python OpenCV 实现对图片旋转矩形的裁剪
前言: 最近需要实现一个在一张大图上给定一个带方向的点,以这个点为中心,以方向为角度裁剪出一个矩形区域.在网上查到很多方法都是先对大图像进行旋转,再从中切片取出目标区域.不失为一个好办法,但是我要处理 ...
- OpenCV 图片旋转
OpenCV 图片旋转的两个函数 cv2.getRotationMatrix2D 获得仿射变化矩阵 cv2.warpAffine 进行仿射变化 getRotationMatrix2D 获得仿射变化矩阵 ...
- python图片旋转脚本_Python+OpenCV 实现图片无损旋转90°且无黑边
0. 引言 有如上一张图片,在以往的图像旋转处理中,往往得到如图所示的图片. 然而,在进行一些其他图像处理或者图像展示时,黑边带来了一些不便.本文解决图片旋转后出现黑边的问题,实现了图片尺寸不变的旋转 ...
- Opencv——批量处理同一文件夹下的图片(解决savedfilename = dest + filenames[i].substr(len)问题)
文章目录 前言 一.完整代码 二.实现效果 前言 第一份代码实现了批量修改同一文件夹下图片的尺寸,有其他需求时仅需修改处理部分的代码以及文件夹路径. 第二份代码实现了批量截取同一文件夹下每张图片的RO ...
- c++中opencv对图片旋转镜像并调整尺寸显示
直接上代码, 如代码注释所示,使用cv库 1.使用imread函数读取输入图片 2.使用resize函数对图片缩放显示 3.使用flip函数对图片镜像 4.使用Rotate函数对图片旋转 5.使用im ...
最新文章
- 国内首部高尔夫商战小说《手腕》(林健锋著)
- java springboot 搭建_springboot搭建java项目
- fifo的rdata_同步FIFO设计
- 【Tika基础教程之一】Tika基础教程
- 查询在具有最小内存容量的所有PC中具有最快处理器的PC制造商 (20 分)(两种思路+详解)
- 天地图专题五:在天地图上绘制电子区域并保存数据
- linux下echo与time服务的程序实现
- CV Code|计算机视觉开源周报20200503期
- Mongodb 与 MySQL对比
- 完整简单的红黑树算法
- 红帽RHCE培训-课程3笔记内容2
- oracle 弱口令扫描器,批量扫描弱口令检查工具
- EI/scopus推荐-智能交通与智慧城市会议
- matlab中plot函数的常用颜色和线型
- C#邮件过滤系统(论文+可执行程序+源码+外文翻译+程序操作演示录像)
- 学校食堂工作流程图流程图模板分享
- 【C++面试必备】一个专栏带你搞定剑指offer第二版
- 如何对大数据进行分析和处理?_光点科技
- 大话成像之《图像质量测试测量与国际标准》课程
- 使用idea搭建springboot项目教程
热门文章
- python使用长ping命令_在Python中调用Ping命令,批量IP的方法
- CentOS安装Nvidia驱动和CUDA
- debian:必须有官方源,难道国内镜像都是僵尸源?
- libjvm ThreadState Transition transition_from_native
- 管理感悟:要想到自己脖子后面有灰
- WEB前端、后端的说明
- python读取excel数据生成word_利用Python将excel数据读取到word表格
- android设计个人简历页面_制作个人简历网站教程
- qt 使用msvc编译器出现中文乱码的问题
- public class c中_C++中如何使用类模板