zoukankan      html  css  js  c++  java
  • 调整图像的尺寸

    前言

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

    图像尺寸调整函数 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 }

    运行结果

      

      

    小结

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

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

  • 相关阅读:
    spring boot 集成activeMq
    spring boot配置跨域
    spring boot中使用mybatis逆向工程
    Cookie/Session/Token
    Spring Boot自定义Starter
    linux防火墙命令
    imx6ull+debian10 构建静态qt交叉编译环境
    Arm Qt编译Qt例程出错 GLES3/gl3.h: No such file or directory 解决方法
    QtCreator设置野火iMx6开发板提供的qt交叉编译套件
    联想ideapad-330C 在Ubuntu18.04 上安装Realtek 8821CE无线网卡驱动
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3746614.html
Copyright © 2011-2022 走看看