5.对练习4中的代码进行修改,参考例2-3,给程序加入滚动条,使得用户可以动态调节缩放比例,缩放比例的取值为2-8之间。可以跳过写入磁盘操作,但是必须将变换结果显示在窗口中。

参考博文:blog.csdn.net/mengyanshizhe/article/details/45915525?reload

blog.sina.com.cn/s/blog_4b0020f30101cgok.html

没有找到方法设置滚动条的下限值为2,故令滚动条的值为0时,缩放比例为1.

利用cvResize函数实现对图片的缩小。

OpenCV改变图像大小的操作有两类:resize与图像金字塔,但是这两类操作差别还是比较大的。

一、resize

函数原型

void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )

各个参数的意义比较直观,但是需要注意的是dsize与fx和fy必须不能同时为零,也就是说要么dsize不为零而fx与fy同时可以为0,要么dsize为0而fx与fy不同时为0;resize函数的目标大小可以是任意的大小,可以不保持长宽比率,删除的像素或者新增的像素值通过interpolation(内插)控制;

update:fx,fy分别指水平和垂直方向的比率;如果dsize 为零,则目标图像的大小是通过这两个参数来计算的:目标图像的宽度为原图像的宽度*fx,同理目标图像的高度为原图像的高度*fy;

如果dsize不为零,fx,fy会自动计算:fx=dsize.width/src.cols;fy=dsize.height/src.rows;

因此dsize和(fx,fy)只需设置其中一个,另外一个置为零就可以了~~

二、图像金字塔

pyrDown与pyrUp分别表示向下降采样与向上升采样,但是二者并不是互为逆操作;

void pyrDown(InputArray src, OutputArray dst, const Size& dstsize=Size(), int border-

Type=BORDER_DEFAULT )

void pyrUp(InputArray src, OutputArray dst, const Size& dstsize=Size(), int border-

Type=BORDER_DEFAULT )

这两个操作实现图像金字塔的经典操作,他们仅仅是分别代表一次采样操作,也就是说,向下(或者向上)进行相邻层次的金字塔采样,调用一次pyrDown函数只能降低到原图像尺寸的1/2;反之,调用pyrUp目标图像则为原图像尺寸的2倍。因为它们内部都给定了一次采样尺寸的约束。也就是说采样之后,长宽比基本是不变的。

 /*ch2_lx2_5.cpp  2017/12/02
本程序是learning opencv这本书的课后习题练习
欢迎提出问题一起讨论*/
#include "cv.h"
#include "highgui.h"
int g_slider_position = ;
CvCapture* g_capture = NULL;
void onTrackbarSlide(int pos){
cvSetCaptureProperty(
g_capture,
CV_CAP_PROP_POS_FRAMES,
pos
);
}
int main(int argc,char** argv){
cvNamedWindow("in",);
cvNamedWindow("out",);
CvCapture* capture = cvCreateFileCapture(argv[]);
int frames = (int) cvGetCaptureProperty(
capture,
CV_CAP_PROP_FRAME_COUNT
);
if(!capture)
return -;
if(frames != ){
cvCreateTrackbar(
"scale",
"in",
&g_slider_position,
,
onTrackbarSlide
);
}
IplImage* frame;
while(){
if (g_slider_position==)
{
g_slider_position=;
}
frame = cvQueryFrame( capture);
IplImage* out = cvCreateImage(cvSize(frame->width/g_slider_position,frame->height/g_slider_position),frame->depth,frame->nChannels);
cvResize(frame,out,CV_INTER_LINEAR);
if( !frame ) break;
cvShowImage("in",frame);
cvShowImage("out",out);
char c = cvWaitKey();
if( c==) break;
}
cvReleaseCapture( &g_capture);
cvDestroyWindow( "in");
cvDestroyWindow( "out");
return();
}

OpenCV学习笔记之课后习题练习2-5的更多相关文章

  1. OpenCV学习笔记之课后习题练习3-5

    OpenCV学习笔记之课后习题练习2-5 练习使用感兴趣区域(ROI).创建一个210*210的单通道图像并将其归0.在图像中使用ROI和cvSet()建立一个增长如金字塔状的数组. 参考博文:www ...

  2. OpenCV学习笔记之课后习题练习2-3

    3.使用例2-10中的视频捕捉和存储方法,结合例2-5中的doPyrDown()创建一个程序,使其从摄像机读入视频数据并将缩放变换后的彩色图像存入磁盘. 例2-10中所用的方法虽然能正常运行,但却不能 ...

  3. OpenCV学习笔记之课后习题练习3-4

    练习:创建一个大小为100*100的三通道RGB图像.将它的元素全部置0.使用指针算法以(20,5)与(40,20)为顶点绘制一个绿色平面. 参考博文:blog.csdn.net/qq_2077736 ...

  4. OpenCV学习笔记之课后习题练习3-3

    3.3 创建一个100*100的拥有三个通道的二维字节类型矩阵,将其元素全部置0.通过cvPtr2D函数将指针指向中间通道(绿色),以(20,5)和(40,20)为顶点间画一个绿色的长方形. cvPt ...

  5. OpenCV学习笔记之课后习题练习4-1

    第四章课后练习1 1.本章完整讲述了基本的输入/输出编程以及OpenCV的数据结构.下面的练习是基于前面的知识做一些应用,为后面大程序的实现提供帮助.a.创建一个程序实现以下功能:(1)从视频文件中读 ...

  6. opencv学习笔记(七)SVM+HOG

    opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...

  7. opencv学习笔记(六)直方图比较图片相似度

    opencv学习笔记(六)直方图比较图片相似度 opencv提供了API来比较图片的相似程度,使我们很简单的就能对2个图片进行比较,这就是直方图的比较,直方图英文是histogram, 原理就是就是将 ...

  8. opencv学习笔记(五)镜像对称

    opencv学习笔记(五)镜像对称 设图像的宽度为width,长度为height.(x,y)为变换后的坐标,(x0,y0)为原图像的坐标. 水平镜像变换: 代码实现: #include <ios ...

  9. opencv学习笔记(四)投影

    opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: #include <cv.h> #include <highgui.h> using namespace ...

随机推荐

  1. python Thread对象的setDaemon(True)的作用。

    1.如果主线程是永远都不会结束的,那设置一个线程为守护线程是没必要的,设不设置都一样. 2.什么时候需要设置为守护线程?如果希望子线程一直运行,可以把子线程的代码写在while True里面一直循环, ...

  2. Git Step by Step – (5) Git分支(branch)

    在前面两盘文章中介绍了Git的基本原理,都是理论知识.这篇文章我们再次回到实践中,看看Git分支(branch)的使用. 在代码版本控制工具中,都会有branch的概念.刚开始建立版本仓库的时候,我们 ...

  3. cocos2d-x 3.0 在lua中调用自定义类

    环境 windows8, cocos2d-x 3.0, 现在开始安装需要的一些其它包 1. 按README.mdown文档上面要求的, 下载在windows下要安装的东东, 主要就是python2.7 ...

  4. 【数据分析】Superset 之四 直接安装

    apt install python-pip pip install --upgrade pip apt-get install build-essential libssl-dev libffi-d ...

  5. js 中的break continue return

    break:跳出整个循环 1.当i=6时,就跳出了整个循环,此for循环就不继续了: continue:跳出当前循环,继续下一次循环: return :指定函数返回值 1.在js当中,常使用retur ...

  6. JQuery选择器和DOM的操作-入门学习

    嘿嘿,今天学习了JQuery,前面的一周都在学习javascript,今天学习了JQuery,虽然javascript的类库有很多个,例如:Prototype,Dojo,JQuery等,javascr ...

  7. iis下的php环境的配置

    1. 参考园友文章: http://www.cnblogs.com/zengxiangzhan/archive/2010/03/05/1679286.html 2.另外还可以参考一下文章: http: ...

  8. 利用NtQuerySystemInformation函数遍历进程,遍历线程,获取线程挂起或运行状态

    版权声明:专注于计算机网络安全学习 https://blog.csdn.net/u011672712/article/details/51586030 1 2 3 4 5 6 7 8 9 10 11 ...

  9. 八款值得尝试的精美的 Linux 发行版(2017 版)

    八款值得尝试的精美的 Linux 发行版(2017 版) 2017年10月18日 • Linux • 295 views • 暂无评论 在这篇文章中,将会列出让一些令 Linux 用户印象最深刻且精美 ...

  10. 分布式实时日志系统(四) 环境搭建之centos 6.4下hbase 1.0.1 分布式集群搭建

    一.hbase简介 HBase是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为 Java.它是Apache软件基金会的Hadoop项目的一部分,运行 ...