0
点赞
收藏
分享

微信扫一扫

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&nbsp;namespace&nbsp;cv;
using&nbsp;namespace&nbsp;std;

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

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

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

&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;=&nbsp;src;
&nbsp;&nbsp;&nbsp;&nbsp;dst&nbsp;=&nbsp;tmp;

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

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

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

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

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

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

举报

相关推荐

0 条评论