封装了opencv的旋转图像函数
void ljb_cv_rotate_buf_size(IplImage *imgSrc, double degree, int *w_dst, int *h_dst)
{
double angle, a, b;
int w_src, h_src; angle = degree * CV_PI / 180.;
a = sin(angle), b = cos(angle); w_src = imgSrc->width;
h_src = imgSrc->height; *w_dst = (int)(h_src * fabs(a) + w_src * fabs(b));
*h_dst = (int)(w_src * fabs(a) + h_src * fabs(b));
} void ljb_cv_rotate(IplImage *imgSrc, IplImage *imgDst, double degree)
{
double angle, a, b;
int w_src, h_src, w_dst, h_dst;
double map[6];
CvMat map_matrix = cvMat(2, 3, CV_64FC1, map);
CvPoint2D32f pt = {0}; angle = degree * CV_PI / 180.;
a = sin(angle), b = cos(angle); w_src = imgSrc->width;
h_src = imgSrc->height; w_dst = imgDst->width;
h_dst = imgDst->height; pt = cvPoint2D32f(w_src / 2, h_src / 2);
cv2DRotationMatrix(pt, degree, 1.0, &map_matrix);//旋转中心,角度,尺度,生成2*3旋转矩阵 // Adjust rotation center to dst's center,
// otherwise you will get only part of the result
map[2] += (w_dst - w_src) / 2;
map[5] += (h_dst - h_src) / 2; cvWarpAffine(
imgSrc,
imgDst,
&map_matrix,
CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS,
cvScalarAll(0)
);
}
IplImage* img = cvLoadImage("E:\\bgtest.bmp", CV_LOAD_IMAGE_GRAYSCALE);
IplImage* dst = NULL;
int dstWidth, dstHeight = 0;
IplImage* imgRotate = NULL;
CvSize cvsize = {0};
ljb_cv_rotate_buf_size(img, 45, &dstWidth, &dstHeight);
cvsize.width = dstWidth;
cvsize.height = dstHeight;
imgRotate = cvCreateImage(cvsize, IPL_DEPTH_8U, 1);
cvZero(imgRotate);
ljb_cv_rotate(img, imgRotate, 45);
cvSaveImage("E:\\saltsingle3000.bmp",imgRotate);
理解可参考:
http://blog.csdn.net/xiaowei_cqu/article/details/7616044
http://blog.csdn.net/augusdi/article/details/9022719
封装了opencv的旋转图像函数的更多相关文章
- (4opencv)对OpenCV中“旋转”的思考和实验
我记得曾经有人对OpenCV的旋转吐槽,意思是它自己没有很好的关于选择的算法.在新的版本里面添加了这些函数(我还没有时间去看是什么时候pr的).现在一个比较棘手的问题,就是OpenCV中旋转 ...
- OpenCV:OpenCV图像旋转的代码
OpenCV图像旋转的代码 cv::transpose( bfM, bfM ) 前提:使用两个矩阵Mat型进行下标操作是不行的,耗费的时间太长了.直接使用两个指针对拷贝才是王道.不知道和OpenCV比 ...
- OpenCL + OpenCV 图像旋转
▶ 使用 OpenCV 从文件读取彩色的 png 图像,旋转一定角度以后写回文件 ● 代码,核函数 // rotate.cl //__constant sampler_t sampler = CLK_ ...
- opencv 缩放旋转
如果100*50的图要转成50*100 角度90或-90 旋转中心应该为 Point2f(image.rows / 2, image.rows / 2); // 图像旋转与缩放 // Author: ...
- opencv 图像旋转
理论 http://www.cnblogs.com/wangguchangqing/p/4045150.html 翻开任意一本图像处理的书,都会讲到图像的几何变换,这里面包括:仿射变换(affine ...
- OpenCV图像旋转
图像旋转是指图像按照某个位置转动一定角度的过程,旋转中图像仍保持这原始尺寸.图像旋转后图像的水平对称轴.垂直对称轴及中心坐标原点都可能会发生变换,因此需要对图像旋转中的坐标进行相应转换. 如下图: 假 ...
- opencv 图片旋转
import cv2 as cv import numpy as np # 图片旋转 img = cv.imread('../images/face.jpg', flags=1) # flags=1读 ...
- OpenCV 图像旋转实现
1 旋转矩形 首先建议阅读图像旋转算法原理-旋转矩阵,这篇博客可以让你很好地理解图像中的每一个点是如何进行旋转操作的.其中涉及到了图像原点与笛卡尔坐标原点之间的相互转换以及点旋转的一些公式推导. 这里 ...
- opencv图片旋转90度
#include<iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv ...
随机推荐
- 【VS开发】【图像处理】V4L2 pixel format
目录(?)[-] v4l2_pix_format定义 2 具体Pixel Format定义 1. v4l2_pix_format定义 [cpp] view plain copy /* * V I D ...
- 第七周&实验报告五
实验四 类的继承 •实验目的 •理解抽象类与接口的使用: •了解包的作用,掌握包的设计方法. •实验要求 •掌握使用抽象类的方法. •掌握使用系统接口的技术和创建自定义接口的方法. •了解 Java ...
- 洛谷P1600 天天爱跑步——题解
题目传送 首先要考虑入手点.先考虑一个一个玩家处理,显然不加优化的话,时间复杂度是O(n)的.发现对于玩家路径上的点都有一个观察员,一个都不能忽视,看起来是很难优化了.在做题时,发现一个思路很难想,就 ...
- Luogu P4823 [TJOI2013]拯救小矮人
题目 \(n^2\)的dp已经成为辣鸡做法了,%%%wch. 首先一个结论:\(a+b\)小的人在上. 这个东西我们有三种方法解决证明: 1.感性理解,\(a+b\)越大的人逃生能力越强,放在下面就越 ...
- 树型DP入门
题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知每个人的活跃指数和上司关系(当然不可能存在环),求邀请哪些人(多少人)来能使得晚 ...
- 数位dp(不要62)
http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:求区间内满足以下条件的数量 1.数位不能出现4,2.任意两相邻数位不能是62. 解法:数位dp[po ...
- 03: saltstack和ansible的区别和原理
1.1 SaltStack.Ansible.Puppet比较 1.SaltStack 1. saltStack由Python编写,为server-client模式的系统,自己本身支持多master. ...
- vue-router的query和params的区别
vue-router的query和params的区别 首先简单来说明一下$router和$route的区别 $router为VueRouter实例,想要导航到不同url,则使用$router.push ...
- win7系统下MongoDB 4.0.1的安装
环境: win7 - 64位系统 MongoDB下载地址: https://www.mongodb.com/download-center#community 版本: 4.0.1 安装步骤: 选择cu ...
- KVM安装配置笔记
系统环境centos6.6 一.KVM安装前系统相关操作: (1)修改内核模式为兼容内核启动 # grep -v "#" /etc/grub.confdevice (hd0) HD ...