一、显示图像
从磁盘中加载一张图片并在屏幕上显示
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, const char * argv[]) {
IplImage* img =cvLoadImage("/Users/Desktop/test.jpg");
cvNamedWindow("test",CV_WINDOW_AUTOSIZE);
cvShowImage("test", img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow("test");
return 0;
}
IplImage* img =cvLoadImage(“/Users/Desktop/test.jpg”);
将图像文件加载到内存,并返回一个指针,此指针指向一块位描述改该图像文件的数据结构而分配的内存块。IplImage结构体将是我们在使用OpenCV时最常用到的数据结构。OpenCV使用IplImage结构体处理诸如单通道、多通道、整型、浮点型等所有类型的图像文件。cvNamedWindow(“test”,CV_WINDOW_AUTOSIZE);
该函数由HighGUI库提供,cvNamedWindow函数用于在屏幕上创建一个窗口。第一个参数指定了该窗口的标题,第二个定义了窗口的属性,该参数可被设置为0(默认)或CV_WINDOW_AUTOSIZE。设置为0时窗口的大小不会因图像的大小而改变,CV_WINDOW_AUTOSIZE:则会根据图像的实际大小自动进行拉伸或缩放。cvShowImage(“test”, img);
在一个已经创建的窗口上使用cvShowImage显示图像。第一个参数确定在哪个已经存在的窗口中显示图像。cvWaitKey(0);
该函数的功能是使程序暂停,等待用户触发一个按键操作。如果将这个函数参数设为整数,则程序暂停一段时间。当设置为0或负数时,程序将一直等待用户触发按键操作。
二、播放一个小视频
播放视频几乎与现实图像一样容易。播放视频是只需要处理的问题是如何循环地读取视频中的每一帧,以及如何退出循环。
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, const char * argv[]) {
cvNamedWindow("test",CV_WINDOW_AUTOSIZE);
CvCapture* capture=cvCreateFileCapture("/Users/Downloads/181123080148212016.mp4");
IplImage* frame;
while (1) {
frame= cvQueryFrame(capture);
if(!frame)break;
cvShowImage("test", frame);
char c= cvWaitKey(33);
if(c==27) break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("test");
return 0;
}
CvCapture* capture=cvCreateFileCapture(“/Users/Downloads/181123080148212016.mp4”);
读入视频文件返回一个CvCapture结构的指针。这个结构体包括了所有关于要读入的视频文件的信息。进入循环后cvQueryFrame用来将下一帧视频文件载入内存中返回一个当前帧的指针。与cvLoadImage不同的是cvLoadImage为图像分配内存空间,而cvQueryFrame使用已经在CvCapture结构中已经分配好的内存
三、一个简单的变换
载入一张图片病进行平滑处理
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, const char * argv[]) {
IplImage* image =cvLoadImage("/Users/huangyoubin/Desktop/test.jpg");
cvNamedWindow("test_in",CV_WINDOW_AUTOSIZE);
cvNamedWindow("test_out",CV_WINDOW_AUTOSIZE);
cvShowImage("test_in", image);
IplImage* out =cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 3);
cvSmooth(image, out,CV_GAUSSIAN,3,3);
cvShowImage("test_out", out);
cvWaitKey(0);
cvReleaseImage(&image);
cvReleaseImage(&out);
cvDestroyWindow("test_in");
cvDestroyWindow("test_out");
return 0;
}
- IplImage* out =cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 3);
第一个参数CvSize:通过cvGetSize获取,获取当前图像的大小。
第二个参数:告诉我们各通道每个像素点的数据类型。
最后一个参数:说明通道的总数
当前图像是3个通道(每个通道8位) - cvSmooth
平滑处理实际上只是对cvSmooth函数的调用:指定输入图像,输出图像,平滑操作的方法以及平滑处理的一些参数。上面的程序中使用每个像素周围3*3区域进行高斯平滑处理。
上一篇:OpenCV:mac上安装和配置