opencv提供了一种图像缩放函数

功能:实现对输入图像缩放到指定大小

函数原型:

void cv::resize  ( InputArray  src,
OutputArray dst,
Size dsize,
double fx = ,
double fy = ,
int interpolation = INTER_LINEAR
)

函数参数:

InputArray src:输入图像,可以是Mat类型

OutputArray dst:输出图像,其尺寸由第三个参数dsize(如果dsize不为0),当dsize为0,输出图像的尺寸由src.size()、fx和fy计算得到,但是输出图像类型与输入图像一致

Size dsize:输出图像的尺寸,如果dsize设置为0,则dsize的值将由下式计算得到

dsize=Size(round(fx*src.cols), round(fy*src.rows))

需要注意的是dsize和fx、fy不能同时为0

. double fx = 0: 水平方向上的缩放系数,当fx为0时,将由如下公式计算得到

(double)dsize.width/src.cols

. double fy = 0: 垂直方向上的缩放系数,如果fy为0,将由如下公式计算得到

(double)dsize.height/src.rows

. int interpolation=INTER_LINEAR: 图像缩放的插值算法类型,默认是INTER_LINEAR(线性插值),在opencv3.2中通过查看InterpolationFlags查看详细信息,可选的插值方式如下:

以上的情况是没有初始化目标图像的类型和尺寸也就是没有提前设置好目标图像的类型和尺寸而是由函数根据size.size,dsize,fx和fy计算得到,如果想调整输入图像适应已经创建好的目标图像的时候应该这样调用resize()函数:

resize(src, dst, dst.size(), , , interpolation);

如果指定图像在水平方向和垂直方向的缩放系数,则调用方式如下:

resize(src, dst, Size(), 0.5, 0.5, interpolation);

例子:

/*
*程序主要演示了不同的插值算法在图像缩放中效果不同
*其中图像放大图像原图像用的是缩小后的图像
*也可以将g_shrinkImage改为g_srcImage观察直接从原图像放大效果
*/ #include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp> using namespace std;
using namespace cv; //定义全局变量
Mat g_srcImage;
Mat g_shrinkImage;
Mat g_enlargeImage; //定义轨迹条属性
const int resizeTypeMaxValue = ; //共八种插值运算类型
int resizeTypeValue = ; //声明类型转换函数
int typeDef(int typeNum); //声明回调函数
void shrinkFun(int, void*);
void enlargeFun(int, void*); int main()
{
g_srcImage = imread("resize.jpg"); //判断文件是否加载成功
if(!g_srcImage.data)
{
cout << "图像加载失败!" << endl;
return -;
}
else
cout << "图像加载成功!" << endl << endl; namedWindow("原图像", WINDOW_AUTOSIZE);
imshow("原图像", g_srcImage); //轨迹条属性
char resizeTypeName[];
sprintf(resizeTypeName, "插值运算类型 %d", resizeTypeMaxValue); namedWindow("图像缩小", WINDOW_AUTOSIZE);
namedWindow("图像放大", WINDOW_AUTOSIZE); //创建轨迹条
createTrackbar(resizeTypeName, "图像缩小", &resizeTypeValue, resizeTypeMaxValue, shrinkFun);
shrinkFun(resizeTypeValue, ); createTrackbar(resizeTypeName, "图像放大", &resizeTypeValue, resizeTypeMaxValue, enlargeFun);
enlargeFun(resizeTypeValue, ); waitKey(); return ;
} int typeDef(int typeNum)
{
int type; switch(typeNum)
{
case :
type = INTER_NEAREST; break;
case :
type = INTER_LINEAR; break;
case :
type = INTER_CUBIC; break;
case :
type = INTER_AREA; break;
case :
type = INTER_LANCZOS4; break;
default:
break;
} return type; } //图像缩小函数
void shrinkFun(int, void*)
{
int shrinkType;
shrinkType = typeDef(resizeTypeValue);
resize(g_srcImage, g_shrinkImage, Size(g_srcImage.cols/, g_srcImage.rows/), , , shrinkType);
imshow("图像缩小", g_shrinkImage);
} //图像放大函数
void enlargeFun(int, void*)
{
int enlargeType;
enlargeType = typeDef(resizeTypeValue);
resize(g_shrinkImage, g_enlargeImage, Size(g_shrinkImage.cols*, g_shrinkImage.rows*), , , enlargeType);
imshow("图像放大", g_enlargeImage);
}

最新文章

  1. 判断用户输入的银行卡号是否正确--基于Luhn算法的格式校验
  2. sqlyog不用密码登陆(强制取消)
  3. 开发Adobe AIR移动应用程序的考虑事项
  4. pch头文件
  5. phpunit安装参考
  6. 集合、ArrayList 集合。Stack集合。Queue集合。以及Hashtable集合
  7. Open vSwitch FAQ (二)
  8. 为Activity设置特定权限才能启动
  9. 避免ssh断开导致运行命令的终止:screen
  10. Android中ViewStub组件使用
  11. 简单介绍如何使用robotium进行自动化测试
  12. Hdfs读取文件到本地总结
  13. ES6.3.2 index操作源码流程
  14. C# dynamic类型序列化和反序列化之Newtonsoft.Json,动态解析远端返回的jSON数据
  15. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-&gt;新增“行政区域管理”,同时大批量树采用异步加载
  16. C# DataGridView改变行颜色无效问题
  17. python全栈开发day101-认证组件、权限组件、频率组件
  18. 【转】WPF中的窗口的生命周期
  19. putty加了密钥ssh不能登陆,PuTTY:server refused our key问题的解决(转)
  20. 深入理解Hadoop之HDFS架构

热门文章

  1. imx6 android4.2 编译
  2. ASP.NET WebApi 路由配置【转】
  3. asp.net线程批量导入数据时通过ajax获取执行状态
  4. html5--移动端视频video的android兼容,去除播放控件、全屏等
  5. sublime text 2 破解
  6. 用cocos2d 2.1制作一个过河小游戏(4): 游戏主逻辑BaseLayer设计
  7. swift -- 如何在swift下,使用类似oc的pch文件功能
  8. Python Scrapy 自动爬虫注意细节(1)
  9. file.wirtelines()方法【python】
  10. CentOS6.5安装图形界面(Gnome)