zoukankan      html  css  js  c++  java
  • 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倍的效果图:

  • 相关阅读:
    关于maven+springmvc+mybits搭建的框架clean,build后错误:org.apache.ibatis.binding.BindingException的处理
    mvn从下载安装到纯命令行创建第一个mvn程序(编码,编译,测试,安装,打包)全过程细致分解
    C++程序中调用bat
    E2034 Cannot convert 'wchar_t *' to 'const char *' bcb2010
    C++ calling a dll.
    如果你不是为了表现
    cdecl、stdcall、fastcall函数调用约定区别
    桌面便签
    在新的工控机上调试程序注意事项
    listview1.items.itemdata:stream read error
  • 原文地址:https://www.cnblogs.com/tcysky/p/6215784.html
Copyright © 2011-2022 走看看