示例程序010--图像缩放

用到的函数:

cvResize

void cvResize( const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR );

  作用:

    函数cvResize 重新调整图像src(或它的ROI),使它精确匹配目标dst(或其ROI)。

  参数列表:

  src 源图像

  dst 目标图像

  interpolation 修改、插补的方法,取值如下:

  ·CV_INTER_NN - 最近-邻居插补

  ·CV_INTER_LINEAR - 双线性插值(默认方法)

  ·CV_INTER_AREA - 像素面积相关重采样。当缩小突刺昂视。该方法可以避免波纹的出现。当放大图像是,类似于方法CV_INTER_NN。(It is the preferred method for image decimation that gives moire-free results. In case of zooming it is similar to CV_INTER_NN method. )

  ·CV_INTER_CUBIC - 双三次插值。

 

代码:

#include "stdafx.h"
#include<cv.h>
#include<highgui.h>

int main(int argc, char* argv[])
{
 IplImage *src =cvLoadImage("Lena.jpg");   

 IplImage *dst = 0;  

 double scale=0.5;  //缩放倍数


 CvSize dst_cvsize;   //目标图像尺寸
 dst_cvsize.width = src->width * scale;  //目标图像的宽为源图象宽的scale倍
 dst_cvsize.height=src->height * scale; //目标图像的高为源图象高的scale倍
 dst = cvCreateImage( dst_cvsize, src->depth, src->nChannels); //构造目标图象
 
 cvResize(src, dst, CV_INTER_LINEAR); //缩放源图像到目标图像
 
 cvNamedWindow( "src",   CV_WINDOW_AUTOSIZE ); //创建用于显示源图像的窗口
 cvNamedWindow( "dst",   CV_WINDOW_AUTOSIZE ); //创建用于显示目标图像的窗口
 cvShowImage( "src", src );  //显示源图像
 cvShowImage( "dst", dst );  //显示目标图像
 cvWaitKey(0);  

 
 cvReleaseImage(&src); 

 cvReleaseImage(&dst);

 cvDestroyAllWindows();

 

 return 0;
}

}

 

运行结果:

示例程序010--图像缩放

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最近邻插值是一种图像缩放的方法,其原理是将原始图像中的像素点按照一定的比例缩小或放大,缩放后的像素点位置与原始图像中的像素点最近。以下是一个简单的最近邻插值缩小图片程序的C语言代码示例: ```c #include <stdio.h> #include <stdlib.h> #define SCALE 2 // 缩小倍数 int main() { FILE *fp1, *fp2; unsigned char image[512][512], result[256][256]; int i, j, k, l; int height = 512, width = 512; // 原始图片尺寸 int new_height = height / SCALE, new_width = width / SCALE; // 缩小后图片尺寸 // 打开原始图片文件 if ((fp1 = fopen("input.bmp", "rb")) == NULL) { printf("Cannot open input file.\n"); exit(1); } // 读取原始图片像素数据 fseek(fp1, 54L, SEEK_SET); for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { image[i][j] = fgetc(fp1); } } // 关闭原始图片文件 fclose(fp1); // 缩小图片 for (i = 0; i < new_height; i++) { for (j = 0; j < new_width; j++) { result[i][j] = image[i * SCALE][j * SCALE]; } } // 创建缩小后图片文件 if ((fp2 = fopen("output.bmp", "wb")) == NULL) { printf("Cannot open output file.\n"); exit(1); } // 写入缩小后图片文件头信息 fputc('B', fp2); fputc('M', fp2); l = 54 + new_height * new_width; fputc(l % 256, fp2); l = l / 256; fputc(l % 256, fp2); l = l / 256; fputc(l % 256, fp2); l = l / 256; fputc(l % 256, fp2); for (i = 4; i <= 7; i++) { fputc(0, fp2); } fputc(54, fp2); for (i = 15; i >= 0; i--) { fputc(0, fp2); } fputc(40, fp2); for (i = 19; i >= 16; i--) { fputc(0, fp2); } fputc(new_width % 256, fp2); fputc(new_width / 256, fp2); fputc(new_height % 256, fp2); fputc(new_height / 256, fp2); fputc(1, fp2); fputc(0, fp2); fputc(8, fp2); for (i = 23; i <= 34; i++) { fputc(0, fp2); } for (i = 35; i <= 38; i++) { fputc(0, fp2); } for (i = 39; i <= 42; i++) { fputc(0, fp2); } for (i = 43; i <= 46; i++) { fputc(0, fp2); } // 写入缩小后图片像素数据 for (i = new_height - 1; i >= 0; i--) { for (j = 0; j < new_width; j++) { fputc(result[i][j], fp2); } for (j = new_width; j < 4 * ((new_width + 3) / 4); j++) { fputc(0, fp2); } } // 关闭缩小后图片文件 fclose(fp2); return 0; } ``` 该程序将一个512x512的BMP格式图片按照2倍缩小后输出到另一个BMP格式文件中。程序中通过打开原始图片文件,读取原始图片像素数据,缩小图片,创建缩小后图片文件,写入缩小后图片文件头信息和像素数据等步骤实现了最近邻插值缩小图片的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值