#include "mainwindow.h" #include "ui_mainwindow.h" #include #include 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 ,\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; }