对图像进行旋转、缩放等变换

//时间: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;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值