mainwindow.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <iostream>
  4. #include <stdio.h>
  5. using namespace std;
  6. using namespace cv;
  7. MainWindow::MainWindow(QWidget *parent) :
  8. QMainWindow(parent),
  9. ui(new Ui::MainWindow)
  10. {
  11. ui->setupUi(this);
  12. info();
  13. imagenOriginal = imread("lena.jpg");
  14. if(imagenOriginal.empty())
  15. cout << "[ERROR] no se pudo cargar la imagen\n\tUso: ./zoom /ruta/de/la/imagen.png\n" << endl;
  16. namedWindow("Zoom", 1);
  17. //.3333333333333
  18. setMouseCallback("Zoom", onMouse, 0);
  19. imagenOriginal.copyTo(imagen);
  20. imagenOriginal.copyTo(imagenMostrar);
  21. for(;;)
  22. {
  23. if(imagen.empty())
  24. break;
  25. imagen.copyTo(imagenMostrar);
  26. rectangle(imagenMostrar,
  27. Point(mousex-(zoomRec/2), mousey-(zoomRec/2)),
  28. Point(mousex+(zoomRec/2), mousey+(zoomRec/2)),
  29. cv::Scalar(0,255,0), 1, 8, 0);
  30. imshow("Zoom", imagenMostrar);
  31. char c = (char) waitKey(10);
  32. if(c == 27)
  33. break;
  34. switch(c)
  35. {
  36. case '+':
  37. if(zoomRec < 500)
  38. zoomRec = zoomRec + 10;
  39. break;
  40. case '-':
  41. if(zoomRec > 10)
  42. zoomRec = zoomRec - 10;
  43. break;
  44. default:
  45. ;
  46. }
  47. }
  48. }
  49. MainWindow::~MainWindow()
  50. {
  51. delete ui;
  52. }
  53. Mat MainWindow::zoomIn(int x, int y)
  54. {
  55. int width = zoomRec, height = zoomRec;
  56. int ptoX = x-(zoomRec/2), ptoY = y-(zoomRec/2);
  57. /*Verifica que el ROI este dentro de la la imagen*/
  58. if((x+(zoomRec/2)) > imagen.size().width)
  59. width = width - ((x+(zoomRec/2)) - imagen.size().width);
  60. if((y+(zoomRec/2)) > imagen.size().height)
  61. height = height - ((y+(zoomRec/2)) - imagen.size().height);
  62. if((x-(zoomRec/2)) < 0)
  63. ptoX = 0;
  64. if((y-(zoomRec/2)) < 0)
  65. ptoY = 0;
  66. Rect roi = Rect(ptoX, ptoY, width, height);
  67. Mat imagen_roi = imagen(roi);
  68. cv::resize(imagen_roi, imagen_roi, Size(imagenOriginal.size().width, imagenOriginal.size().height), 0, 0, cv::INTER_AREA);
  69. return imagen_roi;
  70. }
  71. Mat MainWindow::zoomOut(int x, int y)
  72. {
  73. return imagenOriginal;
  74. }
  75. void MainWindow::onMouse( int event, int x, int y, int /*flags*/, void* /*param*/ )
  76. {
  77. mousex = x;
  78. mousey = y;
  79. if(event == cv::EVENT_LBUTTONDOWN)
  80. imagen = zoomIn(x, y);
  81. else if(event == cv::EVENT_RBUTTONDOWN)
  82. imagen = zoomOut(x, y);
  83. }
  84. void MainWindow::info(){
  85. cout << "\nDemo de Zoom creado por Sebastián González <brutalchrist@gmail.com>,\n"
  86. "La versión de Opencv utilizada en este ejemplo es 2.4.5, \n"
  87. "Usted esta corriendo la versión " << CV_VERSION << "\n"
  88. << endl;
  89. cout << "\nTeclas: \n"
  90. "\tESC - Salir del programa\n"
  91. "\t+ - Aumenta la escala de zoom\n"
  92. "\t- - Disminuye la escala de zoom\n"
  93. "\tCLICK D - zoom\n"
  94. "\tCLICK R - Restaura imagen\n" << endl;
  95. }