调整图像的尺寸 - cvResize() 函数实现

前言

  有时会碰到一张图片太大了,想将它缩小。本文将讲解一个很好用的函数解决这个问题。

图像尺寸调整函数
cvResize


1 // 图像尺寸调整函数
2 void Resize (
3 const CvArr * src, // 待处理图像
4 CvArr * dst, // 处理后图像
5 int interpolation = CV_LINTER_LINTER //插值方法
6 )

  在调用此函数前,需要定制好处理后图像的格式,再将其内存块地址传入第二个参数;对于第三个参数可暂时不去理会,使用默认参数即可,它的作用是提供一种让像素点发现图像缩放后其对应点的(
插值 )方法。

代码示例

  下面的程序将原来图像的尺寸缩短一半:


 1 // 此头文件包含图像IO函数的声明
2 #include "highgui.h"
3 // 此头文件包含基本的图像处理函数和高级计算机视觉算法
4 #include "cv.h"
5
6 int main (void) {
7
8 // 将D盘目录下名为" 1.jpg "的图像加载至内存并获得一个指向该图像内存块的指针img
9 IplImage * img = cvLoadImage ("D:\\1.jpg");
10
11 // 创建一个窗口显示平滑处理前的图像
12 cvNamedWindow ("处理前", CV_WINDOW_AUTOSIZE);
13
14 // 将图像装载进窗口并显示此窗口
15 cvShowImage ("处理前", img);
16
17 // 创建一个新的图像内存块,以存放平滑结果。
18 IplImage * out = cvCreateImage (
19 cvSize (img->height/2, img->width/2),
20 img->depth,
21 img->nChannels
22 );
23
24 // 图像尺寸调整函数。
25 cvResize (
26 img,
27 out
28 );
29
30 // 创建一个窗口显示平滑处理后的图像
31 cvNamedWindow ("处理后", CV_WINDOW_AUTOSIZE);
32
33 // 将图像装载进窗口并显示此窗口
34 cvShowImage ("处理后", out);
35
36 // 该函数的参数为 0 时,程序将等待用户触发一个按键操作。
37 // 若参数为正整数,则程序将暂停该整数个毫秒单位直至用户有任何按键。
38 cvWaitKey (0);
39
40 // 释放图像内存块
41 cvReleaseImage (&img);
42 cvReleaseImage (&out);
43
44 // 关闭窗口同时释放窗口内存块
45 cvDestroyWindow ("平滑前");
46 cvDestroyWindow ("平滑后");
47
48 return 0;
49 }

运行结果

  

  

小结

  可以发现,收缩后的图像效果不好。

  其实图像的伸缩变化没有想象的那么简单,具体的改进方法将会在以后的文章中介绍。

时间: 2024-10-11 16:22:56

调整图像的尺寸 - cvResize() 函数实现的相关文章

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 - 使用象素关系重采样.当图像缩小时候,该方法可以避免波纹

CFormView动态调整对话框的尺寸并成比例调整部署控件

基于单文档的CFormView动态调整对话框的尺寸并成比例调整部署控件 如果你正在开发基于单文档程序,使用了CFormView基类实现多个窗口的显示,那么这个文档可能会给你提供些许帮助. 一.实现对话框填充客户区 当我们添加了资源对话框时,它的尺寸在客户区显示时是不会随着窗口的大小调整的,当框架尺寸小于它的尺寸时,还出现了滚动条,操作麻烦同时视觉效果也不良好. 思路 根据客户区的大小调整资源对话框的大小,而客户区大小由父级的框架进行设定. 步骤 1. 根据屏幕分辨率设定框架的尺寸 请注意,我们不

画图软件中调整图像的大小

在打开Windows附件的画图软件时,有时候截屏.或者其它图形粘贴的大小不合式.需要调整图像的大小. 画图软件有两个界面可调整:内界面是蓝色背景中的白色矩形,外界面是画图软件的边框.内界面固定在边框内,但是长.宽可以通过鼠标拉伸. 拉伸时,鼠标为从右下至左上的斜线型.调整内界面才能调整图像的大小. 如果内界面和外界面边界基本重合,则需要将进度条向右下角汇聚,直至出现内边界的右下"角".从这个角出发,将内边界从下往上.从右往左 拉动,可以发现内边界能移动.通常,在内边界和外边界之间都保存

iOS开发-开发常识[尺寸图标和图像的尺寸(像素)]

尺寸图标和图像的尺寸(像素) 所有的图像和图标建议用png格式,需要避免使用交错型的png文件格式.标准的图标和图像的位深(每像素占用的字节)是24位,红,绿,蓝通道分别为8位,再加上透明通道的8位,总共有32位.你不需要把你的调色板限制在web安全色里.

JAVA代码根据经纬度范围计算WGS84与谷歌全球墨卡托包含的切片数目与拼接图像像素尺寸

根据项目需求编写的代码. 适用场景:在网络地图上,比如天地图与谷歌地图,用户用鼠标在地图上拉一个矩形框,希望下载该矩形框内某一层级的瓦片数据,并将所有瓦片拼接成一个完整的,包含地理坐标的tif图像. 那么在下载瓦片与拼接瓦片之前,用户希望能看到待下载的瓦片数量与待拼接图像的像素尺寸,再决定是否拼接. 该java代码根据该矩形框的经纬度范围与用户指定的瓦片层级,计算需要下载的瓦片数量与待拼接结果图像的像素尺寸. 支持EPSG4326经纬度与EPSG3857谷歌全球墨卡托投影.经纬度瓦片切图规则与天

禁止调整自定义控件的尺寸

有时我们在自定义控件时,出于某种原因的考虑(比如:防止在设计时误操作),想禁止调整自定义控件的尺寸(Height 或 Width).最初我是这样实现的,这也是较简单的方法: public class MyButton : System.Windows.Forms.Button { ... ... protected override voidOnResize(EventArgs e) { this.Height = 23; this.Width = 75; } } 但是我对这样的效果不太满意,要

iOS开发—— 尺寸图标和图像的尺寸(技术常识篇)

尺寸图标和图像的尺寸(像素) 所有的图像和图标建议用png格式,需要避免使用交错型的png文件格式.标准的图标和图像的位深(每像素占用的字节)是24位,红,绿,蓝通道分别为8位,再加上透明通道的8位,总共有32位.你不需要把你的调色板限制在web安全色里.

【短道速滑一】OpenCV中cvResize函数使用双线性插值缩小图像到长宽大小一半时速度飞快(比最近邻还快)之异象解析和自我实现。

今天,一个朋友想使用我的SSE优化Demo里的双线性插值算法,他已经在项目里使用了OpenCV,因此,我就建议他直接使用OpenCV,朋友的程序非常注意效率和实时性(因为是处理视频),因此希望我能测试下我的速度和OpenCV相比到底那一个更有速度优势,恰好前一段时间也有朋友有这方面的需求,因此我就随意编写了一个测试程序,如下所示: IplImage *T = cvLoadImage("F:\\1.JPG"); IplImage *SrcImg = cvCreateImage(cvSiz

图像的尺寸调整

本次使用opencv中的API函数resize()和pyrup()和pyrdown()进行图像尺寸的放大和缩小. 程序的功能说明如下: 按键的功能 按下1键:用resize()把图片放大     按下2键 :用resize()把图片缩小 按下3键: 用pyrup()把图片放大 按下4键:用pyrdown()把图片缩小 #include<opencv2/opencv.hpp> #include<opencv2/highgui/highgui.hpp> #include<open