Здравствуйте! Хочу на 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;
}
Посмотри этот ролик http://youtu.be/0ONxIy8itRA
Там же всё просто.
#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));
}
}
Нашёл программу, вот только хотелось бы несколько её усовершенствовать.
Хочу чтобы программа не автоматически подключалась по 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.");
}
Показ у тебя начинается когда ты запускаешь таймер. В твоём случае это vidcap->start(). Пока её не вызовешь, показ не начнётся.
Заведи поле для ввода IP и кнопочку, котороя останавливает и запускает таймер. В общем всё у тебя для реализации есть. Смотри исходники, разбирайся.
#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));
}
}
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)