学习opencv第二章课后题4,5

chapter2_3_4

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

IplImage* DoPyDown(IplImage* in, int fliter = IPL_GAUSSIAN_5x5)//第三个参数为卷积滤波器的类型
{
	IplImage* out = cvCreateImage(
		cvSize(in->width / 2, in->height / 2),
		in->depth,
		in->nChannels
		);
	cvPyrDown(in, out, IPL_GAUSSIAN_5x5);//图片缩放一半
	return out;
};

int _tmain(int argc, _TCHAR* argv[])
{
	CvCapture* caputre = 0;
	cvNamedWindow("AVI_EXAMPLE", CV_WINDOW_AUTOSIZE);
	cvNamedWindow("AVI_AFTER");//创建窗口,默认模式为适应图片大小
	if (argc == 1)
	{
		caputre = cvCreateCameraCapture(0);//读入摄像头视频
	}
	else
	{
		caputre = cvCreateFileCapture("m.avi");
	}
	assert(caputre != NULL);
	IplImage* bgr_frame = cvQueryFrame(caputre);//从摄像头文件中抓取并返回一帧图像
	double fps = cvGetCaptureProperty(caputre, CV_CAP_PROP_FPS);//根据摄像头文件获取其帧率信息
	CvSize size = cvSize(
		((int)cvGetCaptureProperty(caputre, CV_CAP_PROP_FRAME_WIDTH)) / 2,//获取视频文件的宽和高
		((int)cvGetCaptureProperty(caputre, CV_CAP_PROP_FRAME_HEIGHT)) / 2
		);
	CvVideoWriter* writer = cvCreateVideoWriter("lgc.avi", -1, fps, size);//创建视频写入器
	IplImage* outImage;
	IplImage* logpolar_fram = cvCreateImage(size, IPL_DEPTH_8U, 3);
	while ((bgr_frame = cvQueryFrame(caputre)) != NULL)
	{
		cvLogPolar(//笛卡尔坐标转为极坐标
			bgr_frame,
			logpolar_fram,
			cvPoint2D32f(bgr_frame->width / 2, bgr_frame->height / 2),
			40,
			CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS
			);
		outImage = DoPyDown(bgr_frame);//缩放后的图像输出到outImage
		cvConvertImage(outImage, outImage, CV_CVTIMG_FLIP);//图像垂直翻转
		cvWriteFrame(writer, outImage);//将翻转后的图像写进文件
		cvShowImage("AVI_EXAMPLE", bgr_frame);//原来的视频图像
		cvShowImage("AVI_AFTER", outImage);//经过缩放,翻折的图像

		char c = cvWaitKey(33);
		if (27 == c)
			break;
	}
		//释放资源
	cvReleaseVideoWriter(&writer);
	//cvReleaseImage(&bgr_frame);
	cvReleaseImage(&outImage);
	cvReleaseCapture(&caputre);
	cvReleaseImage(&logpolar_fram);
	//销毁窗口
	cvDestroyWindow("AVI_Example");
	return 0;
}



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

int g_pos;

void onMyTracBar(int pos)
{
	g_pos = pos;
}

IplImage* DoPyDown(IplImage* in, int filter = CV_GAUSSIAN_5x5)
{
	IplImage* image = cvCreateImage(
		cvSize(in->width / 2, in->height / 2),
		in->depth,
		in->nChannels
		);

	cvPyrDown(in, image, filter);
	return image;
}

int _tmain(int argc, _TCHAR* argv[])
{
	CvCapture* capture = cvCreateCameraCapture(0);
	assert(capture != NULL);
	cvNamedWindow("ex2_5");
	IplImage* frame = cvQueryFrame(capture);
	if (frame != NULL)
	{
		cvCreateTrackbar("ljk", "ex2_5", &g_pos, 8, onMyTracBar);
	}

	while (frame != NULL)
	{
		if (g_pos == 0 || g_pos == 1)
		{
			cvShowImage("ex2_5", frame);
		}
		else
		{
			IplImage* convert_image = DoPyDown(frame);
			for (int i = 2; i < g_pos; i++)
			{
				convert_image = DoPyDown(convert_image);
			}
			//cvConvertImage(convert_image, convert_image, CV_CVTIMG_FLIP);
			cvShowImage("ex2_5", convert_image);
			cvReleaseImage(&convert_image);
		}
		frame = cvQueryFrame(capture);
		char c = cvWaitKey(33);
		if (c == 27)
			break;
	}
	cvReleaseCapture(&capture);
	cvDestroyWindow("ex2_5");
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值