0
Objetivo : Obtener todos los píxeles de una imagen que se encuentra en determinado intervalo.


En OpenCV las imagen que se leen desde un dispositivo se adquieren en espacio de color BGR, en este espacio de color la imagen este dividida en 3 canales cada uno de ellos representa en azul el verde y el rojo respectivamente. El espacio de color RGB funciona de la misma manera excepto por que el orden de los canales esta invertido.




El problema con los espacio de color RGB y BGR consiste en la información del color esta presente en los 3 canales de la imagen lo cual hace mas difícil realizar un filtrado. Para esto convertimos la imagen al espacio de color HSV en el cual la información que representa el color se encuentra en un solo canal(Hue)


hsv_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)


Una vez que tenemos la imagen un formato HSV podremos generar otra imagen que solo posea los píxeles en un determinado intervalo.



        lower_bound = np.array([cv2.getTrackbarPos("LowH", "controls"), cv2.getTrackbarPos("LowS", "controls"),
                                cv2.getTrackbarPos("LowV", "controls")])
        upper_bound = np.array([cv2.getTrackbarPos("HighH", "controls"), cv2.getTrackbarPos("HighS", "controls"),
                                cv2.getTrackbarPos("HighV", "controls")])


Código completo : 

__author__ = 'carlos'

import cv2
import sys
import numpy as np


#   callback, no usado por ahora.
def nothing(x):
    pass


def main():
    #   todas las camaras conectadas tienen un ID, el 0 representa la primera.
    cap = cv2.VideoCapture(0)

    #  WINDOW_NORMAL permite redimensionar las ventanas
    cv2.namedWindow("frame", cv2.WINDOW_NORMAL)
    cv2.namedWindow("hsv", cv2.WINDOW_NORMAL)
    cv2.namedWindow("thr", cv2.WINDOW_NORMAL)

    # ventana que solo posee los controles, es posible colocarlos en las que fueron declaradas anteriormente.
    cv2.namedWindow("controls", cv2.WINDOW_NORMAL)

    #   trackbars
    cv2.createTrackbar("LowH", "controls", 0, 179, nothing)  # Hue [0 - 179]
    cv2.createTrackbar("HighH", "controls", 0, 179, nothing)

    cv2.createTrackbar("LowS", "controls", 0, 255, nothing)  # Saturation [0 - 255]
    cv2.createTrackbar("HighS", "controls", 0, 255, nothing)

    cv2.createTrackbar("LowV", "controls", 0, 255, nothing)  # Value [0 - 255]
    cv2.createTrackbar("HighV", "controls", 0, 255, nothing)

    while True:

        success, frame = cap.read()

        if not success:
            print("error reading web cam", file=sys.stderr)

        # cambia el espacio de color de la imagen
        hsv_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

        lower_bound = np.array([cv2.getTrackbarPos("LowH", "controls"), cv2.getTrackbarPos("LowS", "controls"),
                                cv2.getTrackbarPos("LowV", "controls")])
        upper_bound = np.array([cv2.getTrackbarPos("HighH", "controls"), cv2.getTrackbarPos("HighS", "controls"),
                                cv2.getTrackbarPos("HighV", "controls")])

        # realiza el filtrado
        thresholded_frame = cv2.inRange(hsv_frame, lower_bound, upper_bound)

        cv2.imshow("frame", frame)
        cv2.imshow("hsv", hsv_frame)
        cv2.imshow("thr", thresholded_frame)

        #   finaliza el programa al presionar la tecla scape.
        k = cv2.waitKey(5) & 0xFF
        if k == 27:
            break


if __name__ == '__main__':
    main()


Ejemplo :





En el próximo tutorial veremos como seguir la trayectoria de un objeto en la imagen.

Dentro de git se encuentra una versión en C++ del código anterior.

Git : https://github.com/CarlosAndres12/OpencvTut

Enlaces :

HSV : http://infohost.nmt.edu/tcc/help/pubs/colortheory/web/hsv.html
Tutorial : http://opencv-srf.blogspot.com/

Next
This is the most recent post.
Previous
This is the last post.

Post a Comment

Dear readers, after reading the Content please ask for advice and to provide constructive feedback Please Write Relevant Comment with Polite Language.Your comments inspired me to continue blogging. Your opinion much more valuable to me. Thank you.