-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcompresor.cpp
105 lines (72 loc) · 1.98 KB
/
compresor.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include "compresor.h"
#include "QtCore"
#include "QDebug"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
Compresor::Compresor()
{
}
Compresor::Compresor(int porcentaje ,Mat matriz)
{
this->matriz = matriz;
this->porcentaje = porcentaje;
}
void Compresor::run(){
qDebug()<<"Corriendo";
this->resultado = ComprimirImagen();
qDebug()<<"a terminado de correr";
}
cv::Mat Compresor::ComprimirImagen(){
matriz.convertTo(matriz, CV_32F, 1.0/255);
std::cout<<"aca estoy en svd"<<std::endl;
SVD svdimagencita(matriz);
std::cout<<"pse svd"<<std::endl;
float porcentajeu = 1.0;
int valoresSingulares = 1 ;
if (porcentaje >0 and this->porcentaje <=100){
porcentajeu = (this->porcentaje / 100.0);
valoresSingulares=floor(porcentajeu*svdimagencita.w.rows);
}
Mat v ;
transpose(svdimagencita.vt,v);
Mat Umenor = svdimagencita.u.colRange(0 ,valoresSingulares);
Mat vmenor = v.colRange(0,valoresSingulares);
Mat singula = svdimagencita.w.rowRange(0,valoresSingulares);
Mat vt ;
transpose(vmenor,vt);
//Construimos la imagen con esos valores singulares
Mat result = Umenor * Mat::diag(singula) * vt;
this->resultado = result;
cv::imshow("imagen comprimida",result);
std::ostringstream buff;
buff<<porcentajeu*100;
result.convertTo(result,CV_32F,255) ;
imwrite( "compresional"+buff.str()+".jpg", result);
return result;
}
cv::Mat Compresor::getMatriz() const
{
return matriz;
}
void Compresor::setMatriz(const cv::Mat &value)
{
matriz = value;
}
int Compresor::getPorcentaje() const
{
return porcentaje;
}
void Compresor::setPorcentaje(int value)
{
porcentaje = value;
}
cv::Mat Compresor::getResultado() const
{
return resultado;
}
void Compresor::setResultado(const cv::Mat &value)
{
resultado = value;
}