Herramientas de usuario

Herramientas del sitio


fw:opencv2

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
fw:opencv2 [2011/07/02 16:39]
alfred
fw:opencv2 [2020/05/09 09:25] (actual)
Línea 1: Línea 1:
-====== OpenCV ======+====== OpenCV ​======
   * [[http://​opencv.willowgarage.com/​wiki/​|Wiki de OpenCV]]   * [[http://​opencv.willowgarage.com/​wiki/​|Wiki de OpenCV]]
 +
 ===== Básico ===== ===== Básico =====
  
Línea 44: Línea 45:
   * Copiar una imágen: ''​imagen.copyTo(imagen_copia)''​. O ''​Mat imagen_copia = imagen.clone();''​.   * Copiar una imágen: ''​imagen.copyTo(imagen_copia)''​. O ''​Mat imagen_copia = imagen.clone();''​.
   * Para volver a asignar un tamaño a una imagen: ''​result.create(image.rows,​ image.cols, image.type())''​   * Para volver a asignar un tamaño a una imagen: ''​result.create(image.rows,​ image.cols, image.type())''​
 +
  
  
Línea 83: Línea 85:
   * Podemos asignar una fila con un solo valor, por ejemplo asignar la fila 0 el color negro: ''​result.row(0).setTo(cv::​Scalar(0));''​. O un color rgb con: ''​cv::​Scalar(r,​g,​b)''​.   * Podemos asignar una fila con un solo valor, por ejemplo asignar la fila 0 el color negro: ''​result.row(0).setTo(cv::​Scalar(0));''​. O un color rgb con: ''​cv::​Scalar(r,​g,​b)''​.
   * Al asignar un valor a un píxel podemos utilizar ''​*pixel = cv::​saturate_cast<​uchar>​(valor)'',​ con esto conseguimos que ''​valor''​ no supere 255, no sea menor que 0 o, si el decimal, se redondee.   * Al asignar un valor a un píxel podemos utilizar ''​*pixel = cv::​saturate_cast<​uchar>​(valor)'',​ con esto conseguimos que ''​valor''​ no supere 255, no sea menor que 0 o, si el decimal, se redondee.
 +  * Crear una máscara a partir de una imágen en escala de grises: ''​cv::​Mat mask = cv::​imread("​logo.bmp",​ 0)''​
 +
  
 ==== Highgui y funciones de ayuda ==== ==== Highgui y funciones de ayuda ====
Línea 90: Línea 94:
   * **Mostrar una imagen** sobre una ventana creada: ''​cv::​imshow("​identificador",​ imágen)''​.   * **Mostrar una imagen** sobre una ventana creada: ''​cv::​imshow("​identificador",​ imágen)''​.
   * **Guardar una imagen** ''​cv::​imwrite(ruta,​ imagen)''​. Según la extensión que pongamos en la ruta de la imágen (.bmp, .jpg...) así será el formato de esta.   * **Guardar una imagen** ''​cv::​imwrite(ruta,​ imagen)''​. Según la extensión que pongamos en la ruta de la imágen (.bmp, .jpg...) así será el formato de esta.
 +
 +==== Otras clases ====
 +  * ''​cv::​Vec3b''​ permite definir un píxel con tres unsigned chars.
  
 ===== Image Processing ===== ===== Image Processing =====
-  * Hacer **flip** de una imagen: ''​cv::​flip(imagen1,​ imagen_resultado,​ modo)''​. Donde modo puede ser 0 (vertical), 1 (horizontal) o un número negativo (para horizontal y vertical). 
- 
- 
  
  
  
 +==== Funciones útiles ====
 +  * Hacer **flip** de una imagen: ''​cv::​flip(imagen1,​ imagen_resultado,​ modo)''​. Donde modo puede ser 0 (vertical), 1 (horizontal) o un número negativo (para horizontal y vertical).
 +=== Cambiar espacio de colores ===
 +La función ''​cv::​ctColor''​ permite cambiar el espacio de color de una imágen a otro. Se le pasa la imágen que queremos convertir, la imágen donde queremos convertirla y el tipo de conversión. \\ 
 +El tipo de conversión puede ser ''​CV_BGR2Gray''​ (a grises), ''​CV_BGR2Lab''​ (a //CIE L*a*b// que es un espacio de color donde es más fácil hacer distancias (euclídeas) entre píxels)...
 +<code cpp>
 +converted.create(image.rows,​image.cols,​image.type());​
 +cv::​cvtColor(image,​ converted, CV_BGR2Lab);​
 +</​code>​
  
 +==== Histogramas ====
  
 ===== Operadores ===== ===== Operadores =====
Línea 126: Línea 140:
   * Cross-product:​ ''​v1.cross(v2)''​   * Cross-product:​ ''​v1.cross(v2)''​
   * Dot-product:​ ''​v1.dot(v2)''​   * Dot-product:​ ''​v1.dot(v2)''​
 +
 +
 +
 +
 +
  
  
 ==== Especificar la región donde operar ==== ==== Especificar la región donde operar ====
 === ROIs === === ROIs ===
 +Las ROI (//Region Of Interest//) son porciones de la imágen a partir de la cual podríamos aplicar un operador, para definirlas indicamos la posición mediante un objeto ''​cv::​Rect'',​ mediante dos ''​cv::​Range''​ o indicando un rango de filas\columnas:​
 +<code cpp>
 +cv::Mat roi1 = image(cv::​Rect(385,​ 270, img2.cols, img2.rows));​
 +cv::Mat roi2 = image(cv::​Range(270,​ 270 + img2.rows), cv::​Range(385,​ 385 + img2.cols));​
 +cv::Mat roi3 = image.rowRange(start,​ end);
 +cv::Mat roi4 = image.colRange(start,​ end);
 +
 +imgLogo.copyTo(roi1,​ mask);
 +</​code>​
 === Canales === === Canales ===
 Para aplicar un operador a un solo canal deberemos separar la imagen en sus canales (''​split''​),​ aplicar el operador sobre este y luego volver a unirlos (''​merge''​):​ Para aplicar un operador a un solo canal deberemos separar la imagen en sus canales (''​split''​),​ aplicar el operador sobre este y luego volver a unirlos (''​merge''​):​
 <code cpp> <code cpp>
 +std::​vector<​cv::​Mat>​ planes; ​ // crea un vector de 3 imagenes
 +cv::​split(image1,​planes); ​ // divide la imagen de 3 canales en 3 imágenes de 1 canal
 +planes[0]+= image2; ​ // operamos sobre uno de los canales
 +cv::​merge(planes,​result);​ // unimos los canales
 </​code>​ </​code>​
  
fw/opencv2.1309624747.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)