OpenCV 2 Computer Vision Application Programming Cookbook / Изучаем OpenCV: Играем с изображениями

← →
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

Подготавливаемся

oneassasin 03.07.13 в 13:08

0

Запускаем Qt Creator, который будем используем для создания GUI приложения. Также можно создать GUI приложение без этого инструмента, но использование графической IDE, в которые виджеты можно просто drag'n'drop'ать самый простой способ создать хорошо выглядящий GUI.

wuffur 28.08.13 в 19:02

0

Как это сделать...

oneassasin 03.07.13 в 13:08

0

Выберети в меню Создать новый проект(Create New Project),
и там выберете Qt GUI Application как на следующем скриншоте:

wuffur 28.08.13 в 19:04

0

Задайте имя и место расположения вашего проекта. Если вы затем нажмёте кнопку Next, то увидите что модуль QtGUI проверяется. Так как на не нужно больше других модулей, то поэтому вы можете нажать Finish . Таким образом вы создадите новый проект. Кроме того, чтобы использовать файл проекта ( .pro) и файл main.cpp , вы увидите два файла главных окон (mainwindow), определяющих класс, который содержит ваше GUI окно. Вы также найдёте файл у которого расширение .ui, то самое которое описывает UI вывод(layout). На самом деле, если два раза по нему нажмёте правой кнопкой мыши, то увидите текущий интерфейс как представлено здесь:

wuffur 28.08.13 в 19:10

0

Также вы можете сюда drag-and-drop'нуть (перетащить) различные виджеты. Положите две кнопки Push, как мы делали в предыдущем премере. Вы можете изменить их размер, и изменить размер окна, чтобы он выглядел хорошо. Вам также следует переименовать кнопки label. Просто нажмите на мышку и вставьте любое имя по вашему выбору.

wuffur 28.08.13 в 19:14

0

Добавим теперь сигнальный метод, чтобы управлять событием нажатия на кнопку. Нажмите на правую кнопку мыши по первой кнопке и выберете пункт Go to slot... в контекстном меню. Список возможных сигналов выводится на экран так как показано на следующем скриншоте:

wuffur 28.08.13 в 19:32

0

Просто выберете сигнал clicked(). Он управляет событием нажатия кнопки. Когда вы это сделаете, тогда вас перенесёт в файл mainwindow.cpp. Это метод слота, который вызывается при получении сигнала click():

wuffur 08.10.13 в 18:04

0

#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
}

oneassasin 03.07.13 в 13:08

0

Чтобы иметь возможность вывести изображение на экран и затем провести какое-то преобразование над ним, нам нужно опредилить переменную-член класса cv::Mat. Это производится в заголовочном файле класса MainWindow. Так выглядит теперь заголовочный файл:

wuffur 08.10.13 в 18:06

0

#include <QMainWindow>
#include <QFileDialog>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
namespace Ui
{
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
cv::Mat image; // переменная с изображением
private slots:
void on_pushButton_clicked();
};

oneassasin 03.07.13 в 13:09

0

Отметим, что мы также включили заголовочные файлы core.hpp и highgui.hpp. Как мы уже выучили в предыдущем рецепте(практике), мы теперь должны забыть о том, чтобы редактировать файл проекта, чтобы добавить информацию библиотеки OpenCV.

wuffur 08.10.13 в 18:09

0

OpenCV код может потом быть добавлен. Эта первая кнопка открывает исходное изображение. Это производится при добавлении следующего кода к связанному с ним методу слота:

wuffur 08.10.13 в 18:10

0

void MainWindow::on_pushButton_clicked()
{
QString fileName = QFileDialog::getOpenFileName(this,
tr("Open Image"), ".",
tr("Image Files (*.png *.jpg *.jpeg *.bmp)"));
image= cv::imread(fileName.toAscii().data());
cv::namedWindow("Original Image");
cv::imshow("Original Image", image);
}

oneassasin 03.07.13 в 13:09

0

Вы можете создать новый слот, если нажмёте правой кнопкой мыши по второй кнопке. Этот второй слот произведет некоторые преобразования над выбранным входным изображением. Следующий код просто перевернёт изображение:

wuffur 08.10.13 в 18:11

0

void MainWindow::on_pushButton_2_clicked()
{
cv::flip(image,image,1);
cv::namedWindow("Output Image");
cv::imshow("Output Image", image);
}

oneassasin 03.07.13 в 13:09

0

Теперь вы можете скомпилировать и запустить эту программу и ваш двухкнопочный графический интерфейс GUI позволит вам выбрать изображение и произвести над ним преобразования.

wuffur 08.10.13 в 18:12

0

Входные и выходные изображения отображаются на двух окнах, выводящихся поверх экрана(highgui), которые мы определили.

wuffur 08.10.13 в 18:13

0

Как это работает...

oneassasin 03.07.13 в 13:09

0

private slots:
void on_pushButton_clicked();

oneassasin 03.07.13 в 13:09

0

ui->pushButton_2->setEnabled(false);

oneassasin 03.07.13 в 13:09

0

if (image.data) {
ui->pushButton_2->setEnabled(true);
}

oneassasin 03.07.13 в 13:10

0

Более...

oneassasin 03.07.13 в 13:10

0

void MainWindow::on_pushButton_2_clicked()
{
cv::flip(image,image,1); // обрабатываем изображение
// выбираем цветовой канал
cv::cvtColor(image,image,CV_BGR2RGB);
// Qt изображение
QImage img= QImage((const unsigned char*)(image.data),
image.cols,image.rows,QImage::Format_RGB888);
// отображаем на Qlabel
ui->label->setPixmap(QPixmap::fromImage(img));
// изменяем размеры под размер картинки
ui->label->resize(ui->label->pixmap()->size());
}

oneassasin 03.07.13 в 13:11

0

Так же смотрите

oneassasin 03.07.13 в 13:11

0
Минутку...

← Предыдущая страница