C/C++ opencv 读取网络摄像头程序

电脑连接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



你可能感兴趣的:(C++)