/20110408/ScaleAndRotationImage/main.cpp

https://github.com/itrufeng/learncv · C++ · 75 lines · 48 code · 4 blank · 23 comment · 2 complexity · 512a8f730abd7976bf2e66590947a954 MD5 · raw file

  1. /*
  2. * main.cpp
  3. *
  4. * Created on: 2011-4-8
  5. * Author: egame
  6. */
  7. #include <opencv/cv.h>
  8. #include <opencv/highgui.h>
  9. using namespace cv;
  10. Mat rotateImage(const Mat& source, double angle){
  11. Point2f src_center(source.cols/2.0F, source.rows/2.0F);
  12. Mat rot_mat = getRotationMatrix2D(src_center, angle, 1.0);
  13. Mat dst;
  14. warpAffine(source, dst, rot_mat, source.size());
  15. return dst;
  16. }
  17. int main(int args,char *argv[]){
  18. // 缩放比
  19. float scale = 0.5;
  20. // 旋转角
  21. double roation = 45.0;
  22. // 加载图
  23. IplImage *image = 0;
  24. // 缩放后图片
  25. IplImage *targetImage = 0;
  26. // 旋转后的图片
  27. IplImage roatationImage;
  28. // ----------
  29. // 验证
  30. if(!argv[1]){
  31. printf("缺少运行参数 图像路径");
  32. exit(0);
  33. }
  34. // 创建窗体
  35. cvNamedWindow("src",CV_WINDOW_AUTOSIZE);
  36. cvMoveWindow("src",100,100);
  37. cvNamedWindow("target",CV_WINDOW_AUTOSIZE);
  38. cvMoveWindow("target",200,200);
  39. cvNamedWindow("rotationtarget",CV_WINDOW_AUTOSIZE);
  40. cvMoveWindow("rotationtarget",300,300);
  41. // 加载图片
  42. image = cvLoadImage(argv[1],CV_LOAD_IMAGE_COLOR);
  43. if(!image){
  44. printf("image can't load");
  45. exit(0);
  46. }
  47. // 创建缩放图片
  48. CvSize targetSize;targetSize.width = image->width * scale;targetSize.height = image->height * scale;
  49. targetImage = cvCreateImage(targetSize,image->depth,3);
  50. // 缩放
  51. cvResize(image,targetImage,CV_INTER_LINEAR);
  52. // 原图像的多通道矩阵
  53. const Mat imgMat(image,0);
  54. // 旋转
  55. Mat rotateMat = rotateImage(imgMat,roation);
  56. roatationImage = IplImage(rotateMat);
  57. // 显示图片
  58. cvShowImage("src",image);
  59. cvShowImage("target",targetImage);
  60. cvShowImage("rotationtarget",&roatationImage);
  61. // 等待输入
  62. cvWaitKey(0);
  63. // 释放窗体
  64. cvDestroyWindow("src");
  65. cvDestroyWindow("target");
  66. cvDestroyWindow("rotationtarget");
  67. // 释放图片
  68. cvReleaseImage(&image);
  69. cvReleaseImage(&targetImage);
  70. return 0;
  71. }