ultimo comit con mas efectos, conecciones y desconecciones...
[photoboothMX.git] / camara.cpp
blobe4e7ea1c0da098cb6969c32e63542de8c03125bb
1 #include "camara.h"
2 #include <QVBoxLayout>
3 #include <QLabel>
4 #include <opencv/cv.h>
5 #include <opencv/highgui.h>
6 #include <QMessageBox>
7 #include <QDebug>
8 #include <iostream>
9 #include <QColormap>
11 camara::camara(QWidget *parent) :
12 QWidget(parent)
14 QVBoxLayout* camlay = new QVBoxLayout;
15 camlabe = new QLabel;
16 errorid = 0;
17 fondid = 0;
19 camlabe->setFrameStyle(QFrame::Panel | QFrame::Raised);
20 camlabe->setLineWidth(2);
22 camlabe->setMinimumWidth(640);
23 camlabe->setMinimumHeight(480);
25 camlabe->setMaximumWidth(640);
26 camlabe->setMaximumHeight(480);
28 camlabe->setScaledContents(true);
30 camlabe->adjustSize();
32 this->setAttribute(Qt::WA_DeleteOnClose);
33 this->setAttribute(Qt::WA_QuitOnClose);
35 camlay->addWidget(camlabe);
36 this->setLayout(camlay);
38 //accesando a camara
39 cap.open(0);
41 if(!cap.isOpened()) //pregunta si abrio la camara bien..
43 QMessageBox::critical(this,tr("Problema"),tr("El programa no encuentra la camara"),
44 QMessageBox::Yes|QMessageBox::Default);
45 //que muestre una imagen de error pork no habrio la camara
46 this->setpix(QPixmap(":imas/admira"));
47 errorid = 1;
48 emit error(errorid);
52 void camara::setima(const QImage &imag) //asigna una imagen al label principal
54 mipix = QPixmap::fromImage(imag);
55 camlabe->setPixmap(mipix);
58 void camara::setpix(const QPixmap &privpix) //asigna una imagen tipo QPixmap al label principal
60 mipix = privpix;
61 camlabe->setPixmap(privpix);
64 QPixmap camara::getpix() //obtiene la imagen que esta en label Principal en formato QPixmap
66 return mipix;
69 void camara::guardImagen(const QString &nombre)
71 if (errorid == 0)
73 String ruta("/tmp/");
74 ruta += nombre.toStdString();
75 cap >> fram;
76 imwrite(ruta,fram); // tengo que aprender a guardar la QPixmap !!!
82 void camara::opencam()
84 errorid = 0;
86 if(!cap.isOpened()) //pregunta si abrio la camara bien..
88 QMessageBox::critical(this,tr("Problema"),tr("El programa no encuentra la camara"),
89 QMessageBox::Yes|QMessageBox::Default);
90 //que muestre una imagen de error pork no habrio la camara
91 this->setpix(QPixmap(":imas/admira"));
92 errorid = 1;
93 emit error(errorid);
98 void camara::newQframe() //obtiene una captura de pantalla de la camara y la guarda en QPixmap mipix
100 if (errorid == 0)
102 Mat rgb;
103 cap >> fram;
105 cvtColor(fram, rgb, CV_BGR2RGB);
106 QImage imag((const unsigned char*)(rgb.data), rgb.cols, rgb.rows, QImage::Format_RGB888);
108 //cvtColor(fram, rgb, CV_BGR2GRAY);
109 //QImage imag((const unsigned char*)(rgb.data), rgb.cols, rgb.rows, QImage::Format_Mono);
110 //imag.invertPixels();
111 //imag = imag.convertToFormat(QImage::Format_Mono);
112 //imag = imag.convertToFormat(QImage::Format_MonoLSB);
114 camlabe->setPixmap(QPixmap::fromImage(imag.mirrored(true,false)));
115 mipix = QPixmap::fromImage(imag.mirrored(true,false));
120 void camara::newQBWframe()
122 if (errorid == 0)
124 Mat rgb;
125 cap >> fram;
126 cvtColor(fram, rgb, CV_BGR2RGB);
128 QImage imag((const unsigned char*)(rgb.data), rgb.cols, rgb.rows, QImage::Format_RGB888);
130 QRgb col;
131 int gray;
132 int width = imag.width();
133 int height = imag.height();
134 for (int i = 0; i < width; ++i)
136 for (int j = 0; j < height; ++j)
138 col = imag.pixel(i, j);
139 gray = qGray(col);
140 imag.setPixel(i, j, qRgb(gray, gray, gray));
144 //imag.invertPixels();
145 camlabe->setPixmap(QPixmap::fromImage(imag.mirrored(true,false)));
146 mipix = QPixmap::fromImage(imag.mirrored(true,false));
150 void camara::newQINframe()
152 if (errorid == 0)
154 Mat rgb;
155 cap >> fram;
156 cvtColor(fram, rgb, CV_BGR2RGB);
158 QImage imag((const unsigned char*)(rgb.data), rgb.cols, rgb.rows, QImage::Format_RGB888);
160 imag.invertPixels();
161 camlabe->setPixmap(QPixmap::fromImage(imag.mirrored(true,false)));
162 mipix = QPixmap::fromImage(imag.mirrored(true,false));
167 void camara::newQEXTframe()
169 if (errorid == 0)
171 Mat rgb;
172 cap >> fram;
173 cvtColor(fram, rgb, CV_BGR2RGB);
175 QImage imag((const unsigned char*)(rgb.data), rgb.cols, rgb.rows, QImage::Format_RGB888);
176 QImage fond(":fondos/fondo"+ QString::number(fondid));
177 //QImage fond(":fondos/fondo0");
178 QRgb col;
179 int newpixR,newpixG,newpixB;
180 int width = imag.width();
181 int height = imag.height();
182 //qDebug() << width << " " << height; (320 240)
183 for (int i = 0; i < width; ++i)
185 for (int j = 0; j < height; ++j)
187 col = imag.pixel(i, j);
188 newpixR = qRed(col);
189 newpixG = qGreen(col);
190 newpixB = qBlue(col);
192 if (((newpixR>=42) && (newpixR<=75) ) && (newpixG>50) && (newpixB>=25 && newpixB<=65)) //aqui pregunta si el rojo y azul estan en niveles bajos
193 imag.setPixel(i, j, fond.pixel(i,j)); //aqui debe poner el fondo.pixel(i,j) donde fondo es la imagen con la misma resolucion que la camara
197 camlabe->setPixmap(QPixmap::fromImage(imag.mirrored(true,false)));
198 mipix = QPixmap::fromImage(imag.mirrored(true,false));
202 void camara::newQEP1frame()
204 if (errorid == 0)
206 Mat rgb;
207 cap >> fram;
208 cvtColor(fram, rgb, CV_BGR2RGB);
210 QImage imag((const unsigned char*)(rgb.data), rgb.cols, rgb.rows, QImage::Format_RGB888);
212 QRgb col;
213 int newpixR,newpixG,newpixB;
214 int width = imag.width();
215 int height = imag.height();
216 for (int i = 0; i < width; ++i)
218 for (int j = 0; j < height; ++j)
220 col = imag.pixel(i, j);
221 newpixR = qRed(col);
222 newpixG = qGreen(col);
223 newpixB = qBlue(col);
225 if ((newpixR >= 60) && (newpixR <= 150) && (newpixG <= 40) && (newpixG >= 30) &&
226 (newpixB >= 30) && (newpixB <= 45)) //aqui pregunta si el rojo y azul estan en niveles bajos
227 imag.setPixel(i, j, qRgb(newpixR, newpixG*2, newpixB));
231 //imag.invertPixels();
232 camlabe->setPixmap(QPixmap::fromImage(imag.mirrored(true,false)));
233 mipix = QPixmap::fromImage(imag.mirrored(true,false));
237 void camara::relacam()
239 if (errorid != 1)
240 errorid = 2; //camara liberada
243 int camara::geterror()
245 return errorid;
248 void camara::setFondidd(const int &idd)
250 fondid=idd;