opencv学习笔记——图像缩放函数resize
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的更多相关文章
- OpenCV 学习笔记03 findContours函数
opencv-python 4.0.1 1 函数释义 词义:发现轮廓! 从二进制图像中查找轮廓(Finds contours in a binary image):轮廓是形状分析和物体检测和识别的 ...
- 【opencv学习笔记】SetImageROI函数设置ROI区域的作用及用法
虽然先前知道ROI区域是感兴趣区域,但是真正看到调用了OpenCV的cvSetImageROI函数时,并不知道它的作用,所以还是单独写了一段代码对这个函数进行探究. OpenCVchm文档中对cv ...
- opencv学习笔记之cvSobel 函数解析
首先,我们来开一下计算机是如何检测边缘的.以灰度图像为例,它的理论基础是这样的,如果出现一个边缘,那么图像的灰度就会有一定的变化,为了方便假设由黑渐变为白代表一个边界,那么对其灰度分析,在边缘的灰度函 ...
- opencv学习笔记-图像对比度、亮度调节
在数学中我们学过线性理论,在图像亮度和对比度调节中同样适用,看下面这个公式: 在图像像素中其中: 参数f(x)表示源图像像素. 参数g(x) 表示输出图像像素. 参数a(需要满足a>0)被称为增 ...
- opencv学习笔记-图像叠加、混合
在图像处理中,目标区域定义为感兴趣区域ROI(region of Interest),这是后期图像处理的基础,在获取ROI后,进行一些列的处理.ROI区域在Opencv中就是Rect,先构建Rect, ...
- OpenCV 学习笔记03 drawContours函数
opencv-python 4.0.1 轮廓的绘制或填充. cv2.drawContours(image, contours, contourIdx, color[, thickness[, li ...
- OpenCV 学习笔记03 threshold函数
opencv-python 4.0.1 简介:该函数是对数组中的每一个元素(each array element)应用固定级别阈值(Applies a fixed-level threshold) ...
- opencv学习笔记——cv::CommandLineParser函数详解
命令行解析类CommandLineParser 该类的作用主要用于命令行的解析,也就是分解命令行的作用.以前版本没这个类时,如果要运行带参数的.exe,必须在命令行中输入文件路径以及各种参数,并且输入 ...
- opencv学习笔记——cv::mean()函数详解
opencv中封装了一个专门用于求解cv::Mat均值的函数,即cv::mean(&cv::Mat),该函数会得到Mat中各个通道的均值,若要获取指定通道的均值,做进一步解析即可. 具体使用方 ...
随机推荐
- 在windows下编译x264
最近因为各种原因,对流媒体的学习,突然中断在了编码这块.今天难得静下心来,从新拿起了代码. 对encode这边,因为之前虽然也接触了,也找了两个例子,但目前还没真正开始,所以先从编译x264这个库开始 ...
- RelativeLayout用代码兑现布局
RelativeLayout用代码实现布局TextView txt1 = new TextView(this); RelativeLayout.LayoutParams params = n ...
- C Language Study - 函数指针的使用
函数指针的使用 1.函数指针定义 第一次使用函数指针,我是这样声明的,typedef void ( *pSimulatepks )( uint8 *prxBuf, uint8 *prxBufLen ) ...
- 【Java NIO的深入研究2】RandomAccessFile的使用
RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须 ...
- 对于jsp中编码的理解
1.会话都是从客户端也就是浏览器开始发起的,首先用户将地址输入到地址栏中, 当用户输入enter或者点击转到的按钮时,浏览器会根据当前页面的charset对地址栏中的地址进行encode一次,当服务器 ...
- zookeeper命令行
ZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] delqu ...
- [转]ASP.NET MVC 5 - 创建连接字符串(Connection String)并使用SQL Server LocalDB
您创建的MovieDBContext类负责处理连接到数据库,并将Movie对象映射到数据库记录的任务中.你可能会问一个问题,如何指定它将连接到数据库? 实际上,确实没有指定要使用的数据库,Entity ...
- ios iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)
iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) 转自容芳志大神的博客:http://www.cnblogs.com/stoic/archive/2013/02/27/2940 ...
- python2.0 s12 day8 _ 堡垒机前戏paramiko模块
堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 paramiko模块是做主机管理的,他模拟了一个ssh. 有两种形式连接形式, ...
- hadoop程序MapReduce之average
需求:求多门课程的平均值. 样板:math.txt zhangsan 90 lisi 88 wanghua 80 china.txt zhangsan 80lisi 90wanghua 88 输出:z ...