封装了opencv的旋转图像函数
2024-10-07 04:52:37
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
最新文章
- 使用TortoiseGit对android studio工程进行代码版本控制
- javaweb project create
- 学习Coding-iOS开源项目日志(三)
- wap页面笔记
- Thrift 的原理和使用
- Java GC系列(4):垃圾回收监视和分析
- LinearRegression
- Zabbix监控解决方案
- 使用CSS完成元素居中的七种方法
- yui--datatable 更新table数据
- EditTex属性
- poj 1198 hdu 1401 搜索+剪枝 Solitaire
- 有关HTTP的粗读
- beta冲刺1
- 部署KVM
- (6).NET CORE微服务 Micro-Service ---- AOP框架
- ActiveMQ实战之 Queue点对点消息
- 关于《阿里巴巴Java开发规约》插件的安装与使用
- MySQL 两个死锁样例
- 【咸鱼教程】一个简单的弹出二级菜单UIPopupMenu
热门文章
- abp.event.on与abp.event.off使用
- HDU 3182 ——A Magic Lamp(思维)
- SCUT - 492 - 鬼符「搦手的鬼畜生」 - 简单数学
- 曹工说Spring Boot源码(5)-- 怎么从properties文件读取bean
- node.js使用swig模块
- UnknownPropertyException(Yii2)
- 更新 | 2019年9月计算机二级office模拟题库
- 003-基于impi zabbix监控r720 测试过程
- PAT Advanced 1033 To Fill or Not to Fill (25 分)
- win10将mongodb加入系统服务,官方源码报错问题记录