का उपयोग कर वेबकैम से वीडियो कैप्चर करते समय फ्रीज करता है मैं कुछ वास्तविक समय वीडियो प्रोसेसिंग के लिए ओपनसीवी का उपयोग कर रहा हूं।क्यूटी जीयूआई ओपनसीवी
फ्रंट-एंड के रूप में मैं क्यूटी फ्रेमवर्क का उपयोग कर रहा हूं।
मेरे जीयूआई पर, मेरे पास एक इनपुट छवि विंडो (लेबल में मैप किया गया) और एक आउटपुट छवि विंडो (किसी अन्य लेबल में मैप की गई) और 3 पुश बटन हैं। एक इनपुट इनपुट वीडियो शुरू करने के लिए, वीडियो को संसाधित करने वाला दूसरा (कोड अभी तक लिखा नहीं गया है), और बाहर निकलने के लिए तीसरा।
मैं वर्तमान में अपने वीडियो को स्ट्रीम करने और फ्रंट-एंड पर प्रदर्शित करने में सक्षम हूं। लेकिन यह मेरे जीयूआई को ताला लगा देता है और बाहर निकलने में असमर्थ हूं।
मैंने क्यूटीमर्स (इस और क्यूटी मंच से सुझावों का उपयोग करके) का उपयोग करने की कोशिश की, लेकिन मेरा जीयूआई अभी भी बंद है।
कोई सराहना करेगा अगर कोई मुझे सही दिशा में इंगित कर सकता है। ,
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp> // for cvtColor
#include <iostream>
#include <QTimer>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_buttonCaptureVideo_clicked();
void on_buttonExit_clicked();
public slots:
virtual void doNextFrame() {repaint();}
private:
Ui::MainWindow *ui;
CvCapture *capture; // OpenCV Video Capture Variable
IplImage *frame; // Variable to capture a frame of the input video
cv::Mat source_image; // Variable pointing to the same input frame
cv::Mat dest_image; // Variable to output a frame of the processed video
QTimer *imageTimer;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
cvReleaseImage(&frame);
cvReleaseCapture(&capture);
}
void MainWindow::on_buttonCaptureVideo_clicked()
{
// Set to 25 frames per second
const int imagePeriod = 1000/25; // ms
imageTimer = new QTimer(this);
imageTimer->setInterval(imagePeriod);
connect(imageTimer, SIGNAL(timeout()), this, SLOT(doNextFrame()));
// Use the default camera
capture = cvCreateCameraCapture(-1);
while(capture)
{
// Capture a frame
frame = cvQueryFrame(capture);
// Point to the same frame
source_image = frame;
// Resize Image
cv::resize(source_image, source_image, cv::Size(128,128) , 0, 0);
// Change to RGB format
cv::cvtColor(source_image,source_image,CV_BGR2RGB);
// Convert to QImage
QImage qimg = QImage((const unsigned char*) source_image.data, source_image.cols, source_image.rows, QImage::Format_RGB888); // convert to QImage
// Display on Input Label
ui->labelInputVideo->setPixmap(QPixmap::fromImage(qimg));
// Resize the label to fit the image
ui->labelInputVideo->resize(ui->labelInputVideo->pixmap()->size());
}
}
void MainWindow::on_buttonExit_clicked()
{
connect(ui->buttonExit, SIGNAL(clicked()), qApp, SLOT(closeAllWindows()));
}
सही पर मूल्यांकन करने के लिए 'कैप्चर' कितना समय लगता है? लूप चलाने के दौरान कितना समय लगता है? – jdi
@jdi: जब तक उपयोगकर्ता इनपुट वीडियो स्ट्रीम करना चाहता है, कैप्चर को सत्य का मूल्यांकन करना चाहिए। मुझे क्यूटीमर का उपयोग करके अब प्रतिक्रिया देने के लिए जीयूआई मिल गया है, लेकिन मुझे लगता है कि अगर मैं स्ट्रीमिंग को बहुत लंबे समय तक सक्रिय छोड़ देता हूं, तो मुझे संदेश मिलते हैं "कैमरा गिरावट फ्रेम!", तो मेरा अनुमान है कि आखिरकार मुझे क्यूटीएचड्स में जाने की आवश्यकता होगी। आपके जवाब के लिए धन्यवाद। – Sid
@Sid, क्या आप कोड को काम कर सकते हैं, कृपया? धन्यवाद –