#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)»