C++ 从Open CV捕获网络视频
我正在测试我发现的一些用于捕获网络摄像机视频流的代码,这与我过去实现相同的功能的方法有很大不同,但这应该是合适的方法 这是我过去的做法:C++ 从Open CV捕获网络视频,c++,opencv,video-capture,C++,Opencv,Video Capture,我正在测试我发现的一些用于捕获网络摄像机视频流的代码,这与我过去实现相同的功能的方法有很大不同,但这应该是合适的方法 这是我过去的做法: CvCapture* capture; IplImage* frame = 0; while (true) { //Read the video stream capture = cvCaptureFromCAM(1); if (! capture) break; frame = cvQueryFrame(capture);
CvCapture* capture;
IplImage* frame = 0;
while (true)
{
//Read the video stream
capture = cvCaptureFromCAM(1);
if (! capture) break;
frame = cvQueryFrame(capture);
//Create a window to display
cvNamedWindow("Te estas viendo", CV_WINDOW_NORMAL|CV_WINDOW_KEEPRATIO);
cvShowImage("Te estas viendo", frame);
int c = cvWaitKey(10);
if ( (char)c == 27 ) break;
}
//Clean and release resources
cvReleaseImage(&frame);
cvDestroyAllWindows();
VideoCapture camera;
camera.open(cameraNumber);
if (!camera.isOpened()) {
cerr << "ERROR: Could not access the camera or video!" <<endl;
exit(1);
}
while (true) {
// Grab the next camera frame.
cv::Mat cameraFrame;
camera >> cameraFrame;
if (cameraFrame.empty()) {
std::cerr << "ERROR: Couldn't grab a camera frame." <<
std::endl;
exit(1);
}
这是测试代码:
CvCapture* capture;
IplImage* frame = 0;
while (true)
{
//Read the video stream
capture = cvCaptureFromCAM(1);
if (! capture) break;
frame = cvQueryFrame(capture);
//Create a window to display
cvNamedWindow("Te estas viendo", CV_WINDOW_NORMAL|CV_WINDOW_KEEPRATIO);
cvShowImage("Te estas viendo", frame);
int c = cvWaitKey(10);
if ( (char)c == 27 ) break;
}
//Clean and release resources
cvReleaseImage(&frame);
cvDestroyAllWindows();
VideoCapture camera;
camera.open(cameraNumber);
if (!camera.isOpened()) {
cerr << "ERROR: Could not access the camera or video!" <<endl;
exit(1);
}
while (true) {
// Grab the next camera frame.
cv::Mat cameraFrame;
camera >> cameraFrame;
if (cameraFrame.empty()) {
std::cerr << "ERROR: Couldn't grab a camera frame." <<
std::endl;
exit(1);
}
摄像机;
照相机。打开(照相机编号);
如果(!camera.isOpened()){
cerr您可能缺少while循环中的结束括号。另外,请确保在while
循环之外创建namedWindow
。在每次迭代中创建窗口的成本都很高。请参阅以下内容:
VideoCapture camera;
camera.open(cameraNumber);
namedWindow("output");
if (!camera.isOpened()) {
cerr << "ERROR: Could not access the camera or video!" <<endl;
return -1;
}
while (true) {
// Grab the next camera frame.
cv::Mat cameraFrame;
camera >> cameraFrame;
if (cameraFrame.empty()) {
std::cerr << "ERROR: Couldn't grab a camera frame." <<
std::endl;
return -1;
}
imshow("output", cameraFrame);
waitKey(10);
}
摄像机;
照相机。打开(照相机编号);
名称(“输出”);
如果(!camera.isOpened()){
cerr您可能缺少while循环中的结束括号。另外,请确保在while
循环之外创建namedWindow
。在每次迭代中创建窗口的成本都很高。请参阅以下内容:
VideoCapture camera;
camera.open(cameraNumber);
namedWindow("output");
if (!camera.isOpened()) {
cerr << "ERROR: Could not access the camera or video!" <<endl;
return -1;
}
while (true) {
// Grab the next camera frame.
cv::Mat cameraFrame;
camera >> cameraFrame;
if (cameraFrame.empty()) {
std::cerr << "ERROR: Couldn't grab a camera frame." <<
std::endl;
return -1;
}
imshow("output", cameraFrame);
waitKey(10);
}
摄像机;
照相机。打开(照相机编号);
名称(“输出”);
如果(!camera.isOpened()){
cerr查找有关的详细信息。参数device
是打开的视频捕获设备的ID,如果您的计算机上只有一个摄像头,则通过0
。这是我测试的从网络摄像头捕获视频的代码。告诉我是否有任何问题
#include <cv.h>
#include <highgui.h>
using namespace cv;
int main(int argc, char** argv) {
Mat cameraFrame;
VideoCapture camera(0);
if (!camera.isOpened()) {
std::cerr << "ERROR: Could not access the camera or video!" << std::endl;
return -1;
}
while (true) {
// Grab the next camera frame.
camera >> cameraFrame;
if (cameraFrame.empty()) {
std::cerr << "ERROR: Couldn't grab a camera frame." <<
std::endl;
return -1;
}
namedWindow("camera", CV_WINDOW_AUTOSIZE);
imshow("camera", cameraFrame);
char ch = waitKey(25);
if (ch == 27) break;
}
return 0;
}
#包括
#包括
使用名称空间cv;
int main(int argc,字符**argv){
摄影框;
摄像机(0);
如果(!camera.isOpened()){
标准:cerr摄像机框架;
if(cameraFrame.empty()){
std::cerr查找有关的更多信息。参数设备
是打开的视频捕获设备的ID,如果您的计算机上只有一个摄像头,则通过0
。这是我测试的从网络摄像头捕获视频的代码。如果有任何问题,请告诉我
#include <cv.h>
#include <highgui.h>
using namespace cv;
int main(int argc, char** argv) {
Mat cameraFrame;
VideoCapture camera(0);
if (!camera.isOpened()) {
std::cerr << "ERROR: Could not access the camera or video!" << std::endl;
return -1;
}
while (true) {
// Grab the next camera frame.
camera >> cameraFrame;
if (cameraFrame.empty()) {
std::cerr << "ERROR: Couldn't grab a camera frame." <<
std::endl;
return -1;
}
namedWindow("camera", CV_WINDOW_AUTOSIZE);
imshow("camera", cameraFrame);
char ch = waitKey(25);
if (ch == 27) break;
}
return 0;
}
#包括
#包括
使用名称空间cv;
int main(int argc,字符**argv){
摄影框;
摄像机(0);
如果(!camera.isOpened()){
标准:cerr摄像机框架;
if(cameraFrame.empty()){
STR::我不断地得到“错误:不能抓取相机框架。”“留言”。无论如何,相信阿列克谢。你为“CopyAuthNobe”提供什么?- 1(任何可用的)应该是一个好主意,0(第一)是下一个最好的,尝试一下。-绝对喜欢C++ API(如你的第二个例子)。我想这和旧的c一有关,但我找不到解决的办法。或者不知道我是否应该继续获得“错误:无法抓取相机帧。”“消息。无论如何,相信亚历克赛。你为“cameraNumber”输入了什么?”-1(任何可用的)应该是个好主意,0(第一个)下一个最好的方法,尝试一下。-绝对喜欢C++ API(如在你的第二个例子中)对于旧的c版本!我认为这与此有关,但我找不到解决方法。或者不知道我是否应该降级您在其上使用的OpenCV版本?@Diego我使用的是版本2.4.6,它对我来说运行良好。这可能是OpenCV安装的问题,很难说。@Diego在Windows上使用OpenCV版本2.4.6(使用CMake安装)有趣的是,我并没有真正使用CMake,我只是将opencv提取到我的硬盘上,将C:\opencv\build\x64\vc11\bin
添加到我的路径,然后在Visual Studio中添加适当的设置来绑定库。@Diego你说代码在2.4.5上运行,那么你知道opencv安装是否存在问题了吗:试试简单的方法代码(在2.4.6上),例如从文件加载图像。如果没有问题,请用我上面的代码替换测试代码。您在上面使用了什么Open CV版本?@Diego我使用的是2.4.6版本,对我来说效果很好。这可能是OpenCV安装的问题,很难说。@Diego在Windows上安装的OpenCV版本为2.4.6(使用CMake安装)有趣的是,我并没有真正使用CMake,我只是将opencv提取到我的硬盘上,将C:\opencv\build\x64\vc11\bin
添加到我的路径,然后在Visual Studio中添加适当的设置来绑定库。@Diego你说代码在2.4.5上运行,那么你知道opencv安装是否存在问题了吗:试试简单的方法代码(在2.4.6中),例如从文件加载图像。如果没有问题,请用上面的“我的代码”替换测试代码。