crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Захват видео с IP-камеры
ONIX
  опции профиля:
сообщение 15.5.2014, 20:09
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 15.5.2014
Пользователь №: 4131

Спасибо сказали: 0 раз(а)




Репутация:   0  


Здравствуйте! Хочу на qt сделать программку для подключения к ip-камере. Простенькую, чтобы только к камере по ip подключалась и всё.
Не получается реализовать её в оконном режиме, получается только путём создания консольного приложения через Qt-creator.
Помогите пожалуйста переделать её из консольной в виджетную. Не судите строго, только начал работать с QT.

Вот код программы на C++
#include <iostream>
#include "opencv2/opencv.hpp"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>


using namespace std;
using namespace cv;

int main()
{
    VideoCapture cap("http://192.168.0.101:8080/video?x.mjpeg"); //change this URL according to your camera
    if (!cap.isOpened())
    {
        cout << "could not capture";
        return 0;
    }

    Mat frame;
    namedWindow("IPcamera", 1);
    char key = 'a';

    while(key != 27)
    {
        cap.grab();
        cap.retrieve(frame);
        imshow("IPcamera", frame);
        key = waitKey(10);
    }

    destroyAllWindows();
    return 0;
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 16.5.2014, 10:26
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Посмотри этот ролик http://youtu.be/0ONxIy8itRA
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ONIX
  опции профиля:
сообщение 16.5.2014, 22:34
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 15.5.2014
Пользователь №: 4131

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(igor_bogomolov @ 16.5.2014, 10:26) *
Посмотри этот ролик http://youtu.be/0ONxIy8itRA

Спасибо, ролик действительно подробно показывает процесс создания подобного приложения. Сделал всё по образцу, но выскакивает огромная куча ошибок. Я так понял дело в том, что на ролике используется Qt 4, а у меня Qt5. Пытался переделать, но ничего не вышло. Мне бы с этого ролика хотя бы взять вывод с камеры на экран, без обработки с поиском мячика. Может подскажешь, как переделать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 17.5.2014, 0:20
Сообщение #4


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Там же всё просто.
Раскрывающийся текст
#include "dialog.h"
#include "ui_dialog.h"

#include <QtCore/QDebug>
#include <QtCore/QTimer>

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);

    capture.release();
    if (!capture.open(0)) {
        qWarning() << tr("error: capWebCam not accessed successfully");
        return;
    }

    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(processFrameAndUpdateGui()));
    timer->start(20);
}

Dialog::~Dialog()
{
    capture.release();
    delete ui;
}

void Dialog::processFrameAndUpdateGui()
{
    if (capture.read(mat)) {
        QImage image((uchar*)mat.data, mat.cols, mat.rows, mat.step, QImage::Format_RGB888);
        ui->label->setPixmap(QPixmap::fromImage(image));
    }
}
Более подробно смотри во вложении.
Прикрепленные файлы
Прикрепленный файл  QtTracker3.tar.gz ( 3.59 килобайт ) Кол-во скачиваний: 856
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ONIX
  опции профиля:
сообщение 17.5.2014, 0:22
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 15.5.2014
Пользователь №: 4131

Спасибо сказали: 0 раз(а)




Репутация:   0  


Нашёл программу, вот только хотелось бы несколько её усовершенствовать.
Хочу чтобы программа не автоматически подключалась по ip-адресу и выводила изображение с камеры.
А чтобы можно было IP-адрес вводить в текстовое поле, и потом уже осуществлялся переход.
Как это реализовать вообще без понятия, ведь в cvCaptureFromFile кроме цифр ip ещё ведь кое что есть.
Помогите пожалуйста!
void MainWindow::createMycamera()
{
    CvCapture *c = cvCaptureFromFile("http://xxx.xxx.x.xxx:xxxx/video?x.mjpeg");
    if (c != NULL) {
        vidcap = new Vidcap(c);
        FrameSize sizeWH;
        sizeWH.width = 640;
        sizeWH.height = 480;
        vidcap->setSize(sizeWH);
        connect(vidcap, SIGNAL(redy(IplImage *)), this, SLOT(ShowNewFrame(IplImage *)));
        vidcap->start();
    }
    else {
        ui->label->setText("Video device not found.");
    }
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 17.5.2014, 0:29
Сообщение #6


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Показ у тебя начинается когда ты запускаешь таймер. В твоём случае это vidcap->start(). Пока её не вызовешь, показ не начнётся.
Заведи поле для ввода IP и кнопочку, котороя останавливает и запускает таймер. В общем всё у тебя для реализации есть. Смотри исходники, разбирайся.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ONIX
  опции профиля:
сообщение 17.5.2014, 1:11
Сообщение #7


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 15.5.2014
Пользователь №: 4131

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(igor_bogomolov @ 17.5.2014, 0:20) *
Там же всё просто.
Раскрывающийся текст
#include "dialog.h"
#include "ui_dialog.h"

#include <QtCore/QDebug>
#include <QtCore/QTimer>

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);

    capture.release();
    if (!capture.open(0)) {
        qWarning() << tr("error: capWebCam not accessed successfully");
        return;
    }

    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(processFrameAndUpdateGui()));
    timer->start(20);
}

Dialog::~Dialog()
{
    capture.release();
    delete ui;
}

void Dialog::processFrameAndUpdateGui()
{
    if (capture.read(mat)) {
        QImage image((uchar*)mat.data, mat.cols, mat.rows, mat.step, QImage::Format_RGB888);
        ui->label->setPixmap(QPixmap::fromImage(image));
    }
}
Более подробно смотри во вложении.

Спасибо тебе за помощь! Кстати твой проект сразу запустился, пожалуй буду переделывать именно эту прогу.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 16:06