Module-1 Photos-and-Color.
En fecha 19 de junio
de 2017 me inscribí en el curso “cv4faces”
“Computer Vision for Faces” de “BIG VISION LLC” dirigido por el Dr. Satya Mallick, de www.LearnOpenCV.com que trata de la visión artificial aplicada a
caras humanas y las aplicaciones se programan usando los lenguajes C++ y Python.
Durante la primera semana, se tocaron los
siguientes temas:
Module-1.1-Photos-and-Color.pdf
Table of Contents
What is a photo?
What is color?
A brief history of color
photography
How is a color recorded by a
digital camera
How are images stored on disk
What is OpenCV?
How are images represented in
memory in OpenCV
OpenCV
Images in C++
OpenCV
Images in Python
Informacion
general sobre el color, sensores de cámaras digitales, representación de
imágenes en OpenCV, en C++ y Python.
Module-1.2.1-Introduction-to-the-Mat-Class-CPP.pdf
Table of Contents
Introduction to the Mat Class
2
Mat as an Image container 2
Read an image 2
Assignment operation 3
Copy part of an image 3
Clone an image 3
Clone an image with a mask 4
Find number of rows, columns,
and channels 4
Mat as a Matrix 6
Create Mat object 6
Using Constructor 6
Using C/C++ arrays 7
Using create method 7
Ones, zeros and identity
Matrices 8
Initialize
small matrices 9
References
and Further reading 10
Informacion
general sobre los objetos matrices Mat que son el corazón de OpenCV, distinción
entre el “header” y los “datos”, asi como de las copias “Deep” y “shallow” y
presentación de algunos métodos destacados de Mat.
Destacables:
// Crear Mat
usando arrays C/C++
// En primer
lugar se define el tamaño de la matriz.
int tamano[]={3,4,4};
// Crear una
matriz tri-dimensional con el tamaño anterior llena con 30.
Mat L(3, tamano,
CV_8U, Scalar::all(30)); // 3 es el numero de elementos de tamano
//
Inicializacion de pequeñas matrices
Mat M = (Mat_<double>(3,3)
<< 1, 5, 6, 0, -3, 30, -1, 0, 8);
cout << M
<< endl;
Module-1.2.2-Introduction-to-NumPy-Python.pdf
Table of Contents
Introduction to the NumPy in
Python-OpenCV 2
Read an image 3
Assignment operation 4
Copy part of an image 4
Find number of rows, columns,
and channels 5
Ones, zeros and identity 5
Datatype Conversion 6
References
and Further reading 7
Una
biblioteca para usar matrices llamada NumPy y al lenguaje Python donde no es
necesario declarar las variables. Uso de algunas funciones de OpenCV
relacionadas con la creación de matrices.
Module-1.3-OpenCV-Basic-Functions.pdf
Table of Contents
OpenCV Basic Functions 2
Read, write and display an
image 2
Crop and Resize 5
Datatype conversion 18
Drawing over an image 20
C++ code for drawing over an
image 21
Python code for drawing over
an image 24
References
and Further reading 27
En este módulo, se explican las funciones básicas
con un archivo de imagen, para cargarlo desde el disco, mostrarlo en pantalla y
guardarlo en disco.
Hay un programa de recorte rectangular y se
explica y usa la función resize() que permite hacer una transformación de
cambio de escala.
Se explica la conversión de tipos, útil para
usar imágenes con tipo números en coma flotante.
Se explica cómo dibujar sobre una imagen y lo
referente a las transformaciones afines.
Module-1.4.1-Binary-Image-Processing-Part1.pdf
Table of Contents
Binary Image Processing 2
Thresholding 2
OpenCV Thresholding Code 4
Dilation and Erosion 7
Dilation and Erosion in OpenCV
8
Code
( Dilation ) 9
Code
( Erosion ) 13
References and Further Reading 17
Se presenta
de forma practica el uso de la función Thresholding(), y de las funciones
dilate() y erode() que requieren de la creación previa de una matriz
estructurante que se obtiene mediante la función getStructingElement().
Tras la
lectura de este pdf, echo en falta que se explicara de manera explícita el
funcionamiento básico del filtro dilate, que es sustituir el pixel base o ancla
por el máximo de los elementos que abarca la matriz estructurante, y en el
filtro erode se sustituye el pixel base por el mínimo de los elementos de la
matriz estructurante.
Module-1.4.2-Binary-Image-Processing-Part2.pdf
Table of Contents
Binary Image Processing, Part
2 2
Opening and Closing 2
Opening and Closing using
OpenCV 3
Code Opening (C++) 4
Code Opening (Python) 6
Code Closing (C++) 8
Code Closing (Python) 10
References and Further
reading 13
Se presenta
de forma práctica los pasos requeridos para hacer uso de las funciones
MorphologyEx, que permite aplicar las operaciones “closing” y “opening” después
de crear la matriz estructurante necesaria mediante la función getStructingElement().
Module-1.5-Read-Write-and-Display-Videos.pdf
Table of Contents
Read, write and display a
video using OpenCV 2
Reading a Video 2
Displaying a video 3
Writing a video 7
References and Further reading
12
Se presenta
el objeto VideoCapture, se implementa un programa para mostrar en pantalla un
video almacenado y un programa para capturar un video con la cámara y guardarlo
en un archivo que usa el objeto VideoWriting, lo cual es notable cuando se usa
el lenguaje Python, pues las versiones que tenía no guardaban el archivo de
video adecuadamente, por este motivo conviene comparar este programa con el
tutorial oficial de openCV que no me funciona para así aprender algo. La
diferencia está en usar el códec “MJPG” que es un códec “seguro” para
diferentes configuraciones.
Module-1.6-HighGUI.pdf
Table of Contents
Highgui 2
How to use the Keyboard in
OpenCV 2
Code highguiKeyboard (C++) 2
Code highguiKeyboard (Python)
4
How to use the Mouse in OpenCV
6
Code highguiMouse (C++) 6
Code highguiMouse (Python) 8
How to use Trackbars in OpenCV
11
Code Trackbar (C++) 11
Code Trackbar (Python) 12
Sample
Outputs 14
References and Further
Readings 15
Module-1-Assignment.pdf
Table of Contents
Stick Figure Animation 2
Cropping and Refitting 2
Fun with Thresholding 3
Create
a image filter 3
Simple Image Segmentation 4
La primera asignación “Stick Figure Animation” muestra un enlace a una animación de un
“stickman” un hombre hecho con palotes y sugiere dibujar un circulo y hacer que
describa una trayectoria, agregar otros elementos y usar la técnica de escritura en archivo de
video para completar la animación, todo esto usando las funciones de dibujo
básicas: line(), ellipse(), circle(), rectangle(), text() etc.
Para mi versión, un circulo que
describe una trayectoria es un planeta o un satélite, así que he imaginado un pequeño
planeta que gira alrededor de su eje, donde los océanos (azul) y la tierra con
vegetación (verde) se distribuyen como en el símbolo del ying-yang los puntos
son un lago y una isla.
Sobre el ecuador de este planeta está
“stickman” (como el principito) que se mantiene caminando a un paso con
relación al giro del planeta que lo mantiene erguido y evita que se caiga
atraído por otros cuerpos celestes.
El planeta tiene su satélite rojo
rico en hierro que describe un círculo alrededor de él.
El espacio es un recorte de una
fotografía publicada por la NASA.
Figura 1, Mi resultado
La segunda asignación “Cropping and Refitting” se
nos presenta con este enunciado:
“Puedes
recortar secciones de una imagen y reemplazar o usar esa sección recortada.
Solo asegúrese que si usa la sección recortada sobre otra imagen, entonces la
sección recortada debería ser más pequeña que la imagen sobre la cual quieres
superponerla.
También
puedes usar la transformación para deformarla, escalarla y trasladar tus
imágenes. Se acompaña con esta imagen:
Figura 2, resultado pedido
Mi solución
seria señalar un rectángulo en la imagen 2, señalar un rectángulo en la imagen
1y hallar una matriz de transformación, como un extra, se podría hacer una
mascara para eliminar la zona blanca alrededor.
Figura 3, Mi resultado
La tercera asignación “Create a image filter”, exhorta al uso de la umbralización, (thresholding) para crear efectos
como de dibujo a pincel a partir de una fotografía.
Figura 4, Resultado pedido
He usado el programa ejemplo “thresholding.cpp”
con:
Thresh=100
maxValue = 255;
Tipo de umbralizacion = “cv::THRESH_BINARY”
Figura 5, Mi resultado
La cuarta asignación, pide la “segmentación” de una
fotografía que está muy contrastada donde aparecen unos patos en silueta sobre
el fondo del cielo muy claro.
Figura 6, Resultado pedido
He usado el programa ejemplo “thresholding.cpp”
con:
Thresh=137
maxValue = 255;
Tipo de umbralización = “cv::THRESH_BINARY_INV”
Figura 7, Mi resultado
No hay comentarios:
Publicar un comentario