Доступ к IP-камере с использованием OpenCV

Код, приведенный ниже, предназначен для доступа к IP-камере Axis с использованием OpenCV. При запуске программы сначала отображается «Ошибка при открытии cap_ffmpeg_impl …», а затем отображается Камера не найдена.

#include <opencv\cv.h>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;

int main()
{
Mat frame;
namedWindow("video", 1);
VideoCapture cap("http://IPADDRESS/video.mjpg");
if(!cap.isOpened())
{
cout<<"Camera not found"<<endl;
getchar();
return -1;
}
while ( cap.isOpened() )
{
cap >> frame;
if(frame.empty()) break;

imshow("video", frame);
if(waitKey(30) >= 0) break;
}
return 0;
}

Куда я иду не так?

8

Решение

Я столкнулся с подобной проблемой при попытке отображения IP-камеры с помощью общедоступной IP-камеры. Opencv нужен какой-то типичный URL, чтобы открыть камеру. Попробуйте URL из кода ниже.
Вот код, который работал для меня.

int main(int, char**) {
cv::VideoCapture vcap;
cv::Mat image;

// This works on a D-Link CDS-932L
const std::string videoStreamAddress = "http://ID:PASSWORD@IPADDRESS:PORTNO/mjpeg.cgi?user=ID&password=ID:PASSWORD&channel=0&.mjpg";
//open the video stream and make sure it's opened
if(!vcap.open(videoStreamAddress)) {
std::cout << "Error opening video stream or file" << std::endl;
return -1;
}

for(;;) {
if(!vcap.read(image)) {
std::cout << "No frame" << std::endl;
cv::waitKey();
}
cv::imshow("Output Window", image);

if(cv::waitKey(1) >= 0) break;
}

}

Скопируйте этот код как есть и попробуйте.

#include <stdio.h>
#include <opencv2/opencv.hpp>
#include <iostream>
int main(int, char**) {
cv::VideoCapture vcap;
cv::Mat image;

// This works on a D-Link CDS-932L

const std::string videoStreamAddress = "http://USER:PWD@IPADDRESS:8088/mjpeg.cgi?user=USERNAME&password=PWD&channel=0&.mjpg";
//open the video stream and make sure it's opened
if(!vcap.open(videoStreamAddress)) {
std::cout << "Error opening video stream or file" << std::endl;
return -1;
}

for(;;) {
if(!vcap.read(image)) {
std::cout << "No frame" << std::endl;
cv::waitKey();
}
cv::imshow("Output Window", image);

if(cv::waitKey(1) >= 0) break;
}

}
7

Другие решения

Следующее работает для Axis M1004-W, подключенного к моему компьютеру через кабель Ethernet:

  1. В браузере по вашему выбору (я использую Chrome), перейдите к IP-адресу камеры. Предоставьте учетные данные по мере необходимости.
  2. Вы должны смотреть на трансляцию с камеры. Щелкните правой кнопкой мыши видеопоток и выберите «Проверить элемент» (или его эквивалент в браузерах, отличных от Chrome).
  3. Вы должны увидеть переменную с именем src — это то, что вы можете использовать в OpenCV для прямого доступа к камере. Мой /mjpg/video.mjpgБьюсь об заклад, твоя будет похожа.

Адрес, который вы даете OpenCV, должен выглядеть следующим образом:

http://<USERNAME>:<PASSWORD>@<IP_ADDRESS>/<the value of src>

Вот как выглядит моя:

http://uname:[email protected]/mjpg/video.mjpg

Я ввел свой адрес в ваш код и могу видеть видеопоток из окна OpenCV.

2

Я установил приложение «Mini WebCam» на свой iphone и использовал его как ip-камеру с «http://192.168.1.103«как это адрес. Кроме того, я использовал этот кусок кода:

VideoCapture capture;
Mat image;
if (!capture.open("http://192.168.1.103/video.cgi?.mjpg")) {
cout << "Error opening video stream or file" << endl;
return -1;
}
....

оно работает.(http://192.168.1.103/video.cgi?.mjpg)

0
По вопросам рекламы [email protected]