OpenCV学习笔记07--用滚动条控制图片缩放

练习:通过滚动条控制图片的缩放

这个练习要实现的功能是通过控制滚动条来控制图片的缩放,由于如果缩放的太小不足以显示出滚动条,就不能对其进行调整了,因此我们计划实现控制滚动条使长度和宽度缩小2倍,4倍。

我们使用cvPyrDown进行缩放,输出图像的长度和宽度只能是输入图像的一半。我们如果要缩放二倍以上,就必须使用两次以上cvPyrDown,所以只能缩小2倍,4倍,8倍。。。

在练习中使用的都是之前学到的函数,通过构造两个图像结构,通过循环控制其缩小二倍以上,具体代码如下:

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"

int g_slide = 0;
IplImage *src1,*src2;
IplImage* img = cvLoadImage("D:\\2.jpg");

void dragSize(int g_slide){
	int i = g_slide+1;
	src1 = cvCreateImage(cvSize(img->width, img->height), img->depth, img->nChannels);
	src2 = cvCreateImage(cvSize(img->width, img->height), img->depth, img->nChannels);
	cvCopy(img, src1);
	cvCopy(img, src2);
	for (; i > 1; i--)
	{
		if (i % 2 == 0){
	        src2 = cvCreateImage(cvSize(src1->width / 2, src1->height / 2), src1->depth, src1->nChannels);
	        cvPyrDown(src1, src2);
		}
		if (i % 2 != 0){
			src1 = cvCreateImage(cvSize(src2->width / 2, src2->height / 2), src2->depth, src2->nChannels);
			cvPyrDown(src2, src1);
		}
	}
	cvShowImage("test", src2);
}

int _tmain(int argc, _TCHAR* argv[])
{
	cvNamedWindow("test", 1);
	cvCreateTrackbar("drag", "test", &g_slide, 2,dragSize);
	src1 = cvCreateImage(cvSize(img->width/2, img->height/2), img->depth, img->nChannels);
	cvPyrDown(img, src1);
	cvShowImage("test",img);
	cvWaitKey(0);
	cvReleaseImage(&src1);
	cvReleaseImage(&src2);
	cvDestroyWindow("test");
	return 0;
}


阅读更多

没有更多推荐了,返回首页