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.