Air Canvas con openCV | Jayanta Sarkar | Skillshare
Buscar

Velocidad de reproducción


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      INTRODUCCIÓN

      1:09

    • 2.

      Resumen del proyecto

      3:10

    • 3.

      Crea una barra de pista de color en openCV

      6:24

    • 4.

      Punto de color y configuración de dibujo

      5:25

    • 5.

      Configura el lienzo de pintura

      8:57

    • 6.

      Configuración de la cámara y bucle principal

      13:47

    • 7.

      Identifica el puntero con la máscara

      7:14

    • 8.

      Encuentra el contorno para el puntero

      11:48

    • 9.

      Manejo de los botones

      15:19

    • 10.

      Dibuja líneas para el color del trazo

      10:23

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

3

Estudiantes

--

Proyecto

Acerca de esta clase

¿Siempre quisiste dibujar tu imaginación con solo mover tu dedo en el aire? En este post, aprenderemos a construir un lienzo de aire que pueda dibujar cualquier cosa en él con solo capturar el movimiento de un marcador de color con una cámara. Aquí se usa un objeto de color en la punta del dedo como marcador.
Usaremos las técnicas de visión por computadora de OpenCV para construir este proyecto. El lenguaje preferido es Python por sus bibliotecas exhaustivas y su sintaxis fácil de usar pero entendiendo los conceptos básicos se puede implementar en cualquier lenguaje compatible con OpenCV.
Aquí se usa la detección y el seguimiento del color para lograr el objetivo. Se detecta el marcador de color y se produce una máscara. Incluye los pasos posteriores de las operaciones morfológicas sobre la máscara producida, que son la erosión y la dilatación. La erosión reduce las impurezas presentes en la máscara y la dilatación restaura aún más la máscara principal erosionada.

Conoce a tu profesor(a)

Teacher Profile Image

Jayanta Sarkar

full stack web developer and Python prog

Profesor(a)

Jayanta Sarkar is a dedicated Python programmer and full-stack web developer with a passion for creating dynamic and interactive web applications. With a robust background in both front-end and back-end development, Jayanta excels in building seamless user experiences and efficient, scalable systems.

Over the years, Jayanta has honed his skills in various programming languages and frameworks, making him proficient in technologies such as JavaScript, CSS, HTML, and MySQL. His expertise extends to developing comprehensive solutions that integrate sophisticated database management with intuitive user interfaces.

Jayanta's journey in the tech industry is marked by a continuous drive to learn and adapt to new technologies. He has developed and published several successful cours... Ver perfil completo

Level: All Levels

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

Transcripciones

1. INTRODUCCIÓN: Hoy vamos a crear esto. Vamos a dibujar cualquier cosa en el medio usando nuestra webcam. Como puedes ver en este ejemplo, aquí dibujamos una línea usando un puntero en el medio. Aquí dibujamos línea en el medio en diferentes colores, como azul, verde, rojo, amarillo Este proyecto se conoce como dibujo por webcam en vivo usando OpenCV Aquí utilizamos el método de seguimiento de objetos para dibujar cualquier cosa en el medio usando OpenCV Nuestro programa toma la entrada de video de la cámara web y rastrea el objeto que estamos moviendo. Después de identificar el objeto, hará contios precisamente Entonces pintará todo tu dibujo en la pantalla de salida. Hola. Mi nombre es Jonathan Sarkar. Soy desarrollador web de Fostek, programador Python e instructor en línea Y te guiaré a través de este proyecto. ¿Cómo podemos construir este proyecto usando Python y Opens? Si tienes conocimientos sobre el lenguaje de programación Python, entonces podemos comenzar nuestro viaje juntos. Muchas gracias. 2. Resumen del proyecto: Aquí vamos a utilizar un rastreador. Vamos a utilizar cualquier rastreador de color. Pero para este tutorial, voy a usar un rastreador de color azul. También puedes usar un color rojo. En este proyecto, se pueden dibujar líneas en diferentes colores. Para nuestro proyecto, vamos a utilizar total cuatro colores azul, verde, rojo y amarillo. Puedes usar más que eso. Entonces déjame mostrarte una demostración cómo va a funcionar nuestro proyecto. Después de presionar el botón Ejecutar, como puedes ver, al principio, muestra la ventana del detector de color. Desde aquí, usando este control deslizante, puedes apuntar a cualquier color. Y como saben, por defecto, apuntamos al color azul, y tenemos que esperar algún tiempo para iniciar la webcam. Ahora puedes ver aquí abrió un total de tres ventanas, ventana viva, ventana de pintura y ventana de máscara. Y voy a alinear estas ventanas una al lado de la otra. Y ahora voy a empezar a dibujar. Aquí ya agarro un puntero marcador azul y lo escondo entre mi dedo. Ahora voy a empezar a dibujar usándolo. Como puedes ver nuestra cámara rastrea nuestro marcador y dibuja una línea. Comienza a dibujar con color azul, y puedes ver el dibujo en nuestra ventana de dibujo en vivo, también puedes ver el mismo dibujo en nuestra ventana de pintura blanca y en nuestra ventana de máscara, puedes ver la máscara binaria en nuestra ventana de máscara, puedes notar que solo rastrea el marcador de color azul. No rastrea nada más de este metraje. Ahora voy a ocultar este marcador y empezar a dibujar desde el punto diferente. Voy a empezar a dibujar desde esa posición. Se puede notar, de nuevo, que comenzó dibujando el camino desde esta posición. De esa manera, se puede dibujar línea diferente en una posición diferente. Ahora, déjame mostrarte ¿cómo podemos cambiar de color? ¿Cómo podemos cambiar el color de esta línea de trazo? Para eso, necesitamos mover nuestro puntero al botón de color. Al principio, voy a mover este puntero en el botón Color Verde y ahora selecciona el color verde. Si empiezo a dibujar, ahora puedes verlo dibujar la línea con colores verdes. la misma manera, si quieres cambiar el color, necesitas poner tu marcador al siguiente color. Por ahora, voy a seleccionar color rojo. Ahora va a empezar a dibujar línea de trazo con color rojo. De la misma manera, se puede seleccionar el color amarillo. Solo necesitas pasar el puntero por encima del botón amarillo Entonces puedes comenzar a dibujar usando la línea de color amarillo. Así es como puedes cambiar de color uno por uno. Si quieres borrar esta ventana, necesitas mover tu marcador por encima del botón de borrar. Como puede ver, después de mover este marcador por encima del botón de borrar, despeja la ventana. Entonces otra vez, puedes empezar a dibujar en este lienzo. Construimos con éxito nuestro proyecto de dibujo de aire. Y si quieres cerrar este proyecto, necesitas alabar cubo pequeño. Va a cerrar las ventanas. Este es el proyecto que vamos a construir en este tutial y vamos a iniciarlo desde el siguiente video Gracias por ver este video Sedue. 3. Crea una barra de pista de color en openCV: Entonces finalmente, estamos en mi estudio de investigación editor de código. Entonces como puedes ver en mi caractorio de trabajo actual, ya creamos un archivo Python, Min punto pi. Entonces comencemos con importar la biblioteca. Al principio, voy a importar la biblioteca NumPI. Importar NumPI como N P. Se utiliza para la operación numérica, incluyendo la creación de métricas y matrices Y luego voy a importar CV dos, nuestro módulo principal Importar CV dos. Aquí voy a importar otro módulo importante que se conoce como DC y necesitamos ingresarlo desde el módulo de recolección. Voy a escribir de colección. Quiero importar módulo toma, DEQE. Se trata de una doble habilitación D del módulo de recolección. Se utiliza para almacenar puntos para dibujar de manera eficiente. A continuación, necesitamos crear las guerras de pista para el ajuste de color. Ya aprendemos sobre track bar en nuestros proyectos anteriores, así que no voy a ampliar este tema en detalle. Y como saben, para crear las barras de pista, necesitamos una función auxiliar. Necesitamos una función de devolución de llamada. Entonces antes de crear la barra de pista, voy a declarar una función, Dave, y nuestro nombre de función se establece W. Luego dentro de la redondez, voy a pasar X como perder. Entonces dentro de esta función, solo voy a imprimir una declaración en blanco, imprimir. Es una función de marcador para la barra de pista llamada así Se llama cada vez que cambia el Trager Vo. Ahora podemos crear las barras de seguimiento para el ajuste de color porque ya creamos una función predeterminada. Entonces aquí, al principio, necesitamos proporcionar un nombre tragb F que minuti CV a punto nombre Ventana. Dentro de los vestidos redondos, quiero proporcionar un nombre trackb y nuestro nombre trackbar es de color dejector Después de asignar el nombre, necesitamos crear a seis barras de pista. Primero uno es para matiz superior, luego vamos a crear para saturación superior y superior V. Luego otros tres son matiz inferior saturación e inferior v. Para crear nuestra primera barra de pista tipo Amro, CV dos, punto, crear Trad baar Este Luego dentro de la umbra dentro de los códigos de rollo, primero necesitamos proporcionar el nombre de la barra de pista, y este nombre de barra de seguimiento es tono superior A continuación, necesitamos proporcionar el nombre de ventana en qué ventana, quiero mostrar la barra de pista, y nuestro nombre de ventana es decator coloreado Copio el nombre de la ventana y lo pongo dentro de los códigos dobles. Entonces aquí tenemos que pasar el valor, la posición inicial del deslizador de la barra de pista, cuando se desplegó por primera vez. En este caso, quiero comenzar desde 153. A continuación, tenemos que pasar el valor de conteo. Se va a establecer el valor máximo del deslizador de barra de pista y aquí voy a pasar 180. Ahora es rango de deslizador 0-180. Después de eso, necesitamos proporcionar la función predeterminada. Como pueden ver, nuestro nombre de función predeterminado es valor establecido, así que copio el nombre de la función y lo voy a poner de cabeza. Para U superior, establecemos el valor 153. Entonces vamos a crear saturación superior, así que duplico esta línea. Al principio, voy a cambiar el valor U, U superior a la saturación superior. Saturación superior. Primero, voy a cambiar el valor y voy a hacer que sea 255. Entonces voy a cambiar el valor de rango, que también es 255. Cuando abres el tragabore, va a establecer el valor por defecto 255. Se va a establecer el valor por defecto 255 para la saturación de las partes superiores. A continuación, voy a crear valor superior. Duplico esta línea, y aquí voy a establecer valor superior. Para valor superior, también, voy a usar Valor 255 y contar valor a 55. Después de crear las barras superiores de la pista, es necesario crear tres barras de vía inferiores. Entonces duplico toda esta sección, y voy a cambiar los valores. Esto es superior, este es tono inferior. Para U más baja, voy a establecer el valor 64. Entonces voy a establecer y también voy a decir rango valor 180 y nuestro valor de rango sigue siendo el mismo. Entonces para menor saturación, voy a establecer el valor 72 y nuestro rango es sigue siendo el mismo, para el valor inferior, voy a establecer el valor 49 y su rango sigue siendo el mismo. Por defecto, esta gama de colores va a detectar el color azul. Esta barra de arrastre, de lo contrario, podemos llamarla slider creada para ajustar HSV vs HSV significa matiz, saturación y Valor Creamos este umbral de ajuste HSV para detectar el color del marcador y por defecto herst color Así que no necesitamos ajustarnos demasiado. Cuando abrimos nuestro programa. Entonces esta es la primera parte de este tutorial. Básicamente, en esta parte, importamos las bibliotecas y creamos los tragares para el ajuste de color En la siguiente parte de este tutorial, vamos a crear la flotación coloreada y también vamos a crear la configuración del dibujo Así que gracias por ver este video. Nos vemos en la siguiente parte. 4. Punto de color y configuración de dibujo: Me alegro de verles chicos. Esta es la segunda parte de este tutorial, y en esta parte, vamos a realizar la configuración del punto de coloración y dibujo. Al principio, necesitamos crear obleas de color. La oblea de color es una actualización de lista para almacenar puntos de dibujo para cada color, como azul, verde, rojo, amarillo. Sí, vamos a utilizar cuatro colores totales para dibujar en nuestro lienzo azul, verde, rojo y amarillo. Así que vamos a crear los búferes de color. Entonces necesitamos crear un d. Necesitamos crear múltiples troqueles. Entonces primero, voy a crear una d para puntos azules puntos de color azul. B, puntos. Puntos azules iguales a dentro de la resis cuadrada, voy a usar un método del módulo deck. Ya ingresamos un modelo llamado DC lo vamos a usar. Entonces para escribir, DE D QE. Dentro del receso de carrera, aquí, voy a usar una función llamada maxlength maximum length, Mx AN, y voy a ponerla 1024 Duplico esta línea y a continuación voy a crear puntos para color verde, G puntos. Además, voy a crear puntos rojos Decor. Por fin, voy a crear DCFord uro Color. Duplico esta línea y esto es para Y puntos. Es una lista de fecha para almacenar los puntos de dibujo para marcador azul, verde, rojo y ul. Cada deck tiene un tamaño máximo de 1024 para limitar el uso de memoria. Estos array almacenan los puntos. Quiero ver las coordenadas, que se dibuja con color específico. En nuestro caso, utilizamos color azul, verde, rojo y amarillo. Y a continuación, necesitamos indexar y marcar el punto para un color específico. Entonces para eso, voy a usar variable para color azul, voy a usar índice underscoe azul Índice de subrayado azul igual a cero. Entonces duplico esta línea. A continuación, voy a crear índice para el color verde. Entonces voy a crear index sport, color rojo, y por fin, voy a crear index sport, color amarillo. Índice amarillo. Estas variables actúan como puntero al **** actual en la matriz de colores respectiva. Cuando comienza un nuevo trazo para un color específico, entonces se agregará un nuevo mazo a la matriz correspondiente. Supongamos que empiezo a dibujar en ese punto y trazo esta línea. Después de dibujar esta línea, yo este marcador. Ahora bien, si empiezo a dibujar en esa posición, va a crear una nueva baraja. De acuerdo a los colores vamos a almacenar estas nuevas coordenadas de mazo en estos puntos. Supongamos que usamos el color azul, entonces vamos a guardar esta nueva excavación en los puntos azules. No te preocupes. Vamos a gastarlo más tarde después de completar el proyecto con demostración práctica, cómo va a funcionar A continuación, necesitamos definir el tamaño del núcleo para la operación morfológica Entonces Hetype un kernel de nombre variable. Kernel igual a Np punto en ella crea un tamaño de kernel usando la matriz Numpl dentro de las ejecuciones dentro de las ejecuciones para pasar cinco por cinco píxeles tamaño del kernel Y a continuación, tenemos que pasar tipo D y HeuTypeNP punto UI Este es el tipo doc. Este núcleo se utiliza en operaciones morfológicas como dilatación y procesar la resina brillante agranda en una Primero, creamos una matriz de cinco por cinco llena de unos, y luego definimos el tipo doc. NP rot UI Nt ocho, asegúrelo , contenía enteros de ocho bits sin signo Quiero decir valor entre 0255. Básicamente, se mejora la detección del punto de color en la imagen, asegurando que se llenen pequeños huecos en una línea de dibujo o color detectado. Esto es para este tutorial. En el siguiente tutorial, vamos a dibujar lienzo de ventana pintado. Vamos a crear un lienzo en blanco donde vamos a dibujar. Entonces vamos a crear botones para el color. Además, vas a crear botón extra para TRD permanezca encendido para la siguiente parte 5. Configura el lienzo de pintura: Hola chicos, me alegro de verles de vuelta. Esta es la tercera parte de este tutorial, y en esta parte, vamos a pintar el lienzo de ventana. Aquí, vamos a crear el lienzo y los botones. Entonces al principio, voy a definir los colores. Entonces voy a crear una variable de colores. Y es una matriz y dentro esta matriz, vamos a crear una tupla Así que dentro de esta matriz, dentro de los latones redondos, voy a escribir el primer código de color Voy a poner el color azul. Entonces para el azul, voy a escribir 255 coma cero, coma Entonces después dentro de la carrera de latón, necesitamos establecer el color verde. Entonces para escribir 02550. A continuación, voy a decir el color rojo. Después dentro de las corridas, cero, cero, 255. Después coma superior. Dentro de las runras voy a poner otro color que es amarillo, y para amarillo, soy tipo 025-05-2505 Aquí voy a usar el color Ford como marcador. Azul, verde, rojo y amarillo. Entonces voy a crear un índice de color. Entonces escribe índice de color. Por ahora, voy a asignar cero. Después de configurar el color y el índice, necesitamos configurar el lienzo. Para eso, necesitamos usar NumPI. Entonces primero, voy a declarar una variable y nuestra variable es paint window. Pintar ventana igual a dibujar el lienzo, voy a usar el método Np punto cero. Dentro de la carrera esto es primero, necesitamos definir la dimensión, la dimensión de este lienzo, y lo voy a hacer 471 por 636, y voy a usar total de tres canales de color, barras sumadas tres Después de eso, quiero lienzo de color blanco. Entonces voy a agregar más 255. Se va a generar un lienzo de color blanco. Está a las 2:55 a todo el valor de píxel, así que va a hacer que sea blanco Por defecto, Np Jos crea una imagen negra. Y ahora necesitamos crear los componentes de la interfaz de usuario. Necesitamos crear los botones, como botón claro, otros botones de colores. También, necesitamos poner texto en este botón. Para eso, vamos a usar rectángulos para dibujar el botón Y voy a dibujar este rectángulo en la ventana mojada, así que tecleo pintar ventana igual a CV método rectángulo de dos puntos, rectángulo Y dentro de los brusss redondos primero, necesitamos definir en qué imagen quiero dibujar el rectángulo En nuestro caso, pintar ventana. Entonces necesitamos definir el primer punto. Primero, necesitamos definir la esquina superior solapada. Aquí voy a pasar dentro de los latones redondos por la coma uno Entonces necesitamos definir la esquina inferior derecha de este rectángulo. Dentro de las rondas, voy a pasar 140 65. Entonces necesitamos definir el color. Por ahora, voy a usar el color negro para el botón de borrar. Entonces voy a hacerlo negro. Entonces dentro de las rondas, voy a pasar 000. Entonces necesitamos proporcionar el espesor, y para espesor, voy a usar dos. la misma manera, voy a crear otros botones para los otros colores. Esto es para Tear button. Duplico esta línea y esta vez, voy a cambiar los puntos. Después de duplicar esta línea, primero, voy a cambiar el punto de valor de la esquina superior izquierda. Ahora empieza desde 160 y termina con uno. Este es el valor sobrante y este es el valor YS. Además, necesitamos proporcionar el valor de la esquina inferior derecha. Ahora empieza desde 255. Y aquí, voy a usar nuestro primer color de la variable colores. Color azul. Para seleccionar el color azul, aquí necesitamos escribir color, colores, y ahí quiero llamar al primer índice. Dentro de las piezas cuadradas, voy a pasar cero. Como saben, en el primer índice, asignamos el color azul, y quiero rellenar este rectángulo con el color. Entonces como grosor, voy a pasar menos Y. I' voy a rellenar el rectángulo con el color Después hago esta línea y esta vez, quiero seleccionar el segundo color. Índice de paso lateral uno. Además, es necesario cambiar la posición de este rectángulo. Entonces aquí estoy t 275 por uno para el valor inferior derecho, voy a pasar 370. Esto es para botón de color verde, y luego necesitamos crear para botón de color rojo. Duplicé de nuevo esta línea. Y primero, voy a cambiar el índice número dos, y también necesitamos cambiar la posición de inicio tranquilo de este rectángulo para pasar 390. Y el valor de la esquina inferior es 485. Entonces necesitamos crear botón ford color amarillo. Entonces lo duplico otra vez y voy a cambiar el número de índice, que sea tres. También, necesitamos definir la posición. Quiero iniciarlo desde 505 píxeles, y nuestro valor inferior derecho es 600. Y voy a satisfacer. Ahora voy a poner texto en este botón Borrar porque para botón claro, ja usa color negro. Entonces quiero ponerle un texto. Para eso, tipo ventana de pelo, CV dos, dardo, poner método de texto, poner texto. Entonces dentro del redondoSSF quiero definir en qué ventana quiero poner el texto, que es ventana de pintura. Éste. Entonces tenemos que pasar el texto. ¿Qué texto quieres pasar? Quiero escribir aquí. Entonces necesitamos definir el punto de origen de este texto. Y dentro de la carrera de latón, voy a pasar 49 coma 33. Este es el punto de origen de este texto, y a continuación, necesitamos definir la cara de la fuente. ¿Qué fuente quiero usar? Para la fase de fuente, voy a usar CV dos puntos, font ho underscore, font hi SymTist Y a continuación, necesitamos definir la escala de fuente, y voy a usar 0.5. Después de definir el tamaño de fuente, necesitamos definir el color de fuente, y para el color de fuente, voy a usar ese color. Pase de sonido 00 coma cero. Entonces tenemos que proporcionar el grosor, y voy a usar dos. Y por fin, necesitamos proporcionar el tipo de línea. Para el tipo de línea, voy a escribir CV dos líneas de puntos Subrayar esta A continuación, voy a crear una ventana para mostrar el lienzo. Para eso, voy a escribir cv dos punto nombre Método Ventana, nombre Ventana. Después dentro de las rotondas, al principio, necesitamos proporcionar el nombre de la ventana y en nuestro caso, voy a escribir Paté Y también necesitamos definir las banderas para controlar las propiedades de esta ventana. Aquí estoy para pasar CV a punto, Ventana AutoSizet uno. Este tamaño automático de ventana garantiza que la ventana ajuste automáticamente su tamaño para adaptarse al contenido de visualización Puede ser video o imagen. Esto es por esta parte. En la siguiente parte, vamos a iniciar el procesamiento de fotogramas usando follow y vamos a extraer frame de nuestra webcam. Gracias por ver este video quédate encendido para el próximo estudio. 6. Configuración de la cámara y bucle principal: Tan bueno verte de vuelta. Esta es la otra parte de este proyecto, y vamos a comenzar esta parte con la captura del fotograma de video. Entonces primero, voy a comentar esta línea. No necesitamos esta ventana de pintura. Entonces voy a comentarlo por ahora y entonces y luego voy a crear una variable y nuestra variable es cap cap igual a cv dos puntos videocatura Esta y luego dentro de las prensas redondas, voy a pasar la fuente, y queremos iniciar la cam por defecto, así que voy a pasar cero. Aquí inicializamos la cámara web para capturar el video en vivo A continuación, necesitamos ejecutar bucle infinito para el procesamiento de video. Para eso, aquí voy a usar While loop. Si bien es cierto. Entonces dentro de este bucle while, voy a usar un método. Voy a usar el método de lectura. Aquí para escribir cap dot read. Este método va a leer todo el fotograma de esta variable cap. Y como saben, este método va a devolver un total de dos resultados. Primero, va a devolver un valor Bullen, luego va a devolver el marco de imagen real, y necesitamos almacenar ambos valores en una variable Para el valor Bullen aquí voy a usar una variable llamada success y para y para la imagen, voy a usar variable frame igual al método cab dot read Ahora, después de leer el fotograma, voy a darle la vuelta al marco. Quiero voltear el marco horizontalmente porque quiero actuar esta ventana como un vio foror eso, así que aquí voy a atar marco igual al método CV de dos puntos flip Después dentro de las rotondas, primero, tenemos que pasar el archivo fuente Primero, tenemos que pasar la fuente de la imagen fuente y nuestro nombre fuente de imagen es frame, y también tenemos que pasar el flip code, y como flip code, voy a pasar uno. Este valor va a voltear el marco horizontal. A continuación, voy a convertir este fotograma en espacio de color HSB Para eso, voy a declarar otra variable HSv igual a CV dos, color CVT Dentro del Rundress como fuente, voy a pasar el marco Entonces voy a convertir esta imagen Bzier en color GSV Voy a escribir CV dos puntos color, guión bajo, y quiero convertirlo BGR dos Aquí convertimos este marco en espacio de color HSV para una segmentación de color más fácil Y como saben, HS significa saturación de tono y valor. A continuación, tenemos que agarrar el valor umbral HSV. Necesitamos recuperar el valor umbral superior e inferior de las barras de vía. Para eso, necesitamos usar un método, y nuestro nombre de método es la pausa de la barra de seguimiento de puerta. Entonces al principio, quiero recuperar superior, así que voy a escribir U, U significa subrayado superior U. U superior igual a C dos, punto, obtener pista pero pausa Esta función. Entonces dentro del pase redondo dentro de las comillas dobles aquí, tenemos que pasar al principio, tenemos que pasar el nombre del brote de pista de que barra de pista, quiero volver a emitir el valor Y nuestro baname pista es tono superior. Entonces voy a copiar este nombre rab superior Hu, y lo voy a pegar dentro de la doble cita Entonces y después tenemos que pasar el windoame como puedes ver, aquí declaramos el nombre de la ventana y nuestro windoame Copio el nombre de la ventana, y lo voy a poner dentro de los códigos dobles. la misma manera, necesitamos agarrar el valor de saturación superior. Para eso, voy a duplicar esta línea, y al principio, voy a cambiar el nombre de la variable. Es para saturación de partes superiores. También necesitas cambiar el nombre tragbnname. Voy a copiar el valor de saturación superior, y lo voy a pegar aquí. Entonces dubgate esta línea y también necesitamos usar el mismo nombre de ventana que es detector de color Entonces necesitamos crear una variable para uParuuper valor superior y para el valor superior, voy a copiar este trabnameUper V. Aquí recuperamos la u superior, saturación superior y el valor superior de la misma manera, necesitamos recuperar U inferior, saturación inferior y valor inferior el valor uParuuper valor superior y para el valor superior, voy a copiar este trabnameUper V. Aquí recuperamos la u superior, la saturación superior y el valor superior de la misma manera, necesitamos recuperar U inferior, saturación inferior y valor inferior. Voy a duplicar esta sección y voy a reemplazar los nombres de las variables. Esto es para menor HU y para la U inferior, voy a usar este nombre de drag ban, inferior U. Y para menor saturación, primero, voy a cambiar la variable de extremidad, menor saturación y pelo con apretado apenas más bajo. Menor saturación, y para menor valor, valor igual y justo para atar, baje el cabello. Valor inferior. Aquí recuperamos la posición actual de las barras de vía. Quiero decir estos deslizadores. Y como usted sabe, las barras de seguimiento permiten el ajuste dinámico del umbral HSV para la detección de color en tiempo real Ya lo hicimos en nuestros proyectos anteriores. Y ahora en adelante para definir la furia HSV superior e inferior, la gama de colores HSV Para eso, voy a crear una variable llamada subrayado superior HSV HSV superior igual a Np punto A. Dentro de la resis redonda, voy a usar jarrones cuadrados Y aquí, voy a pasar, y aquí voy a pasar todas las variables superiores. Tonalidad superior primero paso inferior superior hu, luego voy a pasar saturación superior Y a continuación, voy a pasar valor superior. De la misma manera, necesitamos declarar otra matriz. Necesitamos crear otra matriz para un valor HSV más bajo. Entonces aquí, voy a duplicar esta línea y hernotipo menor Voy a pasar, bajar. Entonces voy a sustituir U por L, menor saturación y menor valor. Ahora después de crear el GesR superior e inferior, necesitamos crear los botones rectángulos para nuestro live frame Para eso, voy a usar el mismo método, el método del rectángulo para crear el rectángulo en la misma posición. Entonces copio todos los rectángulos de la pintura do. Y lo voy a poner por debajo de los bordes inferiores V, y necesitamos moverlo dentro del nivel de sangría, es importante porque estamos trabajando en Python . Eso es lindo. Ahora, esta vez necesitamos crear este rectángulo en el marco de luz, este marco. Aquí creamos el botón rectángulo en la ventana blanca, esta ventana de pintura. Pero esta vez necesitamos crearlo dentro del marco de luz. Para eso, necesitamos reemplazar esta variable de ventana de pintura con la variable de marco. Copie la variable m frame, y voy a reemplazar paint window con variable frame. Entonces uno por uno, voy a reemplazar el nombre del marco. Todo el nombre de la variable. Marco. No te preocupes, adelanto este proceso rápido. Como voy a sentir este rectángulo queer con color negro aquí voy a pasar menos uno. Voy a establecer este archivo. Después de configurar este archivo, voy a poner el texto en este botón de oreja. Para eso, voy a copiar la misma línea, poner texto. Copio esta línea y voy a pegar después del rectángulo. Aquí no necesitas cambiar nada. Aquí sólo va a cambiar el nombre del marco. Y tenemos que poner el texto en esta variable de marco, no la ventana de pintura. Voy a copiar Así que reemplace la ventana de pintura con marco variable de marco, y voy a establecer esta. Ahora voy a ejecutar el código en mi terminal, pero antes de ejecutar código en mi terminal, aquí voy a establecer una condición E. De lo contrario, no va a romper el bucle y a través de cualquier techo. Entonces primero voy a establecer una condición para salir del bucle. Aquí voy a escribir yo CV dos dot pot key dentro de los latones redondos, voy a poner un milisegundo y Y signo de Boston Cero x FF, igual a igual dos, voy a ejecutar el método ORD ORD. Dentro del redondo dice, si alabo pequeña Q, entonces quiero romper el bucle Es la condición p, quiero romper el bucle. Romper. Además, necesitamos liberar la captura. Fuera del bucle while, aquí, voy a escribir, método Capt release, cp dot release Este método va a liberar nuestro cuidado web. Además, voy a destruir todas las ventanas. CV dos punto, destruye todas las ventanas, esta. Y luego quiero mostrar tal dos frame. Al principio, quiero mostrar la ventana blanca, que es ventana de pintura, pintar marco de ventana. Entonces aquí voy a ejecutar un método llamado CV dos puntos soy de método. Y dentro de las rotondas aquí voy a pasar nombre de ventana y nuestro nombre de ventana es ventana blanca Y también, tenemos que pasar la fuente del marco. Y como pueden ver, vamos a usar este marco, ventana de pintura, este marco en blanco. Entonces copio el nombre de la variable, y voy a pegarlo aquí. Entonces voy a exhibir otro fotograma. Entonces duplico esta línea, y esta vez, quiero mostrar este mainframe, el fotograma ligero Entonces aquí tipo cam. Esta es la leva ligera también voy a colocar la variable, que es frame. Voy a decir estos cinco. Básicamente, voy a ejecutar este código para comprobar perverso ¿Coloca los rectángulos? ¿Dónde quieres colocar? Vamos a revisar el código. Después de ejecutar este código, como pueden ver, primero, va a mostrar la pista, la barra de pista de color, donde se puede ver este deslizador y después de algún tiempo, puedo esperar algún tiempo, va a abrir nuestra cámara. Así que esperar algún tiempo para arrancar la cámara. Como puedes ver, aquí puedes ver una ventana blanca, y tenemos que embotar cinco botones, cuatro botones de color y un botón de nivel. la misma manera en nuestra ventana en vivo, aquí puedes ver, tenemos que embotar cinco botones, cuatro botones de color y un botón de nivel. Pero el problema es que el texto del oído no es visible en la ventana de luz porque aquí usamos el mismo color de fondo, el negro. Por eso el texto coincide con el color de fondo. Y para que sea visible, necesitamos que sea de color blanco. Entonces voy a cerrar todas las ventanas, y aquí voy a escribir 255 para azul, para verde, también voy a pasar 255 y para rojo, también voy a pasar 255. Ahora bien, si ejecuto este código, va a devolver el texto blanco en la ventana lib. Como sabéis, por defecto en nuestros deslizadores, héroe es de color azul Voy a detectar el color azul. También puedes cambiar si cambias el deslizador vs. Esto es todo para este tutorial. En la siguiente parte de este tutorial, vamos a trabajar en el enmascaramiento. También, vamos a detectar los contornos. Gracias por ver este video estad atentos para nuestra siguiente parte. 7. Identifica el puntero con la máscara: Me alegro de verles chicos. Una vez más, estoy de vuelta con otro video relacionado con este proyecto. Y en esta parte, vamos a identificar el puntero haciendo una máscara. Entonces al principio, voy a comentar ambas líneas. No necesito estas líneas por ahora. Y luego voy a crear máscara. Después de crear la máscara, necesitamos refinarla una y otra vez usando diferentes métodos. Al principio, voy a crear una máscara, bit variable MSK mask igual a Voy a usar en el método de rango, CV dos.en rango. Luego dentro de la rotonda al principio, necesitamos proporcionar la pila de origen Como fuente, voy a pasar el HSV, el HSV en HSV Aquí paso este cuadro HSV, éste. Después de eso, tenemos que pasar HSV más bajo. Para HSV inferior, como puedes ver, aquí creamos una variable, werHSB Es una matriz. Quiero pasar esta matriz, y luego tenemos que pasar HSV superior HSV superior Básicamente ing función va a aislar la cresta de color deseada y utilizar esta función, podemos crear una máscara binaria. Esta masa es una máscara binaria donde los píxeles blancos representan las áreas de la imagen original que coinciden con el rango de color deseado. Supongamos que seleccionamos el color azul y esta máscara va a detectar el color azul y hacer que esta porción blanca después de crear la masa usando la función anillada, necesitamos eliminar ruido necesitamos eliminar el ruido reduciendo las áreas blancas Para eliminar el ruido reduciendo las áreas blancas, necesitamos usar un método llamado erot Aquí voy a escribir mask igual a English mask, voy a aplicar CV two dot Rod Method. OT. Después dentro de las rotondas, al principio, necesitamos proporcionar esta fuente Y como fuente, voy a proporcionar la máscara de variable mask. Después de eso, necesitamos pasar el tamaño del kernel y para kernel, voy a pasar esta variable, kernel. Aquí creamos cinco por cinco kernel. Copio esta variable nombre kernel y voy a pasarlo aquí. Entonces necesitamos definir la iteración. Para iteración, quiero una iteración. Al principio, aquí pasamos la máscara binaria, que se opta a partir de la fecha anterior, y luego pasamos el kernel Este es un elemento de estructura, que se utiliza para la erosión, y luego pasamos iteración. Y aquí pasamos uno. Se define el número de veces que se aplica la operación de erosión. Básicamente, este método va a reducir el tamaño del pecado blanco eliminando píxeles de límite. Después de eso, necesitamos eliminar todo el ruido pequeño. Para ello, vamos a utilizar un método llamado morfología EX. Así que aquí, de nuevo, voy a atar máscara igual a v dos puntos morfología Ex luego dentro de la ronda reress al principio, voy a proporcionar la máscara binaria, y luego tenemos que proporcionar la operación, una operación morfológica Para eso, voy a escribir CV a punto morph op. Éste. A continuación, necesitamos definir el tamaño del kernel y para el tamaño del kernel, voy a usar la misma variable kernel. Básicamente, ella es paso a paso filtrando la máscara y este método va a eliminar todo el pequeño ruido. A continuación, necesitamos expandir y refinar el área blanca para restaurar la forma. Para eso, necesitamos usar otro método. Quiero decir otro filtro, que es dilatar. Nuevamente, quiero atar máscara igual al método de dilatación de civeta. Luego dentro de los vestidos redondos, al principio, necesitamos pasar la máscara binaria, así que voy a escribir mask, coma, luego necesito proporcionar el tamaño del kernel, que es kernel, entonces necesitamos proporcionar la iteración Para iteración, voy a pasar una. Esta secuencia se usa comúnmente en tareas como la detección de objetos. Además, está en la segmentación basada en color. O podemos usarlo para la detección de contornos. Después de aplicar todos los métodos, va a refinar nuestro objeto marcador. A continuación, necesitamos encontrar los contornos para el puntero después de identificarlo. Pero no vamos a hacer este tap en este video. Vamos a hacerlo al siguiente estudio. Ahora voy a mostrar esta ventana de máscara usando el método IM Shu. Para eso, Hotype Cv punto M show. Dentro del método IM Show, primero voy a proporcionar un nombre de ventana para Nombre de ventana, voy a usar mask. También, como variable, voy a pasar la variable mask. Entonces voy a configurar este archivo. Después de configurar este archivo, voy a ejecutar este código en mi terminal, y voy a esperar algún tiempo y ver si funciona correctamente o no. Como puedes ver, abre una ventana de máscara negra y puedes ver nada en esta ventana. Pero en mi mano, tengo un puntero de color azul, azul. Si muevo este puntero frente a mi cámara, ahora se puede ver identificado. Identificó este puntero azul. Ahora solo se puede ver puntero azul. Cuando muevo mi mano, también movió el puntero. Está funcionando. Identifico con éxito el puntero. Después de identificar el puntero, necesitamos identificar el contu, pero no voy a hacer esto en este tutorial Lo voy a hacer en el siguiente tutorial. Gracias por ver este video. Estén atentos. 8. Encuentra el contorno para el puntero: Hola, chicos. Me alegro de verte de vuelta. Una vez más, estoy de vuelta con otro tutorial relacionado con este proyecto. Y en este tutorial, vamos a encontrar el contu para el puntero Al principio, voy a quitar tanto esta línea. No lo necesito. Entonces dentro de esto mientras ou voy a detectar los contuores Tenemos que encontrar el contu en esta máscara binaria. Básicamente, los contornos son carbohidratos uniendo todos los puntos continuos a lo largo del límite del objeto, teniendo la misma intensidad Ahora para encontrar los contornos, necesitamos usar el método de contorno fino. Al principio, voy a declarar total dos variables. Para contorno, voy a escribir Cn Tf. Con eso, voy a declarar otra variable llamada Z igual a dos, y voy a usar nuestro método contuso fino Voy a escribir CV dos que contornos finos dentro de las rondas. Primero, voy a escribir mask, copy. Voy a usar la versión copy de esta máscara. Entonces como segundo parámetro, necesitamos pasar el modo. Voy a escribir CV a punto. RDT subscopio externo, éste, coma, y también interpasa Por método, voy a empatar CV dos enfoque de cadena de puntos, sencillo, este. Este método va a devolver lista de contoures que se encuentra en esta imagen, la imagen de máscara, la segunda variable es para segunda salida, que es Se ignora ya que no se usa aquí. En nuestro primer parámetro, pasamos la versión café de esta imagen de máscara binaria. Segundo, pasamos el modo. Este modo recupera solo el contorno externo externo e ignorando cualquiera en lugar de Y por fin, pasamos método de aproximación de contorno que comprimen el segmento horizontal, vertical y diagonal para mantener sólo sus puntos finales Se va a reducir el uso de memoria. Como te dije, este método va a escribir en lista una lista de conduras A continuación, necesitamos procesar el contorno más grande. Pero antes voy a comentar esta línea, lo contrario, podemos eliminar esta línea. No necesitamos esto. Pero antes de procesar, primero, voy a declarar una variable, y nuestra variable es centro. Centro igual a por ahora, voy a hacerlo monja Esto se inicializará con monja. Almacenará las coordenadas del centro de la contue más grande si se encuentra una A continuación, necesitamos poseer la mayor contue usando la condición IP Aquí voy a escribir y voy a usar la función LN. Carril dentro de la función len, voy a pasar las contues Si contues mayores a cero, entonces dentro de esta condición IP, ahora necesitamos acortar los contornos para encontrar los contornos Para acortar los contornos, voy a escribir CNT, igual a, voy a usar un método llamado short eight Corto ocho dentro de las rondas es primero interpasar el iterable y vamos a iterar esta variable, A continuación, tenemos que pasar la llave. Clave igual a I'm pass CV dos área de contorno de puntos. Área de contorno, esta. Coma y amyoti se invierten igual a verdadero. Y para seleccionar el contorno más grande de esta lista, necesitamos pasar el número de índice, dentro de la prensa cuadrada voy a pasar cero. Ahora, déjame explicarte este método de ordenación. Aquí ordenamos el conduur en función de su área en orden descendente Por eso ella escribimos reverse true. A continuación, necesitamos encontrar el círculo más pequeño que pueda cluir completamente el conducur seleccionado Para eso, voy a escribir dentro de los vestidos redondos. De nuevo, voy a usar vestidos redondos, luego X coordenada coma Y coordenada y fuera del negocio de gestión, voy a pasar Coma, voy a pasar radio Igual para obtener el radio del círculo envolvente alrededor del contorno, necesitamos usar un método y nuestro métodonme es Mini Aquí, voy a escribir CV dos puntos Mini círculo envolvente, éste Entonces dentro de la umbra dice, necesitamos proporcionar el contorno, el contorno exacto, que encuentras de esta lista, voy a escribir CNT Y este método devuelve coordenadas XS coordenadas XS. También devuelve radio. Entonces usando esta Xs Xs y el radio, vamos a dibujar una sutil. Vamos a dibujar el círculo alrededor del contorno. Para eso, voy a usar el método circle. Voy a empatar CV para hacer círculo. Después dentro de los rounders, primero, necesitamos proporcionar la imagen en la que imagen quiero dibujar el círculo aquí voy a pasar el exacto libre Este marco STFrFring. A continuación, tenemos que pasar el punto central. Por lo que dentro del vestido redondo está rebaño t XY. Pero el problema es que necesitamos convertir estas coordenadas en intser Esta función devuelve las coordenadas en un formato de cadena. Tenemos que convertirlo en un intser. Voy a usar en función. I NT dentro del proceso redondo, voy a pasar las X xs. De la misma manera, INT. Dentro del ras redondo, voy a pasar los YxS. A continuación, tenemos que pasar el radio. Para el radio A, voy a usar en función en el método INT. Entonces dentro del latón redondo, estoy radio de paso. Después de proporcionar el radio, también en para proporcionar color. Para el color, voy a usar cero coma 255255. Es de color amarillo. Y entonces hay que pasar espesor de este radio, y como espesor, voy a pasar dos. Y ahora después de dibujar este círculo dentro del contorno, necesitamos detectar el centro. Necesitamos detectar el punto central para calcular el centro de los contornos detectados, primero, voy a escribir una variable llamada A, AM igual a, y voy a usar un método CV dos momentos de punto. Dentro de la hermana redonda, voy a pasar el contu CNP. Usando este método, calculamos el momento especial de la contoura que son cantidades escalares utilizadas para derivar las propiedades del contorno Ahora, usando este momento especial, necesitamos calcular el centro de este círculo. Y para eso, necesitamos usar una fórmula. Pero antes de calcular el centro, primero entendemos el método del momento. Como pueden ver, aquí escribo a single y cometa. Este momento método de retorno a la orden. Este es un movimiento de primer orden. Aquí pin punto y 01 punto y éste es cero para ordenar movimiento, área del conduur aquí devuelve punto cero Entonces si divido n 010 y n01 con n00, va a devolver las coordenadas Xs y las coordenadas Y xs de este círculo central Para eso, necesitamos usar un método. Para eso, voy a crear una variable para calcular el punto central, algún tipo centro. Centro igual al interior de los vestidos redondos, al principio, voy a extraer la coordenada X. Alguien usa el método It. Se inter dentro de los vestidos redondos. Al principio, voy a dividir A dentro de los cuadrados, dentro de los códigos simples, A diez, y quiero dividirlo, así uso división seno con A dentro del cuadrado resis, quiero esta vez, quiero pasar dentro de los códigos simples, doble cero. Coma. Ahora necesitamos extraer la coordenada Y. Esto va a devolver la coordenada y también necesitamos la coordenada Y. la misma manera, voy a teclear INT dentro de la resis redonda. Aquí voy a pasar dentro de estas resis cuadradas, al principio, voy a pasar un 01 Quiero dividir esto dentro de la ress cuadrada dentro los códigos dobles, A doble cero. Esto va a devolver las coordenadas Y. Y lo vas a almacenar en la variable central, centro igual a este cálculo, y convertir las coordenadas calculadas en indsers porque este valor es como una posición de píxel Básicamente, este código gtate el contorno más grande en una imagen binaria, en nuestro caso, máscara de la imagen de máscara y dibuja un círculo alrededor de ella Además, calculamos el centro usando momentos especiales. Se usa comúnmente en aplicaciones de rastreo de objetos. Esto es para este tutorial. En la siguiente parte de este tutorial, vamos a manejar el botón. Vamos a manejar los clics de botón. Gracias por ver este video, Tatune por la siguiente parte de este tutorial 9. Manejo de los botones: Me alegro de verlos de vuelta, chicos. Una vez más, estoy de vuelta con otro video relacionado con este proyecto, y en esta sección, vamos a manejar las patadas de botón Como sabes, creamos diferentes botones, como botón claro, botón de color rojo, botón de color amarillo, botón color verde y botón de color azul. Ahora tenemos que manejar las patadas de botón. Entonces cuando coloco mi MarkR por encima del botón, quiero activar el botón Supongamos que si coloco mi marr por encima del botón de borrar, quiero borrar todos los dibujos la misma manera, si coloco mi marr por encima del botón amarillo, entonces activo el marcador amarillo Entonces va a dibujar las formas en color amarillo. Empecemos con la condición IP. Aquí, voy a escribir centrado dentro de la resis cuadrada, voy a pasar el índice número uno, menos que de otra manera igual a menos de igual a 65, luego dentro de esta condición IP, voy a usar otra condición IP. Pero antes voy a explicar esta línea, ¿cuál es el significado de esta condición? Esto va a verificar si el centro del objeto dedicado está dentro de la razón superior de la pantalla, como las coordenadas Y son menores o iguales a 65 entonces esta área está reservada para el botón en el que se puede hacer clic Después dentro de la condición IP, primero, vamos a manejar el botón de borrar. Sumte 40, menos que igual al centro en el índice rounders número cero menos que igual a 140 Entonces dentro de esta condición IP, básicamente esta condición va a comprobar p las coordenadas X del centro se encuentra dentro del rango 40-140 correspondiente a la posición de los botones de los oídos Si es true, se activa la acción del engranaje. Luego, debe borrar todos los puntos de color azul, verde, rojo y amarillo restableciendo su lista correspondiente de objetos Como saben, cada de sostiene punto para conducir. Entonces uno por uno, voy a despejar los puntos, todos los puntos de color. Como saben, aquí declaramos nuestros puntos de cubierta. Creamos objetos de cubierta, puntos B, puntos G, puntos R y Eulopoins Estos puntos son para color azul, verde, rojo y amarillo. Entonces para copiar toda la sección. Voy a usar este mismo comió, y voy a pegarlo dentro de esta condición de cadera. Aquí. Voy a colocarlo dentro de la etiqueta de sangría. Para esto d, voy a establecer el uso de memoria, y por ahora, voy a establecer el uso de memoria, 512. Voy a sustituir todos los valores por 512. Estos puntos de fecha almacenan los puntos de dibujo para mártires azules, verdes, rojos y amarillos Y aquí se establece el límite de tamaño máximo, y cada mazo tiene un tamaño máximo de 512 para el uso de memoria límica Y también, necesitamos restablecer a cero todos los índices de color para cada color. Entonces aquí, voy a copiar esta sección, este índice de color, índice de color azul, índice color verde, e índice color rojo e índice de color amarillo. Y voy a pegarlo aquí. También necesitamos moverlo dentro del nivel de sangría. Ahora, para despejar el área de dibujo de la ventana de pintura, necesitamos eliminar todos los colores de trazo de esta ventana de pintura. Tenemos que hacer que todos los pixeles sean blancos. Para eso, voy a escribir aquí voy a escribir pintar ventana. Dentro del cuadrado ssh, necesitamos despejar el área de dibujo de la ventana de pintura estableciendo todos los píxeles debajo de la fila de 67 en blanco Al principio, necesitamos referirnos a todas las filas a partir de la fila número 67. Aquí voy a escribir 67, luego semicíro. Ha sido desde la fila número 67 hasta el final. Quiero decir desde la fila número 67 hasta la parte inferior de la imagen, entonces necesitamos referir todas las columnas ingresan ancho del rango de imagen para esa coma henotipo Después dos puntos, a continuación tenemos que referir todos los canales. De nuevo, voy a escribir com y también necesito escribir los dos puntos para seleccionar todos los canales de color. Por lo que esto selecciona toda el área dibujable de la imagen a partir del 67 hasta Y después voy a asignar un valor a la parte seleccionada y quiero asignar 255. Aquí asignamos el valor seleccionado parte de este edding y 255 representan la intensidad máxima para cada canal para cada canal de color. Básicamente, va a devolver bastante pixel. Entonces va a activar el botón de borrar y despejar la ventana. Entonces uno por uno, voy a usar estas coordenadas y activar estos rectángulos particulares Primero, voy a trabajar para el color azul. Aquí voy a escribir Ls dentro de la condición de it 160, menos que igual al centro. Dentro de las direcciones cuadradas voy a pasar índice cero con eso menos que igual a 55 Después inserte esta condición, índice de color hemo igual a, y quiero seleccionar el primer índice Y como saben, en nuestro índice de color, ahorramos un total de cuatro colores y nuestro primer color es el color azul. Entonces voy a usar el índice cero. Esto es para color azul. Entonces Helm roti, un comentario tiene etiqueta, es azul. Entonces duplico esta sección, y esta vez, voy a establecer las coordenadas entre para color verde, soy tipo 275 B, y nuestra área es 370. Entonces entonces voy a cambiar el color en este do. Voy a hacer que sea uno. Entonces otra vez, voy a duplicar esta sección y esta vez nuestro rango de píxeles 300-9390 Voy a usar esta vez voy a usar el índice de color dos. Este es nuestro color verde. Entonces voy a cambiar el comentario verde. Y éste es para el color rojo. Entonces otra vez, voy a duplicar esta sección y esta vez, voy a cambiar las coordenadas. Ahora es inicio desde 505 píxeles y va hasta 600 píxeles. Esta vez, voy a usar nuestro tercer índice de color tres. Si movemos nuestro puntero marcador en esa posición en esas coordenadas, entonces va a activar esta opción de color. Si movemos nuestro marcador 100-60 por 255, entonces va a encender el color azul Al mismo se va a encender el verde, el rojo, y el último es de color amarillo. Y ahora necesitamos manejar el dibujo si el usuario no está en la zona inferior. Entonces en la parte dentro de la condición s, este sp se ejecuta cuando el centro no es la razón principal. Quiero decir la razón principal de esta pantalla. Si nuestra condición no coincide con esta condición IP, entonces va a saltar a la parte s. Si nuestra condición es mayor a 65, entonces va a saltar a la parte s. En esta parte, vamos a manejar la garrapata coloreada correspondiente. Vamos a anexar el punto central a la toma coloreada correspondiente Entonces uno por uno, voy a manejar todo el índice de color, y necesitamos agregar los puntos de color al índice de color Y como saben, estos son todos índice de color. Entonces aquí voy a escribir I índice de color igual a igual a cero. Como saben, cero significa color azul. El índice cero significa color azul. Entonces inserta esta condición si, voy a escribir puntos B. Dentro de los vestidos cuadrados, ella para pasar índice azul, índice azul, y quiero anexar las coordenadas Aquí voy a escribir punto, appendt append, lift. Después dentro de las rondas, voy a pasar las coordenadas centrales. Aquí para pasar centro. Como saben, punto B es una lista de mazos que almacenaban los puntos. Quiero decir las coordenadas que se utilizan para dibujar con un color azul y cada una de representan el trazo único del dibujo azul. Y el índice azul es un indsor que rastrea el trazo actual Si dibujamos algún trazo con color azul, entonces va a rastrearlo. Se utiliza para acceder a la baraja actual en punto azul para almacenar nuevos puntos para el trazo actual. Y el método append lap en el punto frente de la cubierta actual en puntos azules, y aquí centro representan las coordenadas de los puntos detectados Básicamente, quiero decir cuando el usuario dibuja en azul, el Pumram detecta continuamente la posición de este puntero y se suma a la baraja para el trazo azul actual uso de la función append Lip asegura los puntos se almacenen en orden inverso, lo que puede ser útil para una lectura y procesamiento eficientes De la misma manera, necesitamos manejar todos los colores. Entonces aquí, voy a escribir una hoja Índice de color igual a igual a esta vez voy a pasar una. Entonces aquí, voy a escribir G puntos. Esto es para verde, así que voy a escribir G puntos dentro del cuadrado prensas rebaño pase índice verde, índice verde la misma manera, quiero anexar append lap dentro de las prensas redondas, voy a pasar por el centro Entonces duplico esta sección y esta vez voy a anexar índice de color Voy a exceso de índice de color dos, que representan de color rojo. Esta vez, voy a usar nuestros puntos. Además, voy a cambiar el nombre del índice. Sin usar índice verde, voy a usar índice rojo, índice rojo. De nuevo, voy a replicar esta sección y necesitamos manejar el color amarillo Aquí voy a pasar el índice de color tres, y voy a sustituir los puntos por puntos amarillos. Además, necesitamos reemplazar el índice, el índice amarillo. Es así como podemos dibujar formas en diferentes colores usando estas condiciones. Y ahora necesitamos manejar este escenario donde no se detecta nada. Quiero decir, ahora necesitamos anexar el siguiente dk cuando no se detecte nada para evitar que falte la Tierra Aquí voy a la condición de tipo. Se. El incente la condición del's Aquí tenemos que manejar cuando la aplicación detacs que el usuario ha dejado de dibujar, entonces es necesario prepararse para la siguiente fila Crear un nuevo ****. Para crear un nuevo mazo también necesitamos incrementar el índice azul Uno por uno, voy a crear una nueva baraja para cada color. Como voy a incrementar los índices. Dentro de la condición's, primero, voy a manejar el color azul. Algunos puntos tipo B entonces voy a usar append method dot append, y voy a anexar una nueva excavación Después dentro del latón redondo, soy tipo dig. Y dentro de los tirantes redondos, también, tenemos que decir la longitud máxima, longitud máxima aquí voy a decir longitud máxima 512, y también necesitamos incrementar el índice. Entonces voy a escribir índice azul más igual a, y cada vez voy a incrementar con uno voluntad uno La forma, a la misma manera, necesitamos manejar otros colores. Esto es para puntos G, colores verdes, y aquí voy a sustituir el nombre del índice, índice verde. la misma manera, voy a manejar el índice rojo, puntos R. También voy a sustituir el índice, índice R. A continuación, voy a manejar el índice amarillo. Hago esta sección y reemplazo rpoint puntos amarillos y en un nuevo de, voy a actualizar Voy a incrementar el índice amarillo, índice amarillo. Básicamente en esa sección, maneja los botones de lamer. Aquí dibujamos en Lienzo. Primero, manejamos los botones de lamer, luego dibujamos en Lienzo. Entonces ahí manejamos este escenario donde nada está dibujando, no se detecta nada. Y para manejarlo, creamos un nuevo mazo para cada color un incremento nuevo índice para cada trazo de color Entonces esto es todo para este tutorial. En la siguiente parte de este tutorial, vamos a dibujar líneas para todos los colores en el lienzo y el marco. Entonces esto es todo para este tutorial. Gracias por ver este video Sduned para nuestro próximo tutorial 10. Dibuja líneas para el color del trazo: Me alegro de verles chicos. Una vez más, estoy de vuelta con otro video relacionado con este proyecto. Y en este video, vamos a dibujar líneas para todos los colores del lienzo y el marco y el fotograma de luz. Al principio, voy a crear una lista, y nuestro nombre de variable de lista es puntos puntos, igual a, y dentro del cuadrado dice, voy a pasar los puntos. Y uno por uno, voy a poner estos puntos en esta lista. Primero, voy a pasar puntos B, puntos azules. Entonces voy a pasar puntos G, que son puntos verdes. A continuación, voy a pasar R puntos, y por fin, voy a pasar Y puntos, bucle. Estos son todos diferentes menos dentro de esta lista de puntos y todas las coordenadas de menor retención agrupadas por trazo. Ahora necesitamos ejecutar un bucle para iterar todos los puntos uno por uno Para eso, voy a correr un bucle de cuatro. Aquí para escribir para I in, y voy a usar la función de rango. Rango. Ahí dentro de la función de rango, voy a usar en función. Línea. Dentro del proceso redondo, voy a pasar puntos. Entonces dentro de este bucle de otoño, básicamente este cubo itera sobre el índice de puntos que representan diferentes colores, como el azul, el verde, el rojo y el amarillo Y ahora dentro de este bucle de cuatro, necesitamos iterar trazo desde estos puntos Para eso, de nuevo, voy a correr otro loop de otoño para J en rango. Dentro de la función de rango, herramuty link. Después dentro de los versos redondos, soy puntos de empate. Y desde square versus, voy a pasar yo entonces dentro de este bucle de cuatro, ahora dentro de este bucle de cuatro, necesitamos iterar a través los puntos en el trazo actual Para eso, voy a escribir otros cuatro bucles para K en rango dentro del receso redondo. Al principio, voy a pasar el número de índice. Como primer parámetro, voy a pasar uno. Entonces y para acceder al trazo actual, herem marea en función A N y dentro de la ronda de latón, voy a exceso de puntos Dentro del latón cuadrado, primero, voy a pasar I. Luego voy a pasar J. Luego dentro de este bucle de otoño, pero antes déjame explicarte este bucle de cuatro Aquí, K empieza con uno porque el código contiene cada punto al punto anterior. Si K arranca en cero, no habría punto previo. Entonces dentro de este bucle de cuatro, necesitamos verificar una condición. Si el punto actual o el punto anterior no es ninguno, entonces necesitamos continuar con este proceso. Para eso, herem tipo T señala dentro de la plaza versus o punto actual I luego dentro de la base cuadrada, J, y otra vez, dentro de la plaza sis, un uno a es K menos uno es monja herro uso u operador, y nuestro punto anterior es ninguno, así tipo héroe puntos dentro la plaza sis I luego dentro de la plaza sis J, y por fin, dentro de la plaza sis voy a pasar versus o punto actual I luego dentro de la base cuadrada, J, y otra vez, dentro de la plaza sis, un uno a es K menos uno es monja herro uso u operador, y nuestro punto anterior es ninguno, así tipo héroe puntos dentro de la plaza sis I luego dentro de la plaza sis J, y por fin, dentro de la plaza sis voy a pasar K es monja entonces dentro de esta condición IP, voy a escribir continue. Entonces voy a continuar con este bucle. Es malo que se encuentre a Pnne. Paso a la siguiente iteración. Esto evita errores y asegura que el programa no intente trazar una línea que involucre puntos no válidos. Entonces voy a trazar una línea en un fotograma de video en vivo. Para eso, vamos a utilizar el método de línea de OpenCV. Aquí voy a escribir cv dos método de línea de puntos. Línea. Dentro de las rotondas, primero, tenemos que pasar la imagen fuente en que imagen quiero dibujar la línea y voy a pasar el marco de la imagen del marco Porque vamos a trazar la línea en un video en vivo. C, entonces tenemos que pasar los puntos de partida para los puntos de partida, voy a usar este punto. Entonces tenemos que pasar los puntos finales y para los endpoints, voy a pasar este Copia los valores de punto y lo voy a poner aquí. Por fin, bueno para pasar el color, qué color vamos a usar, y necesitamos agarrar el valor del color de acuerdo al número de índice. Tipo de dobladillo, variable colores, colores, y dentro del cuadrado versus, voy a pasar I, la iteración, y luego para pasar el grosor por grosor, voy a pasar dos, dos píxeles de espesor la misma manera, vamos a trazar línea en la ventana de pintura. Duplico esta línea y voy a reemplazar el nombre de la ventana, el nombre de origen, ventana de pintura, esta. Voy a fijar esta. Ahora ya casi terminamos. Ahora necesitamos mostrar al Wingo usando las funciones de Imago. Entonces aquí, voy a escribir cv dos. Tenemos que moverlo dentro la etiqueta de sangría CV dos puntos ImSoma iMso al principio, quiero mostrar Y primero proporcionar un nombre de ventana para este marco, que es la vida. Dibujo en vivo. Entonces tenemos que pasar el nombre del marco. Qué marco quiero mostrar nuestro nombre de ventana es frame. A continuación, voy a duplicar esta línea y esta vez, quiero mostrar la ventana de pintura. Aquí voy a escribir pintura. También voy a cambiar el nombre de la variable. Voy a sustituir marco con ventana de pintura, esta. Entonces otra vez, voy a duplicar esta línea y esta vez voy a mostrar la ventana de máscara. Aquí voy a escribir máscaras voy a reemplazar la máscara de nombre de ventana. Y voy a poner este archivo. Oye, antes de ejecutar este código en mi terminal, quiero decir, voy a usar esta barra de color pastel como rastreador. Como puedes ver, es una barra de color azul, y como sabes, por defecto, vamos a seleccionar el color azul. Entonces va a rastrear este puntero. Ahora, saltemos a la pantalla de la computadora. Así que de nuevo, estoy de vuelta a mi editor de código de estudio de resultados, y voy a ejecutar este código en mi terminal, así que voy a presionar el botón Ejecutar. Después de presionar el botón Ejecutar, como puedes ver, al principio, muestra la ventana del detector de color. Desde aquí, usando este control deslizante, puedes apuntar a cualquier color. Como sabéis, por defecto, apuntamos al color azul y tenemos que esperar algún tiempo para iniciar la webcam. Ahora puedes ver aquí abrió un total de tres ventanas, ventana viva, ventana de pintura y ventana de máscara. Voy a alinear estas ventanas una al lado de la otra. Ahora voy a empezar a dibujar. Aquí ya agarro un puntero marcador azul y lo escondo entre mi dedo. Ahora voy a empezar a dibujar usándolo. Como puedes ver nuestra cámara rastrea nuestro marcador y dibuja una línea. Empiezo a dibujar con color azul, y puedes ver el dibujo en nuestra ventana de dibujo de luz, también puedes ver el mismo dibujo en nuestra ventana de pintura blanca en nuestra ventana de máscara, puedes ver la máscara binaria en nuestra ventana de máscara, puedes notar que solo rastrea el marcador de color azul. No rastrea nada más de este metraje, y ahora voy a ocultar este marcador y empezar a dibujar desde el punto diferente. Y voy a empezar a dibujar desde esa posición. Se puede notar, de nuevo, que empieza dibujando el camino desde esta posición. De esa manera, se puede dibujar línea diferente en una posición diferente. Ahora, déjame mostrarte ¿cómo podemos cambiar de color? ¿Cómo podemos cambiar el color de esta línea de trazo? Para eso, necesitamos mover nuestro puntero al botón de color. Al principio, voy a mover este puntero en el botón Color Verde y ahora selecciona el color verde. Si empiezo a dibujar, ahora puedes verlo dibujar la línea con colores verdes. la misma manera, si quieres cambiar el color, necesitas poner tu marcador al siguiente color. Por ahora, voy a seleccionar color rojo. Ahora va a empezar a dibujar línea de trazo con color rojo. De la misma manera, se puede seleccionar el color amarillo. Solo necesitas acumular tu puntero sobre el botón ylow Entonces puedes comenzar a dibujar usando la línea coolor amarilla. Así es como puedes cambiar de color uno por uno. Y si quieres despejar esta ventana, necesitas mover tu marcador por encima del botón del auto. Como se puede ver después de mover este marcador por encima del botón de borrar, se despeja la ventana. Entonces otra vez, puedes empezar a dibujar en este lienzo. Así que construimos con éxito nuestro proyecto de dibujo. Y si quieres cerrar este proyecto, necesitas elogiar a la pequeña Q. Se va a cerrar las ventanas.