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);
}

opencv学习笔记——图像缩放函数resize的更多相关文章

  1. OpenCV 学习笔记03 findContours函数

    opencv-python   4.0.1 1 函数释义 词义:发现轮廓! 从二进制图像中查找轮廓(Finds contours in a binary image):轮廓是形状分析和物体检测和识别的 ...

  2. 【opencv学习笔记】SetImageROI函数设置ROI区域的作用及用法

    虽然先前知道ROI区域是感兴趣区域,但是真正看到调用了OpenCV的cvSetImageROI函数时,并不知道它的作用,所以还是单独写了一段代码对这个函数进行探究.   OpenCVchm文档中对cv ...

  3. opencv学习笔记之cvSobel 函数解析

    首先,我们来开一下计算机是如何检测边缘的.以灰度图像为例,它的理论基础是这样的,如果出现一个边缘,那么图像的灰度就会有一定的变化,为了方便假设由黑渐变为白代表一个边界,那么对其灰度分析,在边缘的灰度函 ...

  4. opencv学习笔记-图像对比度、亮度调节

    在数学中我们学过线性理论,在图像亮度和对比度调节中同样适用,看下面这个公式: 在图像像素中其中: 参数f(x)表示源图像像素. 参数g(x) 表示输出图像像素. 参数a(需要满足a>0)被称为增 ...

  5. opencv学习笔记-图像叠加、混合

    在图像处理中,目标区域定义为感兴趣区域ROI(region of Interest),这是后期图像处理的基础,在获取ROI后,进行一些列的处理.ROI区域在Opencv中就是Rect,先构建Rect, ...

  6. OpenCV 学习笔记03 drawContours函数

    opencv-python   4.0.1 轮廓的绘制或填充. cv2.drawContours(image, contours, contourIdx, color[, thickness[, li ...

  7. OpenCV 学习笔记03 threshold函数

    opencv-python   4.0.1 简介:该函数是对数组中的每一个元素(each array element)应用固定级别阈值(Applies a fixed-level threshold) ...

  8. opencv学习笔记——cv::CommandLineParser函数详解

    命令行解析类CommandLineParser 该类的作用主要用于命令行的解析,也就是分解命令行的作用.以前版本没这个类时,如果要运行带参数的.exe,必须在命令行中输入文件路径以及各种参数,并且输入 ...

  9. opencv学习笔记——cv::mean()函数详解

    opencv中封装了一个专门用于求解cv::Mat均值的函数,即cv::mean(&cv::Mat),该函数会得到Mat中各个通道的均值,若要获取指定通道的均值,做进一步解析即可. 具体使用方 ...

随机推荐

  1. i2c驱动笔记

    基于bcm5300x芯片 注册平台总线设备,设备名bcm5300x_i2c,通过名称与驱动进行匹配. 注册平台总线驱动.驱动名称"bcm5300x_i2c",与设备进行匹配. dr ...

  2. (转)ffplay的音视频同步分析之视频同步到音频

          以前工作中参与了一些音视频程序的开发,不过使用的都是芯片公司的SDK,没有研究到更深入一层,比如说音视频同步是怎么回事.只好自己抽点时间出来分析开源代码了,做音视频编解码的人都知道ffmp ...

  3. linux -- 进程的查看、进程id的获取、进程的杀死

    进程查看 ps ax : 显示当前系统进程的列表 ps aux : 显示当前系统进程详细列表以及进程用户 ps ax|less : 如果输出过长,可能添加管道命令 less查看具体进程, 如:ps a ...

  4. 【转】Linux内核源码分析方法

    一.内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次.如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径.我们都 ...

  5. 修改Java标准库源码

    以下是摘抄,实际操作没有测试   先前我曾提到,原本想借由“改动Java标准库源码”来测知Class object的生成,但由于其ctor原始设计为private,也就是说不可能透过这个管道生成Cla ...

  6. CCNet持续集成编译中SVN问题解决

    SVN问题 BUILD EXCEPTION Error Message: ThoughtWorks.CruiseControl.Core.CruiseControlException: Source ...

  7. 线程间通信:Queue

    线程间使用队列来互相交换数据,数据可以是字符串 .列表 .元组等,Queue 是提供队列操作的模块,常见的队列如下: FIFO:First In First Out 先进先出队列,也就是最先放进去的数 ...

  8. VS-Qt-OSG-CMake基本项目框架

    在VS-Qt-CMake基础上,打开mainwindow.ui,添加一个QWidget,然后在widget上右键-提升,选择SceneViewWidget CMakeLists.txt中添加了OSG相 ...

  9. Android 使用线性布局LinearLayout和Button实现一个点红块游戏

    这个游戏的功能类似打地鼠. 项目地址:https://github.com/moonlightpoet/RedBlock 程序下载试玩地址:https://github.com/moonlightpo ...

  10. nested exception is org.springframework.beans.factory.BeanCreationException: 不能注入对象 创建对象失败 spring

    [出现错误的背景] 在使用Spring+SpringMVC+Mybatis SSM集成框架时,服务器启动就会报错. [错误根源] XML配置错误. [解决方案] 第一步.查找springmvc.xml ...