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

最新文章

  1. 使用TortoiseGit对android studio工程进行代码版本控制
  2. javaweb project create
  3. 学习Coding-iOS开源项目日志(三)
  4. wap页面笔记
  5. Thrift 的原理和使用
  6. Java GC系列(4):垃圾回收监视和分析
  7. LinearRegression
  8. Zabbix监控解决方案
  9. 使用CSS完成元素居中的七种方法
  10. yui--datatable 更新table数据
  11. EditTex属性
  12. poj 1198 hdu 1401 搜索+剪枝 Solitaire
  13. 有关HTTP的粗读
  14. beta冲刺1
  15. 部署KVM
  16. (6).NET CORE微服务 Micro-Service ---- AOP框架
  17. ActiveMQ实战之 Queue点对点消息
  18. 关于《阿里巴巴Java开发规约》插件的安装与使用
  19. MySQL 两个死锁样例
  20. 【咸鱼教程】一个简单的弹出二级菜单UIPopupMenu

热门文章

  1. abp.event.on与abp.event.off使用
  2. HDU 3182 ——A Magic Lamp(思维)
  3. SCUT - 492 - 鬼符「搦手的鬼畜生」 - 简单数学
  4. 曹工说Spring Boot源码(5)-- 怎么从properties文件读取bean
  5. node.js使用swig模块
  6. UnknownPropertyException(Yii2)
  7. 更新 | 2019年9月计算机二级office模拟题库
  8. 003-基于impi zabbix监控r720 测试过程
  9. PAT Advanced 1033 To Fill or Not to Fill (25 分)
  10. win10将mongodb加入系统服务,官方源码报错问题记录