Доступ к IP-камере с помощью OpenCV
приведенный ниже код предназначен для доступа к IP-камере Axis с помощью OpenCV. При запуске программы сначала отображается " ошибка при открытии cap_ffmpeg_impl...- а потом он показывает камера не найдена.
#include <opencvcv.h>
#include <opencv2highguihighgui.hpp>
#include <opencv2imgprocimgproc.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;
}
где я ошибаюсь?
3 ответов
я столкнулся с аналогичной проблемой при попытке отобразить 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;
}
}
следующие работы для оси M1004-W, подключенной к моему компьютеру через кабель ethernet:
- в браузере по вашему выбору (я использую Chrome) перейдите к IP-адресу камеры. При необходимости предоставьте учетные данные.
- вы должны смотреть на прямой эфир с камеры. Щелкните правой кнопкой мыши на видео и выберите "Проинспектировать элемент" (или его эквивалент в браузеры Chrome).
- вы должны увидеть переменную под названием src-это то , что вы можете используйте в OpenCV для прямого доступа к камере. Мой
/mjpg/video.mjpg
, и я уверен, что Ваш будет похож.
адрес, который вы даете OpenCV, должен выглядеть так:
http://<USERNAME>:<PASSWORD>@<IP_ADDRESS>/<the value of src>
вот как выглядит мой:
http://uname:login@192.168.0.0/mjpg/video.mjpg
я ввел свой адрес в ваш код и могу видеть видеопоток из окна OpenCV.
Я установил приложение "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.цги?.с mjpg)