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. 如今在 Internet 上流传的“真正”的程序员据说是这样的

    如今在 Internet 上流传的“真正”的程序员据说是这样的: (1) 真正的程序员没有进度表,只有讨好领导的马屁精才有进度表,真正的程序员会让 领导提心吊胆. (2) 真正的程序员不写使用说明书, ...

  2. Labview按钮的机械动作

    LabVIEW 对于按钮控件的机械动作提供了六个不同的选择,它们可以通过右键按钮并选择机械动作来找到.这些不同的选项导致按钮输出的值的行为不同.下里将这六个选项做一个简短的总结: 单击时转换当用鼠标将 ...

  3. iOS: UUID and SSKeyChain

    需要加入SSKeyChain文件 传送门:SSKeyChain // // UniqueIDCreater.h // Housemart // // Created by Haozhen Li on ...

  4. oracle的常用函数 instr() 和substr()函数

    from:http://1055592535.iteye.com/blog/1676235 在Oracle中 可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符. 在一个字符串中查找 ...

  5. ASP.Net MVC开发基础学习笔记(7):数据查询页面

     前言 前面铺垫了那么多,今天我们就用MVC5 + EF6 + Bootstrap3来正式创建一个基本查询页面. 为什么从查询页面開始?嘿嘿.由于小弟的.Net生涯就是从查询页面開始的,记得正式工 ...

  6. 服务器允许js跨域

    header('Access-Control-Allow-Origin:*'); header('Access-Control-Allow-Methods:POST,GET'); header('Ac ...

  7. js常用总结

    常用总结,方便大家学习共享.   1.document.write(""); 输出语句 2.JS中的注释为// 3.传统的HTML文档顺序是:document->html-& ...

  8. Redis(八)-- Redis分布式锁实现

    一.使用分布式锁要满足的几个条件 系统是一个分布式系统(关键是分布式,单机的可以使用ReentrantLock或者synchronized代码块来实现) 共享资源(各个系统访问同一个资源,资源的载体可 ...

  9. ios Instruments 内存泄露

    本文转载至 http://my.oschina.net/sunqichao/blog?disp=2&p=3 虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄露还是 ...

  10. 解决wamp、vertrigo等集成环境安装后apache不能启动的问题

    如果不是端口的问题,通常就是由于缺少vc库文件的支持,把vc2005.vc2008.vc2010抖安装一遍就呢过解决问题