滑动条缩放图片

这篇博客通过OpenCV和Qt展示了如何创建一个应用程序,使用滑动条动态调整图像的缩放比例。代码中定义了回调函数onTrackbarSlider,该函数根据滑动条的位置改变缩放因子,并使用cvResize函数进行图像缩放。最终,缩放后的图像在指定窗口中更新显示。

[cpp]  view plain  copy
  1. #include "opencv/cv.h"  
  2. #include "opencv/highgui.h"  
  3. #include <stdio.h>  
  4.   
  5. int slider_position = 0;    //滚动条的位置变量  
  6. double  fScale = 1.0;       //缩放比例   
  7.   
  8. CvSize imageSize0;      //原始图像尺寸      
  9. CvSize imageSize1;      //目标图像尺寸  
  10.   
  11. IplImage* dst_image = NULL;  
  12. IplImage* src_image = NULL;  
  13.   
  14. void onTrackbarSlider(int pos);//回调函数  
  15.   
  16.   
  17. int main(int argc,char** argv)  
  18. {  
  19.     //读取文件  
  20.     src_image = cvLoadImage(argv[1]);  
  21.       
  22.     //初始化图像大小  
  23.     imageSize0.width = src_image->width;  
  24.     imageSize0.height = src_image->height;  
  25.       
  26.         //创建窗口  
  27.     cvNamedWindow("Image",1);  
  28.       
  29.         //在指定窗口显示图像  
  30.     cvShowImage("Image",src_image);  
  31.       
  32.     cvCreateTrackbar(  
  33.             "Scale",  
  34.             "Image",  
  35.             &slider_position,  
  36.             120,  
  37.             onTrackbarSlider  
  38.             );    
  39.       
  40.     //等待ESC按键事件  
  41.     while(1){  
  42.         if(cvWaitKey(15) == 27) break;  
  43.     }  
  44.   
  45.     //摧毁窗口并释放内存  
  46.     cvReleaseImage(&src_image);  
  47.     cvReleaseImage(&dst_image);  
  48.     cvDestroyWindow("Image");  
  49.   
  50.     return 0;  
  51. }  
  52.   
  53.   
  54. void onTrackbarSlider(int pos)//回调函数  
  55. {  
  56.     //由pos(0~120)映射到fScale(2~8 )  
  57.     fScale = pos /20.0+ 2;    
  58.       
  59.     //计算目标图像的大小  
  60.     imageSize1.width = imageSize0.width * fScale;  
  61.     imageSize1.height =imageSize0.height * fScale;    
  62.       
  63.     //释放资源并重新创建图像  
  64.     cvReleaseImage(&dst_image);  
  65.     dst_image = cvCreateImage(imageSize1,src_image->depth,src_image->nChannels);  
  66.       
  67.     //缩放图像  
  68.     cvResize(src_image,dst_image,CV_INTER_AREA);  
  69.       
  70.     //在指定窗口显示图像  
  71.     cvShowImage("Image",dst_image);  
  72.       
  73.     printf("TrackbarPos = %d\n",pos);  
  74.     printf("fScale = %.1f\n",fScale);  
  75.       
  76. }  


效果图:







[cpp]  view plain  copy
  1. #include "opencv/cv.h"  
  2. #include "opencv/highgui.h"  
  3. #include <stdio.h>  
  4.   
  5. int slider_position = 0;    //滚动条的位置变量  
  6. double  fScale = 1.0;       //缩放比例   
  7.   
  8. CvSize imageSize0;      //原始图像尺寸      
  9. CvSize imageSize1;      //目标图像尺寸  
  10.   
  11. IplImage* dst_image = NULL;  
  12. IplImage* src_image = NULL;  
  13.   
  14. void onTrackbarSlider(int pos);//回调函数  
  15.   
  16.   
  17. int main(int argc,char** argv)  
  18. {  
  19.     //读取文件  
  20.     src_image = cvLoadImage(argv[1]);  
  21.       
  22.     //初始化图像大小  
  23.     imageSize0.width = src_image->width;  
  24.     imageSize0.height = src_image->height;  
  25.       
  26.         //创建窗口  
  27.     cvNamedWindow("Image",1);  
  28.       
  29.         //在指定窗口显示图像  
  30.     cvShowImage("Image",src_image);  
  31.       
  32.     cvCreateTrackbar(  
  33.             "Scale",  
  34.             "Image",  
  35.             &slider_position,  
  36.             120,  
  37.             onTrackbarSlider  
  38.             );    
  39.       
  40.     //等待ESC按键事件  
  41.     while(1){  
  42.         if(cvWaitKey(15) == 27) break;  
  43.     }  
  44.   
  45.     //摧毁窗口并释放内存  
  46.     cvReleaseImage(&src_image);  
  47.     cvReleaseImage(&dst_image);  
  48.     cvDestroyWindow("Image");  
  49.   
  50.     return 0;  
  51. }  
  52.   
  53.   
  54. void onTrackbarSlider(int pos)//回调函数  
  55. {  
  56.     //由pos(0~120)映射到fScale(2~8 )  
  57.     fScale = pos /20.0+ 2;    
  58.       
  59.     //计算目标图像的大小  
  60.     imageSize1.width = imageSize0.width * fScale;  
  61.     imageSize1.height =imageSize0.height * fScale;    
  62.       
  63.     //释放资源并重新创建图像  
  64.     cvReleaseImage(&dst_image);  
  65.     dst_image = cvCreateImage(imageSize1,src_image->depth,src_image->nChannels);  
  66.       
  67.     //缩放图像  
  68.     cvResize(src_image,dst_image,CV_INTER_AREA);  
  69.       
  70.     //在指定窗口显示图像  
  71.     cvShowImage("Image",dst_image);  
  72.       
  73.     printf("TrackbarPos = %d\n",pos);  
  74.     printf("fScale = %.1f\n",fScale);  
  75.       
  76. }  


效果图:







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值