电脑连接USB摄像头,将捕获的场景保存成图片格式,这个程序里的是将单个摄像头的图像分开保存。
#include "opencv/cv.h"
#include "opencv2/imgproc/imgproc.hpp"
#include
#include
#include
#include
#include
#include
using namespace std;
using namespace cv;
int main()
{
VideoCapture cap1(0);//打开摄像头
VideoCapture cap2(1);
VideoCapture cap3(2);
VideoCapture cap4(4);
if (!cap1.isOpened()|| !cap2.isOpened()|| !cap3.isOpened() || !cap4.isOpened())
{
return -1;
}
Mat frame1, frame2, frame3, frame4;
/*while (!stop)
{
cap0 >> frame0;
imwrite("test.bmp", frame0);
imshow("Video Display", frame0);
cap1 >> frame1;
imshow("Video1 Display", frame1);
if (waitKey(30) >= 0)
stop = true;
}*/
int i = 0;
char name[50];
cvNamedWindow("1", CV_WINDOW_AUTOSIZE);
cvNamedWindow("2", CV_WINDOW_AUTOSIZE);
cvNamedWindow("3", CV_WINDOW_AUTOSIZE);
cvNamedWindow("4", CV_WINDOW_AUTOSIZE);
while (waitKey(500)&& i < 35)//时钟等待,程序自己进行循环,等待时间和需拍图片的个数i可自己设置
{
cap1 >> frame1;
cap2 >> frame2;
cap3 >> frame3;
cap4 >> frame4;
imshow("1", frame1);
imshow("2", frame2);
imshow("3", frame3);
imshow("4", frame4);
sprintf_s(name, "v1\\v1%02d.bmp", i);
imwrite(name, frame1);
sprintf_s(name, "v2\\v2%02d.bmp", i);
imwrite(name, frame2);
sprintf_s(name, "v3\\v3%02d.bmp", i);
imwrite(name, frame3);
sprintf_s(name, "v4\\v4%02d.bmp", i);
imwrite(name, frame4);
i++;
}
cvDestroyWindow("1");
cvDestroyWindow("2");
cvDestroyWindow("3");
cvDestroyWindow("4");
return 0;
}
读取网络摄像头直接进行保存,保存格式为bmp,只需自己创建保存文件的位置,但是我这里写的是同时读取四个摄像头,这个程序现在有一个bug就是一定要进行调试运行才不会出错,如果选择不调试就会说内存错误。如果知道问题所在的欢迎指导。
上面所说问题已解决,另外增加相机调试功能,输入q后才会进入保存图片的循环
#include "opencv/cv.h"
#include "opencv2/imgproc/imgproc.hpp"
#include
#include
#include
#include
#include
#include
#define camera4
using namespace std;
using namespace cv;
#ifdef camera4
int main()
{
VideoCapture cap1(0);
VideoCapture cap2(1);
VideoCapture cap3(2);
VideoCapture cap4(3);
if (!cap1.isOpened()|| !cap2.isOpened()|| !cap3.isOpened() || !cap4.isOpened())
{
printf("failed to open cameras");
return -1;
}
Mat frame1, frame2, frame3, frame4;
int i = 0;
char name[50];
cvNamedWindow("1", CV_WINDOW_AUTOSIZE);
cvNamedWindow("2", CV_WINDOW_AUTOSIZE);
cvNamedWindow("3", CV_WINDOW_AUTOSIZE);
cvNamedWindow("4", CV_WINDOW_AUTOSIZE);
cap1 >> frame1;
cap2 >> frame2;
cap3 >> frame3;
cap4 >> frame4;//这里先读取一次不进行imshow,因为第一次读取时并无内容,立即进行显示时提示图片大小=0,所以报错
while (1)
{
cap1 >> frame1;
cap2 >> frame2;
cap3 >> frame3;
cap4 >> frame4;
imshow("1", frame1);
imshow("2", frame2);
imshow("3", frame3);
imshow("4", frame4);
waitKey(1);
if (waitKey() == 'q')////输入q退出循环
break;
}
while (waitKey(500)&& i < 35)
{
cap1 >> frame1;
cap2 >> frame2;
cap3 >> frame3;
cap4 >> frame4;
imshow("1", frame1);
imshow("2", frame2);
imshow("3", frame3);
imshow("4", frame4);
sprintf_s(name, "v1\\v1%02d.bmp", i);
imwrite(name, frame1);
sprintf_s(name, "v2\\v2%02d.bmp", i);
imwrite(name, frame2);
sprintf_s(name, "v3\\v3%02d.bmp", i);
imwrite(name, frame3);
sprintf_s(name, "v4\\v4%02d.bmp", i);
imwrite(name, frame4);
i++;
}
cvDestroyWindow("1");
cvDestroyWindow("2");
cvDestroyWindow("3");
cvDestroyWindow("4");
return 0;
}
#endif