首页 > 学院 > 开发设计 > 正文

opencv学习(一)——图像显示和视频播放

2019-11-06 07:44:22
字体:
来源:转载
供稿:网友

Opencv显示图像

#include "opencv2/highgui.hpp"int main(int argc , char**  argv){    iplImage* img = cvLoadImage("/Users/mac/Desktop/1.png");//将图像文件加载至内存    cvNamedWindow("Example1",CV_WINDOW_AUTOSIZE);//用于在屏幕上创建一个窗口,将被显示的图像包含于该窗口中。    cvShowImage("Example1", img);// 在名为Example1的窗口中显示图像img    cvWaitKey(0);// 使程序暂停    cvReleaseImage(&img);//释放为该文件所分配的内存    cvDestroyWindow("Example1");//销毁显示图像文件的窗口。    }

1. cvLoadImage()通过文件名确定被加载文件的格式,并且该函数将自动分配图像数据结构所需的内存

2.    cvNamedWindow().第一个参数指定了窗口的标题,第二个参数指定了窗口的性质,设置为0时,窗口的大小不会因为图像的大小而改变,图像只能在窗口中根据窗口的大小进行拉伸或缩放,而设置为CV_WINDOW_AUTOSIZE时,窗口会根据图像的实际大小自动进行拉伸或缩,以容纳图像。

3.    cvShowImage()用于显示图像,第一个参数指定已存在的窗口名,第二个参数指定图片。

4.    cvWaitKey()的功能是使程序暂停,单位为毫秒,若参数是0或负数,则程序将一直等待用户触发按键。

5.    cvReleaseImage()释放为该图像文件所分配的内存。该函数执行完毕后,img指针将被设置为NULL。

6.    cvDestroyWindow()销毁显示图像文件的窗口,并同时释放为该窗口所分配的所有内存(包括窗口内部的图像内存缓冲区,该缓冲区保存了与img指针有关的图像文件像素信息)。

Opencv播放AVI视频

版本一

#include "highgui.hpp"#include "cv.h"int main(int argc,char ** argv){    cvNamedWindow("Example2",CV_WINDOW_AUTOSIZE);    CvCapture* capture = cvCreateFileCapture("/Users/mac/Desktop/2.mov");//cvCreateFileCapture通过参数确定要读入的视频文件,返回一个指向CvCapture结构的指针。这个结构包括了要读入的视频文件的信息,其中包括状态信息。调用这个函数后,capture将被初始化到对应视频文件的开头。    IplImage* frame;// 存储一帧视频文件    while(true)//开始读入视频文件    {        frame = cvQueryFrame(capture);//将下一帧视频文件载入内存,        if(!frame)            break;        cvShowImage("Example2", frame);//        char c = cvWaitKey(1000);        if(c == 27) break;    }    cvReleaseCapture(&capture);//释放capture结构开辟的内存空间    cvDestroyWindow("Exapmle2");}

版本二(有滚动条)

#include "highgui.hpp"#include "cv.h"int g_slider_position = 0;//记录滑块位置CvCapture* g_capture = NULL;void onTrackbarSlide(int pos) //设置视频读入位置{    cvSetCapturePRoperty(g_capture, CV_CAP_PROP_POS_FRAMES, pos);//pos为当前滚动条的位置//    printf("pos:%d/n",pos);//    printf("CV_CAP_PROP_POS_FRAMES:%d/n",CV_CAP_PROP_POS_FRAMES);}int main(int argc,char ** argv){    cvNamedWindow("Example3",CV_WINDOW_AUTOSIZE);    g_capture = cvCreateFileCapture("/Users/mac/Desktop/2.mov");//cvCreateFileCapture通过参数确定要读入的视频文件,返回一个指向CvCapture结构的指针。这个结构包括了要读入的视频文件的信息,其中包括状态信息。调用这个函数后,capture将被初始化到对应视频文件的开头。    int frames = cvGetCaptureProperty(g_capture, 7);//获得视频的总帧数  //  printf("%d/n",frames);//416  //  printf("%d/n",CV_CAP_PROP_FRAME_COUNT);//7    if(frames != 0)    {        cvCreateTrackbar("Position", "Example3", &g_slider_position, frames,onTrackbarSlide);//设置滚动条的名称并确定滚动条所属的窗口,当滚动条拖动时回调函数onTrackbarSlide被触发。        printf("g_slider_position:%d/n",g_slider_position);    }    IplImage* frame;// 存储一帧视频文件    while(true)//开始读入视频文件    {        frame = cvQueryFrame(g_capture);//将下一帧视频文件载入内存,        if(!frame)            break;        cvShowImage("Example3", frame);//        char c = cvWaitKey(30);        if(c == 27) break;    }    cvReleaseCapture(&g_capture);//释放capture结构开辟的内存空间    cvDestroyWindow("Exapmle3");   }
int cvCreateTrackbar(const char* trackbar_name;//滑动条的名称const char* window_name;//窗口的名称,滑动条不会遮挡图像int* value;//当滑动条被拖到时,OpenCV会自动将当前位置所代表的值传给指针指向的整数int count;//滑动条所能达到的最大值CvTrackbarCallback on_change; //可选的回调函数,回调函数可参见http://wapedia.mobi/zhtrad/回调函数);

说明

pos:72

CV_CAP_PROP_POS_FRAMES:1

g_slider_position:72

由控制台输出的结果发现onTrackbarSlide函数参数pos的值将会赋给g_slider_position。

滚动条的滑块并不会随着播放时间而向前滑动。

效果

图像平滑处理

#include "highgui.hpp"#include "cv.h"void example2_4(IplImage* image)/{    cvNamedWindow("Example4-in",0);//用于在屏幕上创建一个窗口,将被显示的图像包含于该窗口中。    cvNamedWindow("Example4-out",0);//用于在屏幕上创建一个窗口,将被显示的图像包含于该窗口中。    cvShowImage("Example4-in",image);//  在名为Example4-in的窗口中显示图像img    IplImage* out = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 3);//分配自己的图像结构空间,第一个参数说明了图像的大小,第二个参数说明了各个通道每个像素点的数据类型,第三个参数说明了通道的总数    cvSmooth(image, out,CV_GAUSSIAN,3,3);//对每个像素周围3*3区域进行高斯平滑处理。    cvShowImage("Example4-out", out);    cvReleaseImage(&out); //释放与图像对应的内存空间    cvWaitKey(0);    cvDestroyWindow("Example4-in");//销毁显示图像文件的窗口。    cvDestroyWindow("Example4-out");//销毁显示图像文件的窗口。}int main(int argc , char**  argv){    IplImage* img = cvLoadImage("/Users/mac/Desktop/4.png");//将图像文件加载至内存    example2_4(img);    cvReleaseImage(&img);//释放为该文件所分配的内存}

效果

图像缩放处理

#include "highgui.hpp"#include "cv.h"IplImage*  doPyrDown(IplImage* in){    assert(in->width%2 == 0 && in->height%2 == 0);    IplImage* out = cvCreateImage(cvSize(in->width/2, in->height/2), in->depth, in->nChannels);//创建新图像空间,长宽各一半,同深度,同通道数    cvPyrDown(in, out);//创建一幅高度宽带均为输入图像一半尺寸的图像    return out;}void example2_4(IplImage* image){    cvNamedWindow("Example4-in",CV_WINDOW_AUTOSIZE);//用于在屏幕上创建一个窗口,将被显示的图像包含于该窗口中。    cvNamedWindow("Example4-out",CV_WINDOW_AUTOSIZE);//用于在屏幕上创建一个窗口,将被显示的图像包含于该窗口中。    cvShowImage("Example4-in",image);//  在名为Example4-in的窗口中显示图像img    IplImage* out = doPyrDown(image);    cvShowImage("Example4-out", out);    cvReleaseImage(&out);//释放与图像对应的内存空间    cvWaitKey(0);    cvDestroyWindow("Example4-in");//销毁显示图像文件的窗口。    cvDestroyWindow("Example4-out");//销毁显示图像文件的窗口。}int main(int argc , char**  argv){    IplImage* img = cvLoadImage("/Users/mac/Desktop/4.png");//将图像文件加载至内存    example2_4(img);    cvReleaseImage(&img);//释放为该文件所分配的内存}

效果


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表