Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Plantel Colomos
Ingeniería en Desarrollo de Software
Procesamiento de Imágenes
REPORTE DE PRÁCTICA
IDENTIFICACIÓN DE LA PRÁCTICA
OBJETIVO
El objetivo de esta práctica consiste en realizar las diferentes transformaciones geométricas a una imagen
en escala de grises mediante las transformaciones afines.
PROCEDIMIENTO
Realiza la implementación siguiendo estas instrucciones.
Realiza un programa en C/C++ utilizando OpenCV en el que leas una imagen desde archivo utilizando el
modo IMREAD_GRAYSCALE. Realiza las siguientes transformaciones geométricas a la imagen en escala
de grises.
1. Escalamiento
2. Rotación
3. Traslación
4. Sesgado vertical
5. Sesgado horizontal
Reporta los resultados obtenidos.
IMPLEMENTACIÓN
Agrega el código de tu implementación aquí.
//Escalamiento
void escalar(Mat origen, Mat *destino, float fx, float fy) {
float T[3][3] = { {fx,0,0},{0,fy,0 },{0,0,1}};
int v, w;
uchar* pOrigen, *pDestino;
if (fx < 1 || fy < 1) {
destino->create((origen.rows * fx)+1, (origen.cols * fy)+1, origen.type());
}
else {
destino->create(origen.rows * fx, origen.cols * fy, origen.type());
}
for (int x = 0; x < origen.rows; x++) {
pOrigen = origen.ptr<uchar>(x);
free(w);
free(v);
}
//Rotacion
void algoritmoRotacion(Mat origen, Mat* destino, int grados) {
float T[3][3] = { {1,0,0},{0,1,0 },{0,0,1} };
int areaImegen = origen.rows * origen.cols;
int* v = (int*)malloc(areaImegen * sizeof(int));
int* w = (int*)malloc(areaImegen * sizeof(int));
2
Centro de Enseñanza Técnica Industrial
Plantel Colomos
Ingeniería en Desarrollo de Software
Procesamiento de Imágenes
uchar* pOrigen, * pDestino;
int k = 0;
if (grados ==-90) {
destino->create(origen.cols +1 ,origen.rows+1 , origen.type());
for (int x = origen.rows-1; x >=0; x--) {
pOrigen = origen.ptr<uchar>(x);
for (int y = origen.cols - 1; y >= 0; y--) {
w[k] = x * T[0][0] + y * T[1][0] + 1 * T[2][0];
v[k] = x * T[0][1] + y * T[1][1] + 1 * T[2][1];
k++;
}
}
}
else if (grados==90) {
destino->create(origen.cols + 1, origen.rows + 1, origen.type());
free(w);
free(v);
}
//Traslacion
void traslacion(Mat origen, Mat* destino, int tx, int ty) {
int T[3][3] = { {1,0,0},{0,1,0 },{tx,ty,1} };
int v, w;
uchar* pOrigen, * pDestino;
destino->create(origen.rows + tx, origen.cols + ty, origen.type());
3
Centro de Enseñanza Técnica Industrial
Plantel Colomos
Ingeniería en Desarrollo de Software
Procesamiento de Imágenes
for (int x = 0; x < origen.rows; x++) {
pOrigen = origen.ptr<uchar>(x);
//Sesgos
void sesgoVertical(Mat origen, Mat* destino, float Sv) {
int k = 0;
for (int x = 0; x < origen.rows; x++) {
pOrigen = origen.ptr<uchar>(x);
for (int y = 0; y < origen.cols; y++) {
v[k] = x * T[0][0] + y * T[1][0] + 1 * T[2][0];
w[k] = x * T[0][1] + y * T[1][1] + 1 * T[2][1];
k++;
}
}
free(w);
free(v);
}
free(w);
free(v);
}
int main()
{
Mat imagen = imread("scream.jpg", IMREAD_GRAYSCALE);
imshow("img", imagen);
Mat imagenEscalada;
escalar(imagen, &imagenEscalada, 0.4, 0.8);//Escalamiento al 50%
imshow("img escalada 0.4 x 0.8", imagenEscalada);
escalar(imagen, &imagenEscalada, 0.5, 0.5);
imshow("img escalada 0.5 x 0.5", imagenEscalada);
Mat imagenRotacion;
rotacion(imagen,&imagenRotacion , 45.00);
imshow("img rotada 45", imagenRotacion);
rotacion(imagen, &imagenRotacion, -45.00);
imshow("img rotada -45", imagenRotacion);
rotacion(imagen, &imagenRotacion, 15.00);
imshow("img rotada 15", imagenRotacion);
rotacion(imagen, &imagenRotacion, -15.00);
imshow("img rotada -15", imagenRotacion);
Mat imgRotacionAlgotimo;
algoritmoRotacion(imagen, &imgRotacionAlgotimo, 90);
imshow("imagen algoritmo rotada 90", imgRotacionAlgotimo);
algoritmoRotacion(imagen, &imgRotacionAlgotimo, -90);
imshow("imagen algoritmo rotada -90", imgRotacionAlgotimo);
algoritmoRotacion(imagen, &imgRotacionAlgotimo, 180);
imshow("imagen algoritmo rotada 180", imgRotacionAlgotimo);
Mat imagenTraslacion;
5
Centro de Enseñanza Técnica Industrial
Plantel Colomos
Ingeniería en Desarrollo de Software
Procesamiento de Imágenes
traslacion(imagen, &imagenTraslacion, 50, 50);
imshow("imagen trasladada 50 y 50", imagenTraslacion);
traslacion(imagen, &imagenTraslacion, 50, 100);
imshow("imagen trasladada 50 y 100", imagenTraslacion);
Mat imgVerticalSesgo;
sesgoVertical(imagen, &imgVerticalSesgo, 1);
imshow("imagensesgada vertical 1", imgVerticalSesgo);
sesgoVertical(imagen, &imgVerticalSesgo, 0.5);
imshow("imagensesgada vertical 0.5", imgVerticalSesgo);
Mat imgHorizontalSesgo;
sesgoHorizontal(imagen, &imgHorizontalSesgo, 1);
imshow("imagensesgada horizontal 1", imgHorizontalSesgo);
sesgoHorizontal(imagen, &imgHorizontalSesgo, 0.5);
imshow("imagensesgada horizontal 0.5", imgHorizontalSesgo);
Mat imgSesgoEscalada;
escalar(imgVerticalSesgo, &imgSesgoEscalada, 2, 2);//Escalamiento al 50%
imshow("img Escalada Con Sesgo", imgSesgoEscalada);
waitKey(0);
}
RESULTADOS
Agrega las imágenes indicadas en los espacios correspondientes.
6
Centro de Enseñanza Técnica Industrial
Plantel Colomos
Ingeniería en Desarrollo de Software
Procesamiento de Imágenes
Rotación Rotación Rotación Rotación 2
-45 grados 15 grados -15 grados 180 grados
7
Centro de Enseñanza Técnica Industrial
Plantel Colomos
Ingeniería en Desarrollo de Software
Procesamiento de Imágenes
8
Centro de Enseñanza Técnica Industrial
Plantel Colomos
Ingeniería en Desarrollo de Software
Procesamiento de Imágenes
CONCLUSIONES
Escribe tus observaciones y conclusiones.
En esta práctica realizamos ejemplos donde podemos apreciar las transformaciones geométricas de una imagen.
Como se ve en los ejemplos la imagen se puede llegar a distorsionar la imagen, ya que los pixeles se ven mas
detallados, ósea se logra ver el recuadro del pixel. Esto puede ser muy útil para ver el funcionamiento de las
herramientas mas actuales en nuestras aplicaciones de edición de imágenes.