Как получить данные изображения из функции void click?

#c #function #opencv #onclick #void

Вопрос:

Я закончил функцию click_function, считывающую изображение из любых файлов, используя кнопку Browse_button в графическом интерфейсе. Теперь мне нужна другая функция click_function для обработки этого изображения, но я не знаю, как получить данные изображения из предыдущей функции click_function. Пожалуйста, помогите мне решить эту проблему. Это все файл и исходный код:

 1. mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QFileDialog>
#include <opencv2/core.hpp>
#include <opencv/highgui.h>
#include <QPushButton>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);

    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QPushButton* htest;

private slots:
    void on_Image_Open_clicked();
    void on_pixel_add_button_clicked();
    void on_pixel_add_button_clicked(bool checked);
    void on_pixel_add_button_toggled(bool checked);
};
#endif // MAINWINDOW_H

2. main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

3. mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/opencv.hpp>
#include <opencv/highgui.h>
#include <fstream>

using namespace cv;
using namespace std;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{    
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_Image_Open_clicked() {

    QString filename=QFileDialog::getOpenFileName(this, tr("Choose"),"",tr("Images(*.png *.jpg *.jpeg *.bmp *.gif)"));    
    
    //read from file
    Mat img=cv::imread(filename.toLatin1().data()); //read image with [(B:width x height)(G:widthxheight)(R:widthxheight)

    //convert to RGB to show on Gui
    Mat orgb_img;
    cvtColor(img,orgb_img,CV_BGR2RGB);

    //display original image on first window (image will be resized to 256x256 as Gui config)
    QImage imdisplay((uchar*)orgb_img.data, orgb_img.cols, orgb_img.rows, orgb_img.step, QImage::Format_RGB888);
    ui->original_image->setPixmap(QPixmap::fromImage(imdisplay)); 
}
 

… и моя следующая функция click_function для обработки этого изображения может выглядеть так:

 void MainWindow::on_pixel_add_button_clicked()
{

    how can I get all image data here to process?. 
    ...process command...
}
 

Комментарии:

1. Храните данные в переменных-членах.

2. Mat img=cv::imread(имя файла. toLatin1().данные ()); Изображение загружается в эту переменную «img» типа Mat. Вместо локальной переменной(MAT img) создайте переменную в своем классе «MainWindow», например Mat m_img, или поместите ее в качестве глобальной переменной в верхней части файла .cpp и используйте ее 🙂

3. @RetiredNinja: пожалуйста, объясните более подробно.

4. покажите нам определение класса MainWindow (отредактируйте свой пост, чтобы включить код). вот где вы добавите строку или две.

5. Я все исправил. Теперь код работает нормально! Просто добавьте » on_pixel_add_button_clicked(img);» в функцию on_Image_Open_clicked() и определите «пустое главное окно:: on_pixel_add_button_clicked(cv::Matamp; pxadd_img)»