学习opencv_学习笔记一

第二章opencv入门

主函数

#include<opencv2\opencv.hpp>

usingnamespacecv;

intmain(intargc, char** argv);

voidshowImage();

voidplayVideo();

voidonTrackbarSlide(intpos);

voidcontrolVideo();

voidsimpleChange();

voiddoPydown();

voiddoCanny();

voidvideoCapture();

voidwriteVideo();

//加载并在屏幕上显示一幅图像

intmain(intargc,char** argv)

{

//显示图像

//showImage();

//播放avi视频

//playVideo();

//控制视频

//controlVideo();

//一个简单的变换

//simpleChange();

// 一个复杂的变换

//doPydown();

//边缘检测

//doCanny();

//从摄像机读取数据

//videoCapture();

//写入avi视频

writeVideo();

}

显示图像

/**

*显示图像

**/

voidshowImage() {

//Mat picture = imread("test.jpg");//要和main.cpp文件放在一个文件夹下//

//imshow("测试程序", picture);

//waitKey(0);

//图像加载到内存

//IplImage * img=cvLoadImage(argv[1]);

//直接打开本地图像

IplImage* img = cvLoadImage("test.jpg");

//在屏幕上创建一个窗口

cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE);

//显示图像

cvShowImage("Example1", img);

//等待用户按键操作

waitKey(0);

//释放内存

cvReleaseImage(&img);

//销毁窗口

cvDestroyWindow("Example1");

}

播放avi视频

/*

播放avi视频

*/

voidplayVideo() {

//创建一个窗口

cvNamedWindow("Example2",CV_WINDOW_AUTOSIZE);

//返回的catpure指针,指向avi文件的开头,分配内存

CvCapture* capture = cvCreateFileCapture("output.avi");

//分配一帧

IplImage* frame;

while(true)

{

//将下一帧载入内存

frame = cvQueryFrame(capture);

if(!frame)break;

cvShowImage("Example2", frame);

//等待33秒,实际应用中可以从capture中读取实际帧率

charc=cvWaitKey(33);

if(c==27)

{

break;

}

}

cvReleaseCapture(&capture);

cvDestroyWindow("Example2");

}

视频播放控制

//全局变量,位置

intg_slider_position = 0;

//CvCapture 结构体

CvCapture* g_capture = NULL;

/*

控制播放视频

*/

voidcontrolVideo() {

//创建窗体

cvNamedWindow("Example3", CV_WINDOW_AUTOSIZE);

//读放avi文件

g_capture = cvCreateFileCapture("output.avi");

//从capture查询数据,帧数为0时,滚动条不会视创建

intframes = cvGetCaptureProperty(

g_capture,

//视频文件总帧数

CV_CAP_PROP_FRAME_COUNT

);

if(frames!=0)

{

cvCreateTrackbar(

"Position",

"Example3",

//位置

&g_slider_position,

//

frames,

//回调函数

onTrackbarSlide

);

}

IplImage* frame;

while(true)

{

//将下一帧载入内存

frame = cvQueryFrame(g_capture);

if(!frame)break;

cvShowImage("Example3", frame);

//等待33秒,实际应用中可以从capture中读取实际帧率

charc = cvWaitKey(33);

if(c == 27)

{

break;

}

}

cvReleaseCapture(&g_capture);

cvDestroyWindow("Example3");

}

/*

回调函数,参数为位置

*/

voidonTrackbarSlide(intpos) {

cvSetCaptureProperty(

g_capture,

//以帧数来设置位置

//如果想以视频的长度比例来设置,可以使用CV_CAP_PROP_POS_AVI_RATIO

CV_CAP_PROP_POS_FRAMES,

pos

);

}

一个简单的变换

/*

一个简单的变换, 对一幅图像作平滑处理

*/

voidsimpleChange() {

//直接打开本地图像

IplImage* img = cvLoadImage("test.jpg");

//创建窗体原始图像

cvNamedWindow("Example4_in");

//创建窗体处理后图像

cvNamedWindow("Example4_out");

//显示图像

cvShowImage("Example4_in", img);

//创建一张图像,用作处理后显示

IplImage* out = cvCreateImage(

cvGetSize(img),//图像结构大小

IPL_DEPTH_8U,//每个像素点的数据类型

3 //通道数

);

//每个像素3*3区域平滑处理

cvSmooth(img,out,CV_GAUSSIAN,3,3);

//显示图像

cvShowImage("Example4_out",out);

//释放图像

cvReleaseImage(&out);

cvWaitKey(0);

cvDestroyWindow("Example4_in");

cvDestroyWindow("Example4_out");

}

/*

一个复杂的变换,显示图像的一半

*/

voidshowHalf() {

//直接打开本地图像

IplImage* img = cvLoadImage("test.jpg");

//assert(img->width%2==0 && img->height%2==0);

IplImage* out = cvCreateImage(//从旧的图像中读取信息

CvSize(img->width/2,img->height/2),

img->depth,

img->nChannels

);

cvPyrDown(img,out);

//在屏幕上创建一个窗口

cvNamedWindow("Example5", CV_WINDOW_AUTOSIZE);

//显示图像

cvShowImage("Example5", out);

//等待用户按键操作

waitKey(0);

//释放内存

cvReleaseImage(&out);

//销毁窗口

cvDestroyWindow("Example5");

}

/*

边缘检测输出一个单通道图像

*/

voiddoCanny() {

//直接打开本地图像

IplImage* img = cvLoadImage("test.jpg");

doublelowThresh = 5;

doublehighThresh = 20;

doubleaperture = 3;

if(img->nChannels!=1)

{

return;

}

IplImage* out = cvCreateImage(

CvSize(cvGetSize(img)),

IPL_DEPTH_8U,

1

);

cvCanny(img, out, lowThresh, highThresh,aperture);

//在屏幕上创建一个窗口

cvNamedWindow("Example6", CV_WINDOW_AUTOSIZE);

//显示图像

cvShowImage("Example6", out);

//等待用户按键操作

waitKey(0);

//释放内存

cvReleaseImage(&out);

//销毁窗口

cvDestroyWindow("Example6");

}

/*

从摄像机读入数据

*/

voidvideoCapture() {

CvCapture* capture = cvCreateCameraCapture(0);

//分配一帧

IplImage* frame;

while(true)

{

//将下一帧载入内存

frame = cvQueryFrame(capture);

if(!frame)break;

cvShowImage("Example7", frame);

//等待33秒,实际应用中可以从capture中读取实际帧率

charc = cvWaitKey(10);

if(c == 27)

{

break;

}

}

cvReleaseCapture(&capture);

cvDestroyWindow("Example7");

}

写入avi视频

/*

写入avi视频文件

*/

voidwriteVideo() {

CvCapture* capture = 0;

capture = cvCreateFileCapture("output.avi");

if(!capture) {

return;

}

//初始化视频读入

IplImage*bgr_frame = cvQueryFrame(capture);

doublefps = cvGetCaptureProperty(//取得视频流属性

capture,

CV_CAP_PROP_FPS

);

CvSizesize = CvSize(

(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH),

(int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT)

);

CvVideoWriter*writer = cvCreateVideoWriter(

"output2.avi",//视频文件名

CV_FOURCC('M', 'J', 'P', 'G'),//编码格式

fps,//播放帧率

size//视频图像大小

);

IplImage* logpolar_frame = cvCreateImage(

size,

IPL_DEPTH_8U,

3

);

while((bgr_frame=cvQueryFrame(capture))!=NULL)

{

cvLogPolar(

bgr_frame,

logpolar_frame,

cvPoint2D32f(

bgr_frame->width/2,

bgr_frame->height/2),

40,

CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS);

cvWriteFrame(writer,logpolar_frame);

}

cvReleaseVideoWriter(&writer);

cvReleaseImage(&logpolar_frame);

cvReleaseCapture(&capture);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值