Mostrando entradas con la etiqueta openCV. Mostrar todas las entradas
Mostrando entradas con la etiqueta openCV. Mostrar todas las entradas
jueves, 11 de abril de 2013
Máscara de enfoque con Python
Código que implementa una máscara de enfoque para una imagen. Está escrito en Python con el apoyo de las librerías OpenCV, numpy y scipy. Para ejecutarlo es necesario emplear Python 2.7.4
En la próxima entrada comentaré el código en profundidad, explicando como se realiza la convolución bidimensional y el efecto de la máscara de enfoque sobre la imagen.
import numpy as np
import cv2
from scipy import ndimage, signal
#filtro de enfoque
# -*- coding: utf-8 -*-
def gauss2d(k, std): #gaussiana bidimensional
rows=2*k+1
cols=2*k+1
gaussian1d=signal.gaussian(cols,std) #gaussiana unidimensional
kernel_gauss=np.ndarray((rows,cols),"float") #mascara/kernel
for i in range(0,rows):
for j in range(0,cols):
kernel_gauss[i,j]=gaussian1d[i]*gaussian1d[j]
kernel_gauss=kernel_gauss/kernel_gauss.sum() #norm. de la gaussiana
return kernel_gauss
def conv2d(img, krnl): #convolucion bidimensional
rows=img.shape[0]-krnl.shape[0]+1
cols=img.shape[1]-krnl.shape[1]+1
output=np.ndarray((rows,cols), "float")
kernel_reversed=np.rot90(np.rot90(kernel))
for i in range(0, output.shape[0]):
for j in range(0, output.shape[1]):
img_patch=img[i:i+len(krnl),j:j+len(krnl)]
y=max((kernel_reversed*img_patch).sum(),0)
z=min(y,255)
output[i,j]=z
return output
def sharp(k,std): #creación de la mascara de enfoque
rows=2*k+1
cols=2*k+1
kernel_g=gauss2d(k,std)
kernel=np.zeros((rows,cols),"float")
kernel[k,k]=2
kernel=kernel-kernel_g
return kernel
def apply_filter(image, kernel): #rutina para aplicarle el filtro a la imagen
if len(img.shape) == 2: #blanco y negro (1 canal y transparencia)
img_filt = conv2d(img, kernel)
else: #color (3 canales y transparencia)
img_filt = []
for channel in range(img.shape[2]):
img_filt.append(conv2d(img[:,:,channel], kernel))
img_filt = cv2.merge(img_filt)
return img_filt
k=5 #radio de la gaussiana
std=3.0 #desviacion estandar de la gaussiana
#k y std son los parámetros que controlan la cantidad de enfoque que
#se quieres aplicar a la imagen
img=cv2.imread('ruta de la imagen a leer') #leer imagen
img=img.astype("float")
kernel=sharp(k,std)
img_filt=apply_filter(img, kernel)
cv2.imwrite('ruta de la imagen a escribir',img_filt) #escribir imagen
viernes, 3 de agosto de 2012
Módulos de la librería OpenCV
Los principales módulos en los que está dividida la librería OpenCV, desde la versión 2.2, son:
-opencv_core Contiene las funcionalidades principales de la librería, como son las estructuras de datos básicas y las funciones aritméticas.
-opencv_imgproc
Contiene las principales funciones para manipulación de imágenes.
-opencv_highgui
Contiene las funciones para la lectura y escritura tanto de imagen fija como de vídeo, así como otras funciones de interfaz de usuario.
-opencv_core Contiene las funcionalidades principales de la librería, como son las estructuras de datos básicas y las funciones aritméticas.
-opencv_imgproc
Contiene las principales funciones para manipulación de imágenes.
-opencv_highgui
Contiene las funciones para la lectura y escritura tanto de imagen fija como de vídeo, así como otras funciones de interfaz de usuario.
-opencv_features2d
Es un módulo con el que se consigue la detección de puntos y descriptores y además posee un framework para la unión de esos puntos.
-opencv_calib3d
Módulo que se encarga de la calibración de la cámara, se encarga de la estimación de la geometría para vistas estereoscópicas.
-opencv_video
Contiene la estimación de movimiento y, funciones y clases para el seguimiento de objetos y la extracción de fondos.
-opencv_objdetect
Este módulo se encarga de la detección de objetos, como caras y personas.
Estos módulos se encuentran localizados en el directorio lib.
Suscribirse a:
Entradas (Atom)