Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Marcosko
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 6
#1

Видимость экземпляра класса внутри класса - C++

30.06.2015, 13:49. Просмотров 410. Ответов 4
Метки нет (Все метки)

Здравствуйте! Пытаюсь вывести openCV видео в QT виджете. На данный момент в слоте обновления картинки инициализирую класс cv::VideoCapture cap(0); это совсем не лучшее решение и скорее всего из за него количество кадров в секунду очень низкое.
Как инициализировать этот класс единожды, что бы он был виден в классе отвечающем за конвертацию и отображения картинки?
mainwindow.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "mainwindow.h"
#include <QImage>
#include <QLabel>
#include "opencv2/opencv.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/imgproc/types_c.h"
#include <QPushButton>
#include <QVBoxLayout>
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
 
  cv::VideoCapture cap(0);
  timer = new QTimer(this);
  connect(timer, SIGNAL(timeout()), this, SLOT(UpDateImage(cap)));
  timer->start(20);
}
 
MainWindow::~MainWindow()
{
}
 
void MainWindow::UpDateImage()
{
    cv::VideoCapture cap(0);
    myLabel = new QLabel;
    cv::Mat temp;
    cv::Mat frame;
    setCentralWidget(myLabel);
    cap >> frame;
    cvtColor(frame, temp,CV_BGR2RGB);
    QImage image((const uchar *) temp.data, temp.cols, temp.rows, temp.step, QImage::Format_RGB888);
    image.bits();
    myLabel->setPixmap(QPixmap::fromImage( image ));
}
mainwindow.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include <QLabel>
#include "opencv2/opencv.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/imgproc/types_c.h"
#include <QPushButton>
#include <QTimer>
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void UpDateImage();
 
private:
 
    QLabel *myLabel;
    QTimer *timer;
 
 
};
 
#endif // MAINWINDOW_H
Если делаю так:
C++ (Qt)
1
2
3
4
5
6
7
private:
 
    QLabel *myLabel;
    QTimer *timer;
    cv::VideoCapture *cap;
 
};
то не дает передать классу id камеры и возникает проблема в строке
cap >> frame;
если же пытаюсь сделать вот так:
C++ (Qt)
1
2
3
4
class MainWindow : public QMainWindow
{
    Q_OBJECT
cv::VideoCapture *cap;}
то так же не могу передать аргумент классу
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2015, 13:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Видимость экземпляра класса внутри класса (C++):

Имя экземпляра объекта внутри класса на С++ - C++
Добрый день. Подскажите, пожалуйста, как узнать имя экземпляра объекта внутри класса на С++ ? В частности, мне надо имя экземпляра...

Видимость констант из глобальной области внутри класса - C++
#include &lt;iostream&gt; //stack struct struct node; struct node { int* val; node* prev; }; typedef struct node...

Удаление экземпляра класса в функции самого класса (Ошибка при отладке) - C++
Допустим, у нас есть класс Buffer, который хранит в себе указатель на класс некоторой матрицы и количество этих указателей refcounter ...

Явное создание экземпляра класса и явная специализация шаблона класса - C++
Всем добрый день! Не могу разобраться - эти две технологии дают один и тот же результат? В каких случаях применять одно и другое?...

Передача свойства одного экземпляра класса другому экземпляру класса - C++
#include &lt;tchar.h&gt; class A { public: A(); int aVar; }; class B : public A

Как построить экземпляр дочернего класса на основе готового экземпляра базового класса? - C++
Если уже есть готовый объект базового класса. Могу я построить экземпляр дочернего на его основе, (напр., получив такой базовый объект...

4
lss
921 / 850 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
30.06.2015, 14:20 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Marcosko Посмотреть сообщение
то не дает передать классу id камеры
Кто не даёт? Инициализируй указатель в конструкторе класса:
C++
1
cap = new cv::VideoCapture(0);
Цитата Сообщение от Marcosko Посмотреть сообщение
и возникает проблема в строке
C++
1
cap >> frame;
C++
1
(*cap) >> frame;
1
Marcosko
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 6
30.06.2015, 14:54  [ТС] #3
Огромное спасибо! Это помогло, не могли бы вы подсказать что я сделал и где про это почитать?
0
lss
921 / 850 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
30.06.2015, 22:24 #4
Цитата Сообщение от Marcosko Посмотреть сообщение
что я сделал и где про это почитать?
Это о чём?
0
rikimaru2013
C++ Game Dev
2436 / 1130 / 240
Регистрация: 30.11.2013
Сообщений: 3,688
30.06.2015, 22:46 #5
Цитата Сообщение от Marcosko Посмотреть сообщение
не могли бы вы подсказать что я сделал и где про это почитать
неплохо вы код пишите, что не понимаете, что пишете

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2015, 22:46
Привет! Вот еще темы с ответами:

Пример класса с конструктором и деструктором, создание экземпляра класса через конструктор с параметрами - C++
Привести пример класса с конструктором и деструктором, созданием экземпляра класса с помощью конструктора с параметрами.

Вызов метода класса без создания экземпляра класса. - C++
В общем мне для функционирования одной программы нужно постоянно вызывать метод одного из классов. Я это делаю с помощью new - delete. Мне...

Создать экземпляр класса по ссылке экземпляра класса - C++
Есть класс для обработки клиентов // Абстрактный class ClientProcessing { }; Я создаю от него наследника class...

Видимость класса относительно другого класса - C++
class A;//Это просто поставили класс А в видимость класса В? class B { A a; }; class A{}; Я просто, трактовал это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
30.06.2015, 22:46
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru