OpenCV 对一张图片进行缩放

pyrUp( tmp, dst, Size( tmp.cols2, tmp.rows2 ) 函数 pyrUp 接收了3个参数:

  • tmp: 当前图像, 初始化为原图像 src 。
  • dst: 目的图像( 显示图像,为输入图像的两倍)
  • Size( tmp.cols2, tmp.rows2 ) : 目的图像大小, 既然我们是向上采样, pyrUp 期待一个两倍于输入图像( tmp )的大小。

pyrDown( tmp, dst, Size( tmp.cols/2, tmp.rows/2 )函数 pyrDown 也接收了3个参数:

  • tmp: 当前图像, 初始化为原图像 src 。
  • dst: 目的图像( 显示图像,为输入图像的一半)
  • Size( tmp.cols/2, tmp.rows/2 ) :目的图像大小, 既然我们是向下采样, pyrDown 期待一个一半于输入图像( tmp)的大小。
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>

using namespace cv;
using namespace std;

/// 全局变量
Mat src, dst, tmp;

int main(int argc, char** argv)
{
    /// 指示说明
    cout << "\n 缩放示例  \n"  << endl;
    cout << "------------------ \n" << endl;
    cout << " * [u] -> 图片放大2倍  \n" << endl;
    cout << " * [d] -> 图片缩小一半 \n" << endl;
    cout << " * [ESC] -> 关闭程序 \n \n" << endl;

    ///  尺寸必须能被 2^{n} 整除
    src = imread("M:/img/1.png");
    if (!src.data) {
        cout << " 没有数据!——退出程序 \n" << endl;
        return -1;
    }

    tmp = src;
    dst = tmp;

    /// 创建显示窗口
    namedWindow("原图", cv::WINDOW_AUTOSIZE);
    imshow("原图", dst);

    /// 循环
    while (true) {
        int c;
        c = waitKey(10);

        if ((char)c == 27) {
            break;
        }

        if ((char)c == 'u') { // 键盘按下u执行
            pyrUp(tmp, dst, Size(tmp.cols * 2, tmp.rows * 2));
            cout << "** 放大: 图片 x 2 \n" << endl;
        }
        else if ((char)c == 'd') { // 键盘按下d执行
            pyrDown(tmp, dst, Size(tmp.cols / 2, tmp.rows / 2));
            cout << "** 缩小: 图片/ 2 \n" << endl;
        }

        imshow("原图", dst);
        tmp = dst;  // 最后,将输入图像 tmp 更新为当前显示图像, 这样后续操作将作用于更新后的图像。
    }
    return 0;
}

/ 注意: 输入图像的大小(在两个方向)必须是2的幂,否则,将会显示错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值