123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include <iostream>
- #include <stdio.h>
- using namespace std;
- using namespace cv;
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- info();
- imagenOriginal = imread("lena.jpg");
- if(imagenOriginal.empty())
- cout << "[ERROR] no se pudo cargar la imagen\n\tUso: ./zoom /ruta/de/la/imagen.png\n" << endl;
- namedWindow("Zoom", 1);
- //.3333333333333
- setMouseCallback("Zoom", onMouse, 0);
- imagenOriginal.copyTo(imagen);
- imagenOriginal.copyTo(imagenMostrar);
- for(;;)
- {
- if(imagen.empty())
- break;
- imagen.copyTo(imagenMostrar);
- rectangle(imagenMostrar,
- Point(mousex-(zoomRec/2), mousey-(zoomRec/2)),
- Point(mousex+(zoomRec/2), mousey+(zoomRec/2)),
- cv::Scalar(0,255,0), 1, 8, 0);
- imshow("Zoom", imagenMostrar);
- char c = (char) waitKey(10);
- if(c == 27)
- break;
- switch(c)
- {
- case '+':
- if(zoomRec < 500)
- zoomRec = zoomRec + 10;
- break;
- case '-':
- if(zoomRec > 10)
- zoomRec = zoomRec - 10;
- break;
- default:
- ;
- }
- }
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- Mat MainWindow::zoomIn(int x, int y)
- {
- int width = zoomRec, height = zoomRec;
- int ptoX = x-(zoomRec/2), ptoY = y-(zoomRec/2);
- /*Verifica que el ROI este dentro de la la imagen*/
- if((x+(zoomRec/2)) > imagen.size().width)
- width = width - ((x+(zoomRec/2)) - imagen.size().width);
- if((y+(zoomRec/2)) > imagen.size().height)
- height = height - ((y+(zoomRec/2)) - imagen.size().height);
- if((x-(zoomRec/2)) < 0)
- ptoX = 0;
- if((y-(zoomRec/2)) < 0)
- ptoY = 0;
- Rect roi = Rect(ptoX, ptoY, width, height);
- Mat imagen_roi = imagen(roi);
- cv::resize(imagen_roi, imagen_roi, Size(imagenOriginal.size().width, imagenOriginal.size().height), 0, 0, cv::INTER_AREA);
- return imagen_roi;
- }
- Mat MainWindow::zoomOut(int x, int y)
- {
- return imagenOriginal;
- }
- void MainWindow::onMouse( int event, int x, int y, int /*flags*/, void* /*param*/ )
- {
- mousex = x;
- mousey = y;
- if(event == cv::EVENT_LBUTTONDOWN)
- imagen = zoomIn(x, y);
- else if(event == cv::EVENT_RBUTTONDOWN)
- imagen = zoomOut(x, y);
- }
- void MainWindow::info(){
- cout << "\nDemo de Zoom creado por Sebastián González <brutalchrist@gmail.com>,\n"
- "La versión de Opencv utilizada en este ejemplo es 2.4.5, \n"
- "Usted esta corriendo la versión " << CV_VERSION << "\n"
- << endl;
- cout << "\nTeclas: \n"
- "\tESC - Salir del programa\n"
- "\t+ - Aumenta la escala de zoom\n"
- "\t- - Disminuye la escala de zoom\n"
- "\tCLICK D - zoom\n"
- "\tCLICK R - Restaura imagen\n" << endl;
- }
|