对图像进行旋转、缩放等变换
来源:互联网 发布:it累吗 编辑:程序博客网 时间:2024/04/28 13:23
//时间:2015年6月22日
//功能:完成一个图形的几何变换
//函数:
//1、改变图像大小与输出图像大小相同
// void cvResize( const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR );
// 参数说明: const CvArr* src 输入图像 CvArr* dst 输出图像 int interpolation 插值方式
//2、从图像中提取四边形,提取象素四边形,使用子象素精度
// void cvGetQuadrangleSubPix( const CvArr* src, CvArr* dst, const CvMat* map_matrix );
// dst( x+width(dst)/2 , y+heigh(dst)/2 ) = src( A11x + A12y + b1 , A21x + A22y + b2 )
//收货:
//1、字母后边加f,表示单精度浮点型
//2、使用cvGetQuadrangleSubPix进行图像旋转等操作,及其使用方法。
#include <cv.h>
#include <highgui.h>
using namespace std;
int main()
{
const char * m_PicName = "华山论剑.jpg";
IplImage * mp_Pic = cvLoadImage( m_PicName , CV_LOAD_IMAGE_UNCHANGED );
//载入检测
if ( 0 == mp_Pic )
{
cout<<"载入图片失败!"<<endl;
return -1;
}
int m_Angle = 30;//旋转角度
int m_Opt = 1;//1:加缩放 0:不加缩放
double m_Factor;//缩放因子
IplImage * mp_Pic_Zoom = cvCreateImage( cvSize( mp_Pic->width/3 , mp_Pic->height/3 ) , mp_Pic->depth , mp_Pic->nChannels );
cvResize( mp_Pic , mp_Pic_Zoom , CV_INTER_NN );
float m_Member[6];
if ( 0 == m_Opt )
m_Factor = 1;
else
m_Factor = (cos(m_Angle * CV_PI/180.) + 1) / 2;
m_Member[0] = (float)( m_Factor * cos( -m_Angle * CV_PI/180. ) );
m_Member[1] = (float)( m_Factor * sin( -m_Angle * CV_PI/180. ) );
m_Member[3] = -m_Member[1];
m_Member[4] = -m_Member[0];
//将中心移动到中心
m_Member[2] = mp_Pic->width * 0.5f;//后边加f表示保存为单精度浮点型
m_Member[5] = mp_Pic->height * 0.5f;
CvMat m_M = cvMat( 2 , 3 , CV_32F , m_Member );
IplImage * mp_Pic_Rotate = cvCreateImage( cvSize( mp_Pic->width , mp_Pic->height ) , mp_Pic->depth , mp_Pic->nChannels );
cvZero( mp_Pic_Rotate );
cvGetQuadrangleSubPix( mp_Pic , mp_Pic_Rotate , &m_M);
cvNamedWindow(" 原图 " , 0);
cvShowImage( " 原图 " , mp_Pic );
cvNamedWindow(" 缩放图 " , 0);
cvShowImage( " 缩放图 " , mp_Pic_Zoom );
cvNamedWindow(" 旋转图 " , 0);
cvShowImage( " 旋转图 " , mp_Pic_Rotate );
cvWaitKey(0);
cvReleaseImage( &mp_Pic );
cvReleaseImage( &mp_Pic_Zoom );
cvReleaseImage( &mp_Pic_Rotate );
cvDestroyAllWindows;
return 0;
}
//功能:完成一个图形的几何变换
//函数:
//1、改变图像大小与输出图像大小相同
// void cvResize( const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR );
// 参数说明: const CvArr* src 输入图像 CvArr* dst 输出图像 int interpolation 插值方式
//2、从图像中提取四边形,提取象素四边形,使用子象素精度
// void cvGetQuadrangleSubPix( const CvArr* src, CvArr* dst, const CvMat* map_matrix );
// dst( x+width(dst)/2 , y+heigh(dst)/2 ) = src( A11x + A12y + b1 , A21x + A22y + b2 )
//收货:
//1、字母后边加f,表示单精度浮点型
//2、使用cvGetQuadrangleSubPix进行图像旋转等操作,及其使用方法。
#include <cv.h>
#include <highgui.h>
using namespace std;
int main()
{
const char * m_PicName = "华山论剑.jpg";
IplImage * mp_Pic = cvLoadImage( m_PicName , CV_LOAD_IMAGE_UNCHANGED );
//载入检测
if ( 0 == mp_Pic )
{
cout<<"载入图片失败!"<<endl;
return -1;
}
int m_Angle = 30;//旋转角度
int m_Opt = 1;//1:加缩放 0:不加缩放
double m_Factor;//缩放因子
IplImage * mp_Pic_Zoom = cvCreateImage( cvSize( mp_Pic->width/3 , mp_Pic->height/3 ) , mp_Pic->depth , mp_Pic->nChannels );
cvResize( mp_Pic , mp_Pic_Zoom , CV_INTER_NN );
float m_Member[6];
if ( 0 == m_Opt )
m_Factor = 1;
else
m_Factor = (cos(m_Angle * CV_PI/180.) + 1) / 2;
m_Member[0] = (float)( m_Factor * cos( -m_Angle * CV_PI/180. ) );
m_Member[1] = (float)( m_Factor * sin( -m_Angle * CV_PI/180. ) );
m_Member[3] = -m_Member[1];
m_Member[4] = -m_Member[0];
//将中心移动到中心
m_Member[2] = mp_Pic->width * 0.5f;//后边加f表示保存为单精度浮点型
m_Member[5] = mp_Pic->height * 0.5f;
CvMat m_M = cvMat( 2 , 3 , CV_32F , m_Member );
IplImage * mp_Pic_Rotate = cvCreateImage( cvSize( mp_Pic->width , mp_Pic->height ) , mp_Pic->depth , mp_Pic->nChannels );
cvZero( mp_Pic_Rotate );
cvGetQuadrangleSubPix( mp_Pic , mp_Pic_Rotate , &m_M);
cvNamedWindow(" 原图 " , 0);
cvShowImage( " 原图 " , mp_Pic );
cvNamedWindow(" 缩放图 " , 0);
cvShowImage( " 缩放图 " , mp_Pic_Zoom );
cvNamedWindow(" 旋转图 " , 0);
cvShowImage( " 旋转图 " , mp_Pic_Rotate );
cvWaitKey(0);
cvReleaseImage( &mp_Pic );
cvReleaseImage( &mp_Pic_Zoom );
cvReleaseImage( &mp_Pic_Rotate );
cvDestroyAllWindows;
return 0;
}
0 0
- 对图像进行旋转、缩放等变换
- 一些图像变换1402,旋转、缩放、二值化、边界涂黑等
- iOS 使用手势UIGestureRecognizer对图像进行缩放、移动、旋转等操作
- iOS 使用手势UIGestureRecognizer对图像进行缩放、移动、旋转等操作
- 使用手势UIGestureRecognizer对图像进行缩放、移动、旋转操作
- UIGestureRecognizer对图像进行缩放、移动、旋转操作
- Pygame学习(3)-----如何对图像进行翻转,缩放,旋转
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- 图像几何变换:旋转,缩放,斜切
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- OpenCV-图像几何变换:旋转,缩放,斜切
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- 图像几何变换:旋转,缩放,斜切
- OpenCV-图像几何变换:旋转,缩放,斜切 .
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- 图像几何变换:旋转,缩放,斜切
- [leetcode] Basic Calculator II
- 开启嵌入式之旅
- 数组的初始化
- 自己动手封装js工具类(JS中定义类的几种方式)
- UTF-8, UTF-16, UTF-16LE, UTF-16BE的区别
- 对图像进行旋转、缩放等变换
- JVM的内存区域划分
- js数组2
- 开始
- 11个强大的Visual Studio调试小技巧
- Java基础之多线程
- TCP/IP协议族-----10、移动IP
- java学习之旅07--整数类型_进制转换_编程中的L问题
- Xpages引用jquery的两种方法