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);//释放为该文件所分配的内存}效果
新闻热点
疑难解答