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

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);//释放为该文件所分配的内存
}

效果



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值