树莓派+摄像头
用过树莓派的都知道,树莓派上有两个USB,可以接一个普通的摄像头进行实验。
从摄像头中采集一副图像:
#include <stdio.h>
#include <stdlib.h>
#include <opencv/highgui.h>
#include <opencv/cv.h>
/*
用摄像头采集一帧图像,将图像设置为640*480,保存为test.jpg
*/
int main()
{
IplImage* img;//图像结构体
cvNamedWindow("Test", CV_WINDOW_AUTOSIZE);
CvCapture* cam = cvCreateCameraCapture(0);//初始化摄像头,参数可以用0
if(NULL == cam)
{
fprintf(stderr, "Can't init Camera!\n");
return 1;
}
cvSetCaptureProperty(cam, CV_CAP_PROP_FRAME_WIDTH, 640);//设置图像属性 宽和高
cvSetCaptureProperty(cam, CV_CAP_PROP_FRAME_HEIGHT,480);
img = cvQueryFrame(cam);
if(NULL == img)
{
fprintf(stderr, "Can't get a frame\n");
return 1;
}
cvShowImage("Test", img);
cvSaveImage("test.jpg", img, 0);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow("Test");
return 0;
}
解释:
第一步:初始化摄像头
函数cvCreateCameraCapture(),返回一个结构体CvCapture指针(视频获取结构,获取视频、图像都要用到)
第二步:设置图形属性
使用函数cvSetCaptureProperty(),CV_CAP_PROP_FRAME_WIDTH和CV_CAP_PROP_FRAME_HEIGHT
代表图像的宽和高。
第三步:获取一帧图像
使用cvQueryFrame(),参数是CvCapture指针
第四步:显示图像cvShowImage()
第五步:保存图像
这里注意:不同版本的OpenCv貌似参数数目也不同,这里我用cvSaveImage(),百度一下可以知道这个函数有两个参数,分别是文件名,图像结构体指针,但是我用两个就编译出错,最后解决方法是最后加一个参数0就搞定了。