OpenCV中使用cvResize函数或resize函数进行图象放缩

//cvResize函数原型void cvResize( const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR );  

src:输入图像.(IplImage)

dst:输出图像.(IplImage)

interpolation:差值方法:

CV_INTER_NN - 最近邻差值

CV_INTER_LINEAR - 双线性差值 (缺省使用)

CV_INTER_AREA - 使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于  CV_INTER_NN  方法

CV_INTER_CUBIC - 立方差值

函数cvResize 将图像  src 改变尺寸得到与  dst 同样大小。若设定ROI,函数将按常规支持 ROI.

使用C++编程时使用resize函数进行图像缩放

//resize函原型CV_EXPORTS_W void resize( InputArray src, OutputArray dst,
                              Size dsize, double fx=0, double fy=0,
                              int interpolation=INTER_LINEAR );  

注:dsize与(fx,fy)不能同时为0

示例程序:

使用ubuntu14.04+OpenCV 3.1.0

/**------------------------------------------------------------------**/
/**描述:包含程序所依赖的头文件**/
/**------------------------------------------------------------------**/
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <string>
/**------------------------------------------------------------------**/
/**描述:程序所用的命名空间**/
/**------------------------------------------------------------------**/
using namespace cv;
using namespace std;
/**------------------------------------------------------------------**/
/**描述:系统全局常量**/
/**------------------------------------------------------------------**/
//目标图片的文件名,需要放置在工程目录下
const string TagrImg = "Angelababy.jpeg";
//定义窗口标题
const char SrcWinNa[] = "SrcWindow";
const char GryWinNa[] = "GryWindow";
const char ResWinNa[] = "ResWindow";
/**------------------------------------------------------------------**/
/**描述:系统全局变量**/
/**------------------------------------------------------------------**/
//放缩倍数
double scale=0.4;

int main(int argc, char **argv)
{
    /**原图像的读取及显示-----------------------------------------------**/
    //读取图片
    Mat SrcImg = imread(TagrImg);
    //检查是否读取成功
    if(!SrcImg.data)
    {
        cout<<"读取失败,程序流产"<<endl;
        cout<<"请检查工程目录下是否存在"<<TagrImg<<endl;
        return -1;
    }
    //创建窗口显示原图像
    cvNamedWindow(SrcWinNa, CV_WINDOW_AUTOSIZE);
    imshow(SrcWinNa, SrcImg);

    /**图片缩放及显示--------------------------------------------------**/
    //设置缩放后的图片的尺寸
    Size ResImgSiz = Size(SrcImg.cols*scale, SrcImg.rows*scale);
    Mat ResImg = Mat(ResImgSiz, SrcImg.type());
    resize(SrcImg, ResImg, ResImgSiz, CV_INTER_CUBIC);
    //创建窗口用于显示缩放后的图像
    cvNamedWindow(ResWinNa, CV_WINDOW_AUTOSIZE);
    imshow(ResWinNa, ResImg);
    cvWaitKey(0);
    return 1;
}

将图片缩小到0.5倍的效果图:

时间: 2024-10-06 16:50:47

OpenCV中使用cvResize函数或resize函数进行图象放缩的相关文章

窗体的基类中没有设定大小,所以才不能居中,若要窗体居中,必须使用setfixedsize()函数或者resize()函数设定窗体的大小,居中才能正常使用

最近开发中,遇到了窗体不能居中的问题,看了网上的很多文章,窗口居中,无非都是move至窗口的中心目标; 有两种方式, 一种在构造函数中直接计算中心坐标; 另一种是在窗口show后再move至相应坐标.但是自己在构造函数中添加了对应的句子以后,窗体不在窗口的(0,0)点显示,反而在右下角显示,自己很是郁闷.网上的两种方法,基本操作如下: 方法一:在窗口(QWidget类及派生类)的构造函数中添加如下代码: #include <QDesktopWidget> //.......QDesktopWi

STL容器的reserve()函数和resize()函数解析

以vector为例,我们都知道可以用reserve()和resize()函数来为容器预留空间或者调整它的大小. 不过从它俩的名字上可以看出区别: reserve():serve是"保留"的词根,所以是用来保留,预留容量的,并不改变容器的有效元素个数. resize():size是"大小"的意思,它主要用来调整容易有效元素的个数,有时候也会造成容量变大. 先解释两个概念: 容量:即capacity,是指容器在自由内存中获得了多大的存储空间,容量为100并不代表容器就有

OpenCV中图像算术操作与逻辑操作

OpenCV中图像算术操作与逻辑操作 在图像处理中有两类最重要的基础操作分别是图像点操作与块操作,简单点说图像点操作就是图像每个像素点的相关逻辑与几何运算.块操作最常见就是基于卷积算子的各种操作.实现各种不同的功能.今天小编就跟大家一起学习OpenCV中图像点操作相关的函数与应用场景.常见算术运算包括加.减.乘.除,逻辑运算包括与.或.非.异或.准备工作: 选择两张大小一致的图像如下.加载成功以后显示如下: 加法操作结果如下: 减法操作结果如下: 乘法操作结果如下: 除法操作结果如下: 权重加法

[OpenCV-Python] OpenCV 中计算摄影学 部分 IX 对象检测 部分 X

部分 IX计算摄影学 49 图像去噪目标 ? 学习使用非局部平均值去噪算法去除图像中的噪音 ? 学习函数 cv2.fastNlMeansDenoising(),cv2.fastNlMeansDenoisingColored()等原理 在前面的章节中我们已经学习了很多图像平滑技术,比如高斯平滑,中值平滑等,当噪声比较小时这些技术的效果都是很好的.在这些技术中我们选取像素周围一个小的邻域然后用高斯平均值或者中值平均值取代中心像素.简单来说,像素级别的噪声去除是限制在局部邻域的.噪声有一个性质.我们认

C++中vector reserve和resize函数

1.reserve 当内存受限时(此时虚拟内存都快耗尽),由于push_back由于每次发现存储空间不够时,默认会申请原来空间的两倍,此时申请空间时就会发生错误.因此如果知道 vector需要多少内存的话,最好先用 reserve申请一下空间 ,即预申请一定的空间. 2.resize 重新设置该容器的大小 <span style="font-size:14px;">// test_max.cpp : 定义控制台应用程序的入口点. #include "stdafx.

openCV中的findHomography函数分析以及RANSAC算法的详解

本文将openCV中的RANSAC代码全部挑选出来,进行分析和讲解,以便大家更好的理解RANSAC算法.代码我都试过,可以直接运行. 在计算机视觉和图像处理等很多领域,都需要用到RANSAC算法.openCV中也有封装好的RANSAC算法,以便于人们使用.关于RANSAC算法的一些应用,可以看我的另一篇博客: 利用SIFT和RANSAC算法(openCV框架)实现物体的检测与定位,并求出变换矩阵(findFundamentalMat和findHomography的比较) 但是前几天师弟在使用op

OpenCV中对图像进行二值化的关键函数——cvThreshold()。

函数功能:采用Canny方法对图像进行边缘检测 函数原型: void cvThreshold( const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type ); 函数说明: 第一个参数表示输入图像,必须为单通道灰度图. 第二个参数表示输出的边缘图像,为单通道黑白图. 第三个参数表示阈值 第四个参数表示最大值. 第五个参数表示运算方法. 在OpenCV的imgproc\types_c.h中

OpenCv学习笔记(七)---OpenCv中的基本绘图函数,圆,椭圆,线段,矩形,多边形的绘制(1)

(一)本节教程的目的 本节你将学到: 1--如何使用Point在图像中定义2D点 2--如何以及为何使用Scalar 3--用OpenCv的函数Line绘直线 4--用OpenCvd的函数ellipse绘制椭圆 5--用OpenCv的函数rectangle绘矩形 6--用OpenCv的函数circle绘圆 7--用OpenCv的函数fillPoly绘填充多边形 (二)原理,本节我们将大量使用Point和Scalar这两个结构: **********************************

Opencv中直方图函数calcHist

calcHist函数在Opencv中是极难理解的一个函数,一方面是参数说明晦涩难懂,另一方面,说明书给出的实例也不足以令人完全搞清楚该函数的使用方式.最难理解的是第6,7,8个参数dims.histSize和ranges.以前一直都是想当然认为,该函数可以一次统计多张图片每个通道的灰度值数据,实际上calcHist函数一次只能统计一个通道上的直方图.我估计许多同学都犯过和我类似的错误,认为第5个参数hist,可以根据dims设定维度,比如dims=3,则输出的hist的维度就是3,并且会想当然的