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

电脑连接USB摄像头,将捕获的场景保存成图片格式,这个程序里的是将单个摄像头的图像分开保存。
#include "opencv/cv.h"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <string>
#include <windows.h>
#include <highgui.h>
#include <cxcore.h>
#include <stdio.h>

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 <iostream>
#include <string>
#include <windows.h>
#include <highgui.h>
#include <cxcore.h>
#include <stdio.h>

#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



  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 很抱歉,我无法直接输入中文,但我会尽力回答你的问题。 Here's a sample code in C++ using OpenCV to capture images from a webcam: ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { // Open the default camera VideoCapture cap(0); // Check if camera opened successfully if(!cap.isOpened()){ std::cout << "Error opening video stream or file" << std::endl; return -1; } while(1){ // Capture frame-by-frame Mat frame; cap >> frame; // If the frame is empty, break immediately if (frame.empty()) break; // Display the resulting frame imshow("Frame", frame); // Press ESC on keyboard to exit char c = (char)waitKey(25); if(c==27) break; } // When everything done, release the video capture object cap.release(); // Closes all the windows destroyAllWindows(); return 0; } ``` 这个程序使用 `VideoCapture` 类从默认摄像头捕获帧,并使用 `imshow` 函数将其显示出来。按下 ESC 键可以退出程序。 ### 回答2: 下面是一个通过OpenCV调用网络摄像头的C代码示例: ```c #include <opencv2/opencv.hpp> int main() { // 创建一个VideoCapture对象,用于访问网络摄像头 cv::VideoCapture capture; // 打开网络摄像头,默认使用第一个可用摄像头 capture.open(0); // 检查网络摄像头是否成功打开 if (!capture.isOpened()) { printf("无法打开网络摄像头。\n"); return -1; } cv::Mat frame; // 进入摄像循环,直到按下ESC键 while (true) { // 从网络摄像头读取视频帧 capture.read(frame); // 检查视频帧是否为空 if (frame.empty()) { printf("无法读取视频帧。\n"); break; } // 在窗口中显示视频帧 cv::imshow("网络摄像头", frame); // 按下ESC键退出摄像循环 if (cv::waitKey(1) == 27) { break; } } // 关闭网络摄像头 capture.release(); // 关闭所有窗口 cv::destroyAllWindows(); return 0; } ``` 要运行此代码,您需要先安装OpenCV库,并将其链接到您的项目中。 ### 回答3: 下面是一个使用OpenCV调用网络摄像头的C代码示例: ```c #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { // 创建VideoCapture对象 VideoCapture cap; // 打开网络摄像头 cap.open("http://192.168.1.1:8080/video"); // 检查摄像头是否成功打开 if (!cap.isOpened()) { cout << "无法打开网络摄像头" << endl; return -1; } // 创建窗口来显示图像 namedWindow("Network Camera", WINDOW_NORMAL); while (true) { Mat frame; // 从网络摄像头读取一帧图像 cap.read(frame); // 检查是否成功读取帧 if (frame.empty()) { cout << "无法从网络摄像头获取图像" << endl; break; } // 在窗口中显示图像 imshow("Network Camera", frame); // 等待用户按下ESC键退出 if (waitKey(1) == 27) break; } // 释放VideoCapture对象和关闭窗口 cap.release(); destroyAllWindows(); return 0; } ``` 这个代码首先使用`VideoCapture`对象打开网络摄像头,使用`cap.open("http://192.168.1.1:8080/video")`来打开网络摄像头,其中参数`http://192.168.1.1:8080/video`是网络摄像头的URL地址。然后检查摄像头是否成功打开,如果打开失败则输出错误信息并退出。接下来创建一个窗口用于显示图像,使用`namedWindow`函数创建窗口,并用`imshow`函数在窗口中显示图像。通过循环读取视频帧,再将每一帧显示在窗口中。用户可以通过按下ESC键退出。最后释放`VideoCapture`对象并关闭窗口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值