Python OpenCV: domina la visión por computadora con 10 proyectos prácticos | Jayanta Sarkar | Skillshare
Buscar

Velocidad de reproducción


1.0x


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

Python OpenCV: domina la visión por computadora con 10 proyectos prácticos

teacher avatar Jayanta Sarkar, full stack web developer and Python prog

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 a la clase

      2:37

    • 2.

      Instalar openCV en nuestra máquina local

      3:07

    • 3.

      Lectura de imágenes y videos con openCV

      13:24

    • 4.

      Cambiar el tamaño y la escala de fotogramas

      8:58

    • 5.

      Dibuja diferentes formas y pon texto en la imagen

      18:55

    • 6.

      Función importante en el CV abierto

      13:35

    • 7.

      Traducción de imágenes de CV en Open Part 1

      6:36

    • 8.

      Rotación de imágenes de CV abierta, parte2

      5:34

    • 9.

      Recorte para traducción de imágenes en Cv en Open (parte 3)

      6:22

    • 10.

      Detección de contornos Opencv

      8:51

    • 11.

      Detección de contornos en Opencv parte 2

      7:49

    • 12.

      Espacios de color

      12:23

    • 13.

      Canales de color

      7:09

    • 14.

      Desenfocar

      11:23

    • 15.

      Operaciones en BITWISE

      15:11

    • 16.

      Enmascarar

      7:49

    • 17.

      Histograma de imágenes en escala de grises opencv

      11:51

    • 18.

      Histograma de imagen en color

      6:37

    • 19.

      Limites en openCV

      11:21

    • 20.

      Visualización de las coordenadas de los puntos en los que se hace clic en la imagen con Python OpenCV

      12:57

    • 21.

      Detección de puntos blancos y negros con OpenCV

      16:02

    • 22.

      Dibuja formas rectangulares y extrae objetos

      26:35

    • 23.

      Detección y extracción de texto con OpenCV y OCR

      13:44

    • 24.

      Camiseta invisible con OpenCV

      29:22

    • 25.

      Resta de fondo: OpenCV

      15:09

    • 26.

      Detección de rostros con Python y OpenCV con cámara web

      15:19

    • 27.

      Detecta objetos de color similar en Python con OpenCV

      20:35

    • 28.

      Importa módulos y configura el objeto mediapipe

      6:44

    • 29.

      Crea la función de contador de dedos

      11:03

    • 30.

      Crea el bucle principal y ejecuta el proyecto

      10:36

  • --
  • 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.

19

Estudiantes

--

Proyecto

Acerca de esta clase

Descripción del curso:

¡Libera el poder de la visión por computadora con OpenCV en Python! Este curso completo está diseñado para guiar a los principiantes y a los estudiantes intermedios a través de los fundamentos de OpenCV, una biblioteca estándar en la industria para la visión por computadora y el procesamiento de imágenes. Con 10 proyectos prácticos y emocionantes, aprenderás a analizar, manipular y mejorar imágenes y videos, transformando conceptos abstractos en aplicaciones del mundo real.

Desde el reconocimiento de imágenes hasta el filtrado avanzado, el seguimiento de objetos e incluso la manipulación de video en vivo, cada módulo está repleto de proyectos que refuerzan el aprendizaje y la comprensión práctica. A través de tutoriales paso a paso y ejercicios atractivos, adquirirás las habilidades necesarias para abordar una amplia gama de desafíos de visión por computadora con confianza.

Lo que aprenderás:

  • Fundamentos del procesamiento de imágenes y videos: comprende los conceptos y métodos fundamentales para la manipulación de imágenes.
  • Funciones básicas de OpenCV: domina las funciones esenciales de OpenCV para transformar imágenes y videos.
  • Aplicaciones de visión por computadora: explora aplicaciones del mundo real, como la detección de bordes, el reconocimiento de objetos y el seguimiento de movimiento.
  • 10 proyectos prácticos: crea y completa proyectos únicos que hagan que el aprendizaje sea práctico y divertido.
  • Procesamiento de video en vivo: aprende a aplicar técnicas de OpenCV en transmisiones de video en vivo para crear aplicaciones interactivas.

Al final de este curso, tendrás la confianza y las habilidades necesarias para crear tus propios proyectos de visión por computadora y aplicar los conocimientos de OpenCV en áreas como la automatización, la IA y la realidad aumentada.

Tanto si eres programador, ingeniero o entusiasta, este curso te llevará desde los fundamentos de Python OpenCV hasta las técnicas de visión avanzadas. ¡Únete a nosotros en este viaje para dominar la visión por computadora con Python y OpenCV!

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 a la clase: Hola. Bienvenido a nuestra clase Python Open City Mastering Computer Vision Mi nombre es Juan el Atajo. Soy desarrollador web FOSTEC, programador Python en Online Instructor, y voy a instruirte a lo largo de toda la clase Estoy encantado de ser su guía en este viaje al mundo de la visión por computadora y el procesamiento de imágenes En este curso, profundiremos en el Open C, biblioteca estándar de la industria que trae la magia de la visión por computadora a Python. Al final de este curso, no solo entenderás lo fundamental de OpenCV, sino que también obtendrás habilidad práctica que podrás aplicar de inmediato gracias a nuestro proyecto de diez manos en Ahora, veamos qué es exactamente lo que vamos a aprender de aquí. Empezaremos con lo básico. Primero, vamos a aprender cómo podemos instalar OpenCV en nuestra máquina local Entonces vamos a leer imagen, redimensionar y reescalar fotogramas. Vamos a dibujar diferente forma y poner texto sobre imagen. Entonces vamos a aprender funciones importantes. A continuación, vamos a aprender transición, rotación, traslación, detección de conductos. Espacios de color, canales de color, borroso, operación Btis, enmascaramiento, histograma de escala de grises, histograma imagen en color Después de conocer todo el concepto básico, vamos a saltar a la sección de proyectos. Vamos a realizar múltiples proyectos del mundo real, como detección y extracción de texto usando OpenCV y dibujar forma de rectángulo y extraer objeto, punto blanco de punto negro Tis pin coordenadas cuando hacemos clic en la imagen. Entonces vamos a saltar a la parte más importante, que es el proyecto de camiseta invisible, Substricción de fondo, detección de fase usando Además, vamos a contactar con otro proyecto detectando objetos de color similar en Python. Y este no es el final. De vez en cuando, vamos a actualizar esta clase, y vamos a agregar un nuevo proyecto en esta clase, como detección de dedos, detección de ojos, control de brillo usando los dedos y muchos más. Cada semana, voy a agregar un nuevo concepto en él. Al final de esta clase, tendrás la habilidad para construir tus propios proyectos de visión por computador y automatizar tu tarea. Después de este curso, puedes explorar áreas como la IA y la realidad del argumento. Entonces, ¿a qué esperas? Empecemos juntos. 2. Instalación de openCV en nuestra máquina local: Oye, este es el primer tutorial relacionado con el curso Python OpenCV Infierno. Mi nombre es John Shoker. Soy anfitrión de un desarrollador web e instruir en línea. Vamos a comenzar tutorial instalando OpenCV en nuestra computadora local Entonces saltemos a la pantalla de la computadora. Entonces como pueden ver, estamos en la pantalla de mi computadora, y abro Windows Power Shel Básicamente, OpenCV es una biblioteca de visión por computador. Está disponible en Python, C plus plus y lenguaje Java. Una visión por computador es una aplicación de deep learn. Y se centra principalmente en los archivos multimedia. Podrían ser imágenes, de lo contrario, archivos de video. Se supone que ya estás instalado Python en tu computadora. Y para verificar, está instalado en tu computadora local o no, solo escribe Python space Virgin. Después pulsa Enter. Después de hit Enter ASIMCC devuelve Python versión 3.11 Solo asegúrate de tener la última versión de Python, de lo contrario, mayor a 3.7. Entonces espero que ya estés instalado Python en tu computadora. Pero ahora voy a instalar los paquetes que se requieren para este curso. Entonces voy a instalar nuestro paquete principal OpenCV para instalar OpenCV en su sistema, solo para P, instale OpenCV Ctrip. Dash Python. A veces la gente te puede decir que solo tienes que descargar OpenCV dash Python Básicamente, Opens dash Python es el paquete principal. Es el módulo principal, pero Opensi Ctrip contenía módulo principal con el que contiene módulos de contribución, cual es proporcionado por la comunidad Entonces voy a golpear Enter y a la espera de la descarga. Como puede ver, requisito ya satisfecho. Ya descargo este módulo, pero necesitas completar tu proceso de descarga. Con eso, también, voy a actualizar mi versión P. Entonces voy a copiar este comando y pegarlo aquí. Entonces voy a darle a Enter. Va a actualizar mi Pin. Por lo que actualizo con éxito mi versión P. Pero si te das cuenta, puedes ver, cuando intento descargar OpenCV, también descarga Numpie Numbi es una especie de empaque de cálculo científico Python. Se utiliza extensamente matriz, manipulación, etcétera. A lo mejor necesitamos usar Numpy en algunos de este tutorial, pero no te preocupes por ello porque es simple y relativamente fácil de comenzar Entonces esto es todo para este tutorial. En este tutorial, solo te muestro cómo podemos descargar Open C. En el siguiente tutorial, vamos a aprender cómo podemos leer imágenes y videos usando OpenC Así que gracias por ver este video, estad atentos para este tutorial. 3. Lectura de imágenes y videos con openCV: Oigan, todo el mundo. Bienvenido de nuevo a otro campo. En este video, vamos a aprender cómo podemos leer imágenes y videos usando Python Open Cit. Así que vamos a saltar al editor de código isa Studio. Como pueden ver, aquí abro mi visa Editor de código de estudio. Y en la página web, se puede ver que este es mi ding de trabajo actual. Al principio, en mi directorio de trabajo actual, voy a crear un Python five, y lo voy a nombrar main dot py main dot py. En la primera mitad del video, vamos a hablar de cómo podemos leer imágenes. Y a continuación vamos a hablar de cómo podemos leer videos. Entonces al principio en nuestro archivo Python, necesitamos importar OpenCV, así que escribe, importa CV dos como C. Y para leer una imagen en OpenCV, necesitamos usar meth imaged necesitamos escribir cd Luego dentro de las rondas dentro de la cita, necesitamos proporcionar la ruta del archivo. Como puedes ver en mi directorio de trabajo, hay otra carpeta llamada images. Y si lo abro, aquí se puede ver, tenemos que tocar dos imagen, cat one dot JPG cat dot JPG. Entonces al principio, voy a leer cat dot JPG. Entonces dentro de la cita, primero, voy a etiquetar el nombre de la carpeta Images. Imágenes slash voy a apuntar a la imagen, cat dot JPG Además, quiero capturar esta imagen en una variable, y nuestra aria es ING. ING igual a la función raíz de imagen de punto Cv. Ahora, una vez que leemos esta imagen, necesitamos mostrar esta imagen. Para mostrar esta imagen, necesitamos usar un método, que es image show, algún tipo cv dot image show. EN show. A continuación, introducir las prensas redondas, es necesario pasar el total de dos parámetros Este método va a mostrar la imagen en una nueva ventana. Entonces primero, aquí necesitamos proporcionar el nombre de la nueva ventana, y el Hemotipo puede A continuación, tenemos que pasar la matriz, la imagen que leemos. Entonces voy a escribir IMG, esta variable, y voy a establecer este lugar Ahora quiero ejecutar una función de enlace de teclado antes de ejecutar este alcance porque aquí necesitamos una d específica así que voy a llamar a otro método, que se conoce como tecla húmeda. Tecla mojada Swing dot. Éste. Y en cambio las prensas redondas, voy a pasar Z. es una función de encuadernación de teclado Es esperar específico. Hasta que presione cualquier tecla de mil teclado. Si paso cero, va a esperar un tiempo infinito. Básicamente, quiero decir hasta que presione alguna tecla de nuestro teclado, no va a quitar la imagen. Ejecutemos el código en nuestra terminal. Entonces voy a configurar el archivo y después de configurar el archivo, voy a presionar el botón de correr. Después de pulsar el botón Ejecutar, como puedes ver, devolverá la imagen. Aquí abre la ventana y muestra la imagen en esta ventana. Y si quieres matar esta ventana, puedes alabar cualquier tecla desde tu teclado. De lo contrario, puede hacer clic en este icono de cerrar. Entonces voy a alabar la llave espacial. Entonces como pueden ver, mata la ventana. Esto es genial. Ahora, la imagen que abro desde mi directorio de trabajo actual, es una imagen de pequeña resolución. Déjame mostrarte. Como puedes ver en mi directorio de trabajo actual, hay dos imágenes. Consigue un punto JPG y Go dot JPG. Ambas imágenes son iguales, pero su resolución es diferente. Si te muestro G dot JPG, ahora puedes ver su dimensión es 604 13. Pero si obero mi cursor, obtengo un punto JPG, ahora puedes ver que su dimensión es mucho más grande que la anterior Es de 5,026 y 3,458. Ahora voy a abrir la misma imagen de gato, pero esta vez, voy a abrir la versión más grande. Entonces vayamos al código de Salt Studio. Voy a cambiar el nombre de la imagen. Voy a hacer que sea cat one dot GPG, y voy a pisar este archivo, y voy a ejecutar este código Y voy a presionar el botón Ejecutar. Después de presionar el botón de correr, como puedes ver, la imagen va muy fuera de la pantalla. Entonces voy a cerrar esta imagen presionando cualquier tecla de mi teclado. Voy a presionar B. Después de presionar B, mata la ventana. Esta imagen es mucho más grande que la resolución de mi pantalla. Actualmente, obviamente no tenemos ninguna técnica de redimensionamiento en compilación que funcione de acuerdo con la resolución de la computadora, pero podemos cambiar el tamaño de la imagen En el siguiente tutorial, voy a hablar de ello. Entonces si tienes imagen grande, posiblemente, puede salir de la pantalla. En este tutorial, solo concéntrate en leer imágenes y videos. Entonces esto es para leer imágenes. Ahora, centrémonos en cómo podemos leer videos. Pero antes voy a seleccionar todo el código y lo copio. Entonces voy a crear otra multa en mi directorio de trabajo, que es principal dos punto Pino. Y voy a pegar todo el código de mi multa anterior. Esta vez, vamos a leer el video cinco. Entonces, al principio, voy a comentar estas líneas. No lo necesito por ahora. Ahora bien, he aquí por qué te muestro mi directorio de trabajo actual, hay otra carpeta llamada Videos. Si lo abro, hay un video, video uno.nb4. Y para leer un video, aquí voy a crear una captura variable. Igual a aquí voy a usar el método de captura de video. Cv punto, video catureT uno. Y rondas. Este método o bien toma valor de Itiser como uno, dos, tres De lo contrario, podemos pasar una ruta de archivo. Ahora podrías una porción por qué necesitamos pasar en valor dieser. Porque usando valor entero, puedes conectarte con tu webcam. Si tienes una webcam, puedes pasar cero. La mayoría de los casos te hacen referencia webkem por entero cero. Si tienes varios uno, entonces puedes cambiar el número. Pero antes, al principio, voy a leer el video existente desde nuestra ruta de archivo. Dije la cita única. Primero, necesitamos proporcionar el nombre de la carpeta, algunos tipos de videos luego dentro de esta carpeta de videos, tenemos este video uno. Así Intro seleccionar video uno.b4. Recuerda, leer videos es diferente a leer imagen. Necesitamos leer videos cuadro por cuadro. Por eso necesitamos usar Hilo. Entonces aquí, voy a usar Hilo. Salvaje, cierto. Luego dentro del bucle While es crew Comma, frame igual a capturar la función de lectura de punto Función de lectura de puntos de captura. Esta función de lectura de punto de captura va a leer este video fotograma a fotograma. Se lee el marco y este valor wollen va a decir que es exitoso trabajas o no Para mostrar el video, en realidad mostramos los fotogramas individuales. Entonces, después de leer cada fotograma de este video, necesitamos mostrar los fotogramas. Para mostrar estos marcos, vamos a utilizar la función de visualización de imágenes . Así que escriba Cv dot image show es en las prensas redondas, como ustedes saben, primero, necesitamos pasar un nombre de ventana, que es video. Entonces voy a pasar los fotogramas reales. Entonces voy a pasar este marco variable. Así que copia el nombre de la variable, y voy a pegarlo aquí. Por ahora, no necesito esta función de tecla húmeda, así que la voy a quitar. Sí, necesitamos llave húmeda, pero la vamos a usar con condición p. Entonces su tipo, I v dot wet key, dentro de la roundresss sostuvo pase gemelo y cero X F igual, igual a b, dentro de la ronda ressSOD de B, entonces te va a Entonces dentro de la condición IP, quiero romper este bucle VI. Una vez que hayamos hecho fuera del bucle I, necesitamos liberar el puntero de captura. Entonces necesitamos usar funciones de liberación en el tipo capturado Dot, release function, release. Además, tenemos que destruir todas las ventanas. Ata, CV, punteó, destruye todas las ventanas. Éste. Esto es. Ahora recapitular el puerto. La variable de captura es instancia de brillo de captura de video. Entonces en cambio el un bucle, leemos el video fotograma a fotograma. Luego mostramos cada fotograma usando el método IMS. Si CVD 820 y cero xFF igual a org, D, entonces rompa la carga Entonces si presiono B, entonces va a dejar de mostrar fotogramas de video. Básicamente quiero decir, si presiono D, entonces va a romper la carga. Después soltamos el dispositivo de captura y destruimos todas las ventanas. Ahora, fijemos el archivo y ejecutemos el código. Después de ejecutar este código, como pueden ver, reproduce nuestro video. Y si alabo a D , cierra nuestra ventana. Ahora, si quieres abrir tu webcam, sí, puedes. Apenas comience esta línea y comente sobre la anterior y cambie el video de captura de video. Quiero usar cero porque solo tengo una cámara conectada con mi computadora. Después paso este archivo, si ejecuto este código y espero algunos segins Ahora puedes capturar directamente tu video usando OpenCV y puedes leerlo apagado Entonces, si quieres cerrar esta ventana, solo necesitas presionar el comando B. Si presionas cualquier otra tecla, no va a cerrar tu ventana. En nuestra condición, aquí decimos, D, ¿cuál va a romper el bucle? Ahora, déjame mostrarte algo importante. Entonces primero, voy a matar mi terminal, después voy a comentar esta línea y descomentar esta Y voy a sub este expediente. Después de configurar este archivo, voy a volver a ejecutar este video. Esta vez, puedes notar después de completar el video, va a mostrar un error en nuestra terminal. Entonces después de 10 segundos, después de completar el video, como puedes ver en mi terminal, hay un héroe. Es mezquino cuando nuestro video termine, lo contrario se detuvo, entonces va a mostrar al héroe. Si no hay fotograma en este video, puede devolver héroe. Específicamente, devuelve este error menos 215 sensación de aserción. Es malo, obviamente, no pudo encontrar ningún archivo multimedia en esa ubicación. Va a devolver el mismo tipo de error con imagen también. Déjame mostrarte. Entonces voy a matar mi terminal y volver al archivo principal punto Pi. Si cambio la ruta del archivo, si lo hago gato tres, como saben, no hay archivo disponible en nuestro directorio cd tres. Si configuro este archivo y ejecuto este comando, como pueden ver en mi terminal, se sienta en el mismo error, negativo 215 assertion fade Es exactamente mostrar el mismo error que como video. No pudo encontrar ningún marco. Entonces eso es mucho para este video. En este tutorial, aprendemos cómo podemos leer imagen. También aprendemos cómo podemos leer videos. Con eso, también aprendemos cómo podemos leer videos a través de nuestra webcam. Entonces esto es todo para este tutorial. En el siguiente tutorial, vamos a aprender cómo podemos redimensionar y reescalar cualquier Podría ser imagen, de lo contrario video. Así que gracias por ver este video Stune para el siguiente tutorial 4. Redimensionamiento y reescalado de marcos: Oigan, chicos, me alegro de volver a verles. Una vez más, estoy de vuelta con otro tutorial relacionado con ct abierto. Y en este tutorial, vamos a aprender a redimensionar y reescalar Entonces como puedes ver, estamos saltando al usuario Editor de código de Studio. En esta sección, vamos a aprender cómo podemos redimensionar y reescalar videos e imágenes usando C. abierto Para reescalar un fotograma o imagen de video, necesitamos crear una función, y nuestro nombre de función es Entonces dentro de la ronda menos, aquí necesitamos pasar algún parámetro, frame a tamaño V y la escala escalará. Igual a aquí, necesitamos pasar valor de escala, cuánto queremos escalar. Por ahora, voy a establecer 0.75. Entonces dentro de la función rescal, voy a establecer con W igual a frame dot shape, en vez del ss cuadrado, voy a pasar uno Entonces me voy a multiplicar con escala. Y a continuación, voy a duplicar esta línea y reemplazarla con con la altura. Y dentro de la plaza versus voy a pasar cero. Marco punto forma uno, básicamente con de su imagen y marco punto forma cero especificar la altura. Y como saben, el ancho y la altura son más indiser, por lo que necesitamos convertirlo en un Voy a usar la función int. Es, y necesitamos usar redondo *** también vamos a hacer lo mismo para la altura en latón redondo. Y ahora voy a declarar una variable llamada dimensión. Dimensión igual a, y quiero crear una tupla. Entonces en cambio las rondas, voy a pasar qué coma, y nuestro siguiente valor es la altura. Y a continuación, voy a devolver la función de cambio de tamaño de punto v. Entonces voy a regresar regreso, punto Cv, redimensionar. Dentro de la prensa de carrera, primero, voy a pasar frame. A continuación, voy a pasar dimensión. Valor de intercoma igual al punto Cv Introducir área Entrar en el área. El cambio de tamaño de punto Civ es una función CI abierta. Se utiliza para cambiar el tamaño de una imagen, y el marco es nuestra imagen, lo que queremos cambiar Y dimensión especifican el nuevo tamaño para la imagen, y debe ser un tepel que va a representar altura y ancho Y este parámetro especifica el método de interpolición utilizado para cambiar el tamaño El método de interpolación determina cómo se calculan los valores de píxel cuando se cambia el tamaño de una imagen área CVI Enter es un método de interpolación específico, optimizado para reducir imágenes. Puede resultar en una mejor calidad que otros métodos al reducir el tamaño de la imagen. No te preocupes. Vamos a conocer más sobre ello más adelante. Ahora quiero leer un video cinco, así que no necesito este. Entonces para revocar este y volver a significar punto Pi cinco. De esta sección, voy a copiar esta porción. Y volvemos a reescalar punto Pi cinco, y voy a pegarlo aquí Por ahora, no necesito esta línea porque no quiero usar mi webcam. Ahora, después de leer este fotograma en nuestra VLU, quiero cambiar el tamaño del Entonces vamos a llamar a esta función. Pero antes, voy a declarar una variable, y nuestro nombre de variable es frame resize Marco bajo sco cambiar el tamaño. Igual a, voy a llamar a esta función, reescalar frame. Entonces copio el nombre de la función y lo voy a pegar aquí, luego dentro de los vestidos redondos y dentro de las prensas redondas, necesitamos pasar este marco variable. Entonces necesitamos mostrar esta variable usando el método image show. Entonces voy a duplicar esta línea. Y primero, voy a nombrar esta ventana, que es video redimensionada Y luego tenemos que pasar la variable de marco redimensionada. Entonces copio esta variable y reprimo frame con ella. Y voy a poner este archivo. Y antes de ejecutar este código, voy a quitar esta línea de dos. Ya no necesito esto. De lo contrario, puedo comentar éste. Y voy a volver a poner este archivo. Después de configurar este archivo, si ejecuto este comando, va a abrir total dos en. Primero, va a abrir la ventana original, luego va a abrir la ventana redimensionada Deja que te lo demuestre. Entonces después de establecer este archivo, si ejecuto este código en mi terminal, como pueden ver, va a abrir total dos Ventana. Esta es la ventana original con alta resolución, y esta es la ventana de escala con baja resolución. Entonces así es como funciona. Este video se redimensiona en 0.75%. Si quieres reducirlo más, solo necesitas reducir el valor. Por defecto, esta función cada vez va a reducir 0.75%. Pero si quieres pasar tu propio valor, solo necesitas pasar coma tenía y proporcionar escala de valor de escala 0.20% Y si ejecuto este código, aquí pueden ver este es nuestro tamaño original, y esta es la versión decisiva. Ahora, se ha reducido 20%. Entonces voy a alabar a D a D la ventana antes de que se le acabara el marco. Usando la misma función, puede cambiar el tamaño de la imagen Déjame mostrarte cómo podemos cambiar el tamaño de una imagen. Pero antes, voy a comentar estas líneas. Alguien usa multi lein comment para comentar todas las líneas Entonces creo una variable, y nuestro nombre de variable es redimensionado imagen Underscovimage. Resis imaged igual a aquí voy a usar la función de marco de receso Entonces voy a copiar el nombre de la función y voy a llamar a la función. En cambio el proceso redondo, necesitamos proporcionar la imagen que quiero mostrar. Entonces voy a comentar de nuevo estas líneas, y voy a pasar esta variable en esta función. Imagen. Y luego voy a usar la función Soy Show. Copio esta línea y la pego aquí. Primero, voy a cambiar el nombre de la ventana, que es redimensionar asco C. Y luego voy a llamar a cv dot WetKeyFunction Cv punto weit key. Dentro del Rundress, voy a pasar cero. Eso es. Antes de configurar este archivo, y ejecutar el código, no me equivoqué. Aquí, tenemos que pasar esta variable. Imagen redimensionada Y nuevamente, voy a configurar este archivo y ejecutar este código. Hasta ejecutar este código, como puedes ver, este es el tamaño original de esta imagen, y esta es la versión a escala de esta imagen. Reducimos la ventana de imagen con éxito. Entonces, usando la misma función, podemos escalar imágenes. También podemos escalar videos. Recuerda, este método es trabajo para imágenes, video y videos ligeros. Entonces usando una función puedes hacer todos los tics. Entonces esto es todo para este tutorial. En el siguiente tutorial, vamos a aprender cómo podemos dibujar formas usando OpenCL 5. Dibuja diferentes formas y coloca texto en la imagen: Hola a todos, y bienvenidos de nuevo a otra identificación. En este tutorial, voy a hablar sobre ¿cómo podemos dibujar y escribir imágenes? Así que vamos a saltar a la es un editor de código de estudio. Entonces al principio, voy a crear un archivo Python. Entonces aquí voy a escribir, dibujar punto py. Y luego voy a importar nuestras bibliotecas. Al principio, voy a importar CV Import, CV dos como CV. Entonces voy a importar NumPI como NP. Import, Num Pi, como N P. También puedes ver, ya puse esa imagen en mi actual wing dy cat JPG. Entonces voy a leer esta imagen usando InrdFunction. Así que aquí escriba primero hemo crativa variable IMG igual a, voy a usar C punto IARad. Después el latón redondo, yo en la cotización. Tenemos que proporcionar la ruta del archivo, CAT dos puntos JPG. Entonces necesitamos mostrar esta imagen usando la función I show. Entonces voy a escribir cv dot image show IM, entonces es la roundRef necesitamos asignarle un nombre a esta ventana, que es C. Y a continuación, voy a pasar la variable, que es ING image Y entonces necesitamos usar Wet kwatho v dot wet key, wet key, y dentro de las prensas redondas, voy a pasar Z. voy a Hay dos formas de dibujar en las imágenes. Puedes dibujar cualquier cosa en una imagen independiente como esta. Además, puedes crear una imagen en blanco. Entonces decido dónde crear una imagen en blanco. Aquí tipos en blanco, igual a, voy a usar tt ceros Entonces los metales redondos, voy a pasar la resolución 500 por 500. Además, tenemos que ponerlo en un latón redondo. Ellos voy a pasar tipo D, tipo más grande. Parámetro de tipo B, D. Es en este solo curso, voy a escribir INT ocho. Después cerrar las carreras redondas. Este es el tipo de datos de una imagen. Y si quieres ver esta imagen, solo necesitas escribir este comando. Podrán mostrar copiar este comando y hern pist y voy a sustituir al por ban Además, quiero cambiar la variable. Yo NG dos en blanco, y voy a poner este archivo. Después de establecer este archivo, voy a ejecutar el scole. Entonces voy a hacer clic en este botón Ejecutar. Después de hacer clic en este botón de ejecución, como puedes ver, ahora puedes ver, ahora tienes tendencia dos Ventana. Una ventana es imagen KAT y otra ventana es imagen en blanco. Y como pueden ver, se trata de una imagen cuadriculada, 500 por 500 píxeles Entonces, en lugar de usar KAT Image, voy a dibujar mi objeto en esta imagen en blanco. Entonces aquí, voy a comentar las líneas, estas dos líneas. De lo contrario, podemos eliminarlo. Por ahora, voy a comentar. Ahora al principio, voy a pintar esta imagen en blanco en cierto color. Entonces voy a escribir un coman pintar la imagen en cierto color Para llenar la imagen en blanco con nuevo color, aquí necesitas pasar otra. Tenemos que pasar atributo de cuatro canales de color. Vamos a utilizar a tres canales de color RGB. Ahora podemos usar valor de canal de tres colores. Entonces para colorear la imagen en blanco, primera vez voy a escribir en blanco, luego dices la ress cuadrada voy a pasar codón. Soy yo o el pixel voy a seleccionar todos los pixeles. Entonces entonces quiero llenarlo de color verde. Entonces voy a pasar 0255, 255, cero. Va a llenar esta imagen negra de color verde. Entonces tenemos que ejecutar la función de show de imagen. Así que aquí para escribir punto en mi humilde opinión el runderF para proporcionar un nombrePrimero necesitamos proporcionar un nombre para la ventana y voy a En el siguiente valor, necesitamos pasar la variable. El hace. Y voy a fijar esto. Arriba para configurar este archivo, si ejecuto este comando, lo puedes ver con una ventana de dos. Esto es ventana negra. Esta es la predeterminada , y esta es la nueva ventana con color de campo verde. Y para obtener un color diferente, solo necesitas cambiar los valores. Supongamos mano de pasar cero coma cero, sube, 255. Voy a configurar este archivo y ejecutar este código a. arriba para ejecutar este código, ahora puedes ver un resultado diferente. Esta vez, esta ventana se llenó de color rojo. Él utilizamos la técnica de rebanado para seleccionar todos los píxeles. No solo eso, si quieres llenar un área determinada de color, sí, puedes, necesitas proporcionar el vil punto de partida y punto final Supongamos que a nuestra primera vista voy a pasar 200 por 300. Al siguiente, voy a pasar 300 van 400. Si configuro este archivo y ejecuto este código, ahora lo puedes ver en una caja cuadrada roja en esa posición. Entonces así es como podemos llenar recolored. Lo siguiente que voy a hacer, voy a hacer para dibujar un rectángulo. Entonces primero, voy a quitar ambas líneas porque no la necesito, y luego voy a escribir un comando de un solo tramo. Entonces estoy tipo hashtag y paso dibujar un rectángulo. Para dibujar un rectángulo, vamos a utilizar un método, que es cv dot Rig maraña. Éste. Y para dibujar primero el rectángulo, necesitamos pasar una imagen. Entonces dentro del receso redondo, voy a pasar negro. Y también la función tomar argumento múltiple. Imagen 0.1 0.2, color, grosor, y si quieres proporcionar tipo de línea, sí, puedes. Entonces para el punto de partida, dentro de la ress redonda voy a pasar cero coma cero, y para el punto final, voy a pasar 250 pixel por 50 pixel Entonces tenemos que pasar color. Y por el valor de color, voy a pasar 02550 Y aquí, también, necesitamos pasar espesor, tipo Sol, espesor, y voy a pasar espesor Vo dos. Y cuando esté hecho, también necesitamos mostrar esta imagen. Entonces voy a escribir cv dot image show IM, así dentro de las rotondas primero voy a pasar un nombre de ventana Entonces voy a escribir rectángulo. Coma. El pase la imagen. En qué imagen, quiero aplicar el rectángulo, que es negro. Éste. Voy a establecer este archivo. Después de configurar este archivo, si ejecuto este código, se puede ver el resultado. Ahora puedes ver esa ventana en esta ventana, dibuja rectángulo. Pero te das cuenta de que Harry crea un total de tres ventanas porque llamamos a la función de show de imágenes tres veces. Entonces, por ahora, voy a comentarlo. Entonces por ahora, voy a comentar esta línea. Éste, también, voy a comentar éste. No lo necesito. Además, no me pregunto por la caja cuadrada, así que la comento. Entonces, si vuelvo a ejecutar este código, ustedes verán el resultado. Este es el rectángulo que creamos en la imagen en blanco. Y como puedes ver, iniciamos este rectángulo desde la posición de origen. Y si cambio la posición de origen, supongamos 50 por 50. Entonces configura este archivo y vuelve a ejecutar este código , ustedes ven el resultado. Ahora empieza desde esa posición. Y si quieres aumentar la altura de este rectángulo y quieres usar lleno de la altura de la imagen, en ese caso, solo pasa. De nuevo, voy a empezar 0-0, y esta vez voy a pasar 500 por 500 Y voy a poner este archivo. Después de configurar este archivo, voy a ejecutar este código de nuevo. Ahora se puede ver que cubre todo el marco de la imagen con el rectángulo. Y si quieres usar el hub de área, solo necesitas pasar 250500 y configurar este archivo y eliminar esta ventana Después de configurar este archivo y ejecutar este código, se puede ver el resultado. Así se puede definir el tamaño y la posición de este rectángulo a partir de estos vets. Ahora decides que quieres rellenar este rectángulo con color. Para eso, solo quiero cambiar el valor del grosor. Entonces al principio, voy a borrar esta ventana, y luego voy a cambiar el grosor, grosor igual al campo v punto. Entonces después de establecer esta historia si yo un este código, se puede ver el resultado. Como pueden ver, esta vez quiero relleno de rectángulo de color verde. Ahora voy a mostrarte algo. En lugar de pasar estos valores, puedes usar shape. Se puede utilizar exactamente el área de forma sosa. Déjame mostrarte. Entonces voy a duplicar esta línea y comentar la línea anterior. Y esta vez, en vez de usar valor numérico, voy a usar shape. Entonces estoy atado el nombre de la imagen en blanco. En blanco, punto, forma. Entonces dentro de la resis cuadrada, aquí voy a pasar una. Y entonces voy a dividir este valor con dos. Entonces voy a pasar coma y estoy escribiendo forma de punto en blanco Y dentro de este cuadrado resis voy a pasar cero, y voy a dividirlo con dos. Si configuro esta diapositiva y ejecuto este código, básicamente va a crear una forma cuadrada porque como pueden ver, aquí está en altura, 500 y ancho 500. Y si dividimos 500 con dos, entonces va a devolver 250. Además, si dividimos este 500 con dos, nuevo, va a devolver 215. Entonces va a crear un cuadrado. Básicamente, vamos a reducir la forma. Entonces después de establecer este suelo si dirijo esta escuadra, aquí se puede ver que crea una forma cuadrada. Y su altura es la mitad de la altura de la imagen, y también es la mitad del ancho de la imagen. la misma manera, si lo divido con tres y luego subo este archivo y ejecuto el código, ahora se puede ver una forma diferente. Esta vez, la altura se divide con tres y la imagen amplia se divide por dos. Por eso creó una forma rectangular Básicamente, quiero mostrarte en lugar de usar el valor numérico exacto, puedes usar la forma para calcular el valor. Ahora pasando a la siguiente forma. Dibujemos un círculo. Entonces aquí voy a escribir un comentario de una sola línea, y estoy escribiendo dibujar un círculo. Y también, voy a comentar las líneas. No lo necesito. Para crear un círculo, necesitamos usar el método cv dot circle, cv dot circle. Y dentro de las rondas primero, necesitamos proporcionar la imagen que está ahí Entonces tenemos que pasar la coordenada de la posición central. Entonces dentro de las direcciones redondas, por ahora, voy a pasar a mitad de posición de esta imagen, que es 25250 Entonces en esta función, necesitas pasar la onda de radio. Y aquí voy a pasar radio valor 40. Además, necesitamos proporcionar el color. Entonces dentro del receso redondo, voy a pasar 002 55, que va a devolver color rojo, BGR Y entonces tenemos que proporcionar el grosor de esta frontera. Grosor tan apretado, necesito y voy a pasar tres píxeles o tres. Y luego tenemos que mostrar esta imagen. Entonces Hemo tipo cv dot image show Im show. Luego dentro de las prensas redondas primero queremos pasar el nombre de la ventana y el nombre de la ventana es círculo. Y la siguiente ventana que voy a pasar es el nombre de la imagen que está ahí. Y voy a poner este archivo. Después de configurar este archivo, si ejecuto este código en mi terminal, esto es lo que crea. Crea un círculo en la posición media de esta imagen. Y ahora, si quieres llenar este círculo, entonces necesitas cambiar el grosor viel Pero esta vez, voy a usar otro do. En lugar de usar el campo de puntos Cv, aquí voy a usar menos uno. Si paso este valor y configuro este archivo y vuelvo a ejecutar este código, ahora puedes ver nuestro círculo lleno de color rojo. Entonces este es otro método que puedes elmate con el color. Solo necesitas pasar el valor de grosor menos uno. Además, puedes usar cv punto llenarlo. Y ahora les voy a mostrar cómo podemos dibujar una línea independiente usando C. abierta Así que voy a cavar esta ventana, y primero, voy a comentar ambas líneas. Y aquí, voy a tratar de comentar, y voy a intentar dibujar Hey, línea. Para crear la línea, necesitamos usar el método v dot line, cv dot line. Después dentro del vestido redondo, primero, tenemos que pasar la imagen donde estamos para trazar la línea, que es negra. Y ahora tenemos que pasar a los coordinadores de esta línea. Para eso, voy a usar los mismos valores. Entonces voy a copiar esta sección y pegarla hasta eso. Simplemente voy a cambiar el valor de espesor esta línea. Aquí voy a pasar espesor valor tres. Además, voy a cambiar el color, y voy a usar el color blanco, completamente blanco. Entonces voy a pasar 255255, 255. Después de configurar este archivo, si ejecuto este código en mi terminal, se puede ver el resultado. Y antes de configurar el archivo, ejecuto este código, necesitamos mostrar esta imagen. Entonces voy a copiar esta sección, pegarla aquí y voy a rasgar el círculo con línea. Es decir, configuré este archivo y ejecuto el código. Después de ejecutar este código, se puede ver el resultado. Entonces esta es la luz que creamos usando Ceri abierto. Y si quieres cambiar la posición de origen, solo necesitas cambiar la vista. Supongamos que voy a iniciarlo a partir del 2020 do. Si configuro este archivo y elimino esta ventana y reescribo este código, puedes ver esta vez que comienza desde esa posición Entonces ya cubrimos la mayoría de estas formas. Lo último de lo que voy a hablar del texto, cómo podemos poner texto en imagen. Para eso, primero, voy a eliminar esta ventana, después voy a comentar las líneas. Además, voy a escribir un comentario. Esta vez, vamos a escribir texto sobre imagen. Es muy sencillo para el arte poner texto en la imagen. Primero, tienes que escribir cb punto, y ahí necesitas llamar al método put text. Poner texto. Después dentro de las rondasSi necesitamos seleccionar la imagen donde vamos a poner el texto En nuestro caso, en blanco. Poma, diez, necesitamos proporcionar el texto, que quieres poner en nuestra imagen En nuestro caso, hola n Entonces necesitamos definir la posición desde donde queremos comenzar o enviar un mensaje de texto. Entonces dentro de la fase redonda, voy a pasar 225 coma 225 A continuación, ahora podemos especificar fase de fuente. Así que aquí para pasar la fase de fuente y para pasar la fase de fuente, necesitamos usar algunos OpenCV en fases de fuente abajo Y vamos a usar cv dot font, underscore, aquí tenemos muchas opciones Tenemos, complejo pequeño, plano dúplex, pero vamos a usar x, este. Y al siguiente tendremos que pasar por escala. Y quiero escalar hasta 1.0. Y a continuación, necesitamos proporcionar el color de fuente y su paso cero, 255 coma cero, y también para pasar el grosor Y por grosor, voy a pasar algo. Creo que dos es suficiente, y uy, necesito dar mando entre estos vs. Eso es todo Entonces necesitamos llamar a la función show de imagen, el punto en mi humilde opinión. Luego dentro de la rotonda al principio necesitamos proporcionar un nombre de ventana que es texto Entonces tenemos que proporcionar la imagen en negro. Y voy a poner este archivo. Después de configurar este archivo, si ejecuto este código en mi terminal, se puede ver el resultado. Entonces como puedes ver, con éxito ponemos gusto a esta imagen. Entonces espero que te quede claro cómo podemos crear diferentes formas y líneas. También, podemos poner gusto a una imagen. Entonces esto es todo para este tutorial. Así que gracias por ver este video. Triste para el siguiente tutorial. 6. Función importante en el CV abierto: Oigan a todos, y bienvenidos de nuevo a otro video. En este tutorial, vamos a hablar de la función básica en el guardado abierto. Ahora, comencemos con la primera función. Usando esta función, podemos convertir imágenes en imagen en escala de grises Ya seleccionamos esta imagen y mostramos esta imagen. Es una imagen en color de canal BgirimaGet. BGir significa azul, verde y rojo. Ahora hay formas en las que podemos convertir BgiRimage a imagen Para eso, vamos a utilizar el método de color CVD. Primero voy a declarar una variable gris igual a CV, punto, CV decolor Ahí están las prensas redondas, primero, necesitamos proporcionar la imagen, qué imagen quiero convertir en escala de grises, y nuestra variable de imagen es IMG Ahora en el siguiente parámetro, necesitamos pasar el código de color, que es CV punto, color, underscoe BGR, para que es CV punto, color, underscoe BGR, A continuación, voy a mostrar esta imagen. Voy a copiar esta función image show, y la voy a pegar aquí. Entonces voy a sustituir la imagen gris gato variable gris. Quiero establecer este archivo. Up configurar este archivo, si ejecuto este código en mi terminal, se puede ver el resultado. Esta es la imagen en color y esta es la imagen en escala de grises. Es muy fácil convertir vGrimage en imagen en escala de grises. En la siguiente función, vamos a discutir cómo podemos difuminar la imagen. Aquí voy a escribir un solo comentario y voy a escribir blur. Voy a mover esta línea por encima del coma borroso. Hay técnica de desenfoque múltiple en Open CP, pero vamos a usar Gersionblur Al principio, voy a declarar un desenfoque variable. Desenfoque igual a Cv GusionBlrtie, GH Gasianblur. Luego dentro de la Runress primero solo para proporcionar la fuente de imagen que es IMG Coma, a continuación, en esta función, necesitamos proporcionar el valor del tamaño del kernel y necesitamos proporcionar el valor como tapel aquí mencionamos el tamaño de la imagen borrosa Es el round versus, voy a pasar y aquí voy a pasar kernel tamaño tres y tres. A continuación, necesitamos definir la frontera. Voy a pasar CV dot, border default. Éste. Entonces necesitamos mostrar esta imagen borrosa. Voy a usar la misma función, show de imágenes. Copo esta función y la voy a pegar aquí. Primero, voy a sustituir el nombre de la ventana, gris por desenfoque. Entonces voy a reemplazar el nombre de la variable, nuestra fuente de imagen, que es desenfoque. Voy a satisfacer. Pero antes de ejecutar este código, voy a comentar estas dos líneas. Ya no lo necesito. Entonces después de establecer este archivo, si ejecuto este código en mi terminal, se puede ver el resultado, pero no es demasiado claro. En esta imagen, agregamos poco en ella. Si lo comparamos con la imagen original, déjame mostrarte que borro este terminal y encomio esta línea Además, esta vez voy a incrementar el valor del kernel. Voy a hacer que sea de tres a 77 por siete y el conjunto este archivo y ejecutar este código en mi terminal. Ahora puedes comparar tanto la imagen. Esta es la imagen normal y esta es la imagen borrosa. Aquí agregamos Gersionblur. Usando el valor del kernel, podemos agregar más sangre en inglés. Ahora, saltemos a la siguiente función, que es la cascada de edad. Aquí voy a crear una sola línea viniendo y voy a escribir, age cascada. Usando esta función, básicamente encontramos bordes en una imagen. Hay muchos H cascada disponibles en abierto C. Pero en este tutorial, vamos a usar la cascada CIH, que es bastante famosa en el mundo de la visión por computadora Básicamente, es un proceso de múltiples pasos que implica desenfoque, gradación y muchos. Entonces comencemos. Entonces primero, voy a declarar una variable, y nuestro nombre de variable es un Canny porque vamos a usar cualquier cascada, asignado con C punteamos Cy Dentro de las rotondas al principio, necesitamos proporcionar esta imagen fuente IMG W que también necesitamos pasar al valor umbral Primer valor voy a usar 125, y el segundo valor voy a usar 175. Ahora, intentemos mostrar esta imagen en nuestra ventana. Pero antes voy a copiar esta función, Image show y comentar esta función. Entonces voy a pegarlo aquí y reemplazar BlaiKn Además, voy a reemplazar el nombre de la variable Ahora vamos a ejecutar el código en nuestra terminal. Después de ejecutar este código en nuestra terminal, es como se veía. Esto es lo que escribió. Entonces como puedes ver en este ejemplo, usando como cascada, somos capaces detak el borde de la Imagen SCAT No sólo eso, también podemos reducir los bordes si pasamos una imagen borrosa. Déjame mostrarte. Entonces esta vez, voy a pasar edad borrosa una fuente de Em, esta Voy a reemplazar ING con sangre, y voy a poner este archivo. Después del archivo satis, si ejecuto este código en mi terminal, ahora se puede ver, somos capaces de reducir el ruido Por usar Imagen borrosa, por eso redujo el ruido Pero si reducimos el valor sanguíneo, déjame mostrarte si uso sangre Gerson, tres y tres, y luego este archivo, si descodifico, ahora puedes notar el resultado Ahora se puede ver que aumenta los bordes. Aumenta el ruido de esta edad. Si cambias el valor sanguíneo de una imagen, entonces puedes detectarla con mayor claridad. En la siguiente función, vamos a discutir cómo podemos dilatar una imagen Para dilatar la imagen, vamos a utilizar estructura y elemento específicos La estructura y los elementos que vamos a utilizar en realidad son las edades. Al principio, voy a borrar mi terminal y después voy a escribir un solo comentario y escribir dilatando el maché Y luego voy a declarar una variable. El tipo dilatarlo igual a punto Cv, dilatar Entonces dentro de la RoundReesf voy a pasar la imagen CE, esta, una Para pasar la variable CE entonces necesitamos proporcionar el tamaño del kernel. Después dentro de los vestidos redondos, voy a pasar 33, y también las iteraciones Soy tipo iteración uno. Ahora vamos a mostrar esta imagen. Para eso, voy a usar la función onto y la voy a pegar aquí y reemplazar Canny por dilatarlo Copo este nombre de variable y sustituyo Canny con dilatada y también necesitamos reemplazar la Entonces voy a configurar este archivo, y después voy a configurar este archivo. Dejar proporcionar algo de espacio entre las funciones. De lo contrario, se ve muy mirado. Entonces voy a comentar esta línea. Esta vez no quiero mostrar la imagen original. Quiero mostrar solo la imagen canny y la imagen dilatada. Por favor satisfaga si ejecuto este código en mi terminal, se puede ver cerca del mismo resultado. Esta es la imagen dilatada, y esta es sólo la imagen de Ky Estos son los bordes y estos son los bordes dilatados. Si notas con cuidado, puedes ver que los bordes dilatados son mucho más gruesos que los anteriores Si aumento el valor de iteración, déjame mostrarte. Voy a cerrar las terminales. Y luego voy a aumentar la iteración Willow. Oh, voy a lograrlo. Entonces voy a hacer tres y luego establecer este archivo. Entonces voy a volver a ejecutar este código en mi terminal. Después de ejecutar este código en mi terminal, se puede ver el resultado. Los bordes dilatados son mucho más gruesos que los bordes en C. Así es como su trabajo. Ahora voy a discutir la función lst, que es como podemos redimensionar y recortar imagen Aquí, voy a escribir un comando de un solo extremo y voy a escribir resize Ya aprendimos cómo podemos cambiar el tamaño de nuestro marco en nuestros videos anteriores Esta función es muy fácil de usar. Primero, necesitamos declarar una variable y nuestro nombre de variable es redimensionar Igual a Cv punto reside. Luego dentro del receso de carrera, primero, necesitamos pasar la imagen fuente, que es ING. Aquí están los pases ING, y a continuación, tenemos que pasar la dimensión de la imagen. Voy a fijarlo 500 por 500, pero va a ignorar la proporción de aspec Voy a comentar cuál es la función anterior onto. No lo necesito por ahora y voy a configurar este archivo y también necesito llamar a la función p la imagen de redimensionamiento Para sustituir esta variable con resinas. Además, voy a cambiar el nombre de la ventana reside y establecer este archivo. Ahora vamos al código y veamos qué escribió. Después en este código, se puede ver el resultado. Descansa nuestra imagen con éxito, pero no sigue la relación de aspecto. Si lo comparo con la imagen original, déjame mostrarte. Si descommen esta línea y el conjunto de nuevo este archivo, y esta vez alrededor para pasar 400 por 400, 400 por 400 y establecer este archivo y ejecutar este código, se puede ver el resultado Esta es la imagen original, y esta es la imagen de cambio de tamaño, se puede ver la diferencia entre su relación de aspecto A continuación, te voy a mostrar cómo podemos recortar la imagen Borro las ventanas y voy a atar otro comentario, recortando. Sobre la base de su valor de píxel, podemos seleccionar la porción de una imagen. Entonces dejemos caer la imagen. Entonces al principio, voy a declarar una variable crop Tikal dos, voy a pasar la imagen fuente IMG Entonces necesitamos usar llaves cuadradas y tenemos que pasar los puntos Primero, voy a seleccionar 50 colones 200. Y el siguiente punto es de 200 a 400. Entonces voy a mostrar esta imagen usando la función de imagen. Así que copio esta función y la voy a pegar aquí y voy a sustituir la variable size Cro También cambio el nombre de la ventana crop voy a configurar este archivo. Antes de establecer este archivo, necesitamos comentar esta línea. Además, necesitamos compararlo con la imagen original. Entonces después de establecer este archivo, si ejecuto este código en mi terminal, puedes ver el resultado. Esta es la imagen original, y esta es la imagen recortada Esta es la parte de la imagen de recorte de esta imagen original. Entonces, si trato de igualar con eso, sí, podemos igualar con eso. Así fue como se desaceleró. Entonces eso es más o menos para este video. Acabamos de aprender función básica en C. abierta En el siguiente tutorial, vamos a aprender sobre la transformación de imágenes. Así que gracias por ver este video. Estén atentos para el siguiente tutorial. 7. Traducción de imágenes de Cv abierta parte1: Hola, y bienvenidos al curso Python Open City. En este set de seis, vamos a aprender la transformación básica de la imagen. Estas son técnicas comunes que te gustaría aplicar en tus imágenes, incluyendo traslación, rotación, cambio de tamaño, volteo Empecemos con la traducción. La traducción es básicamente enviar la imagen a lo largo de las xs y yx Usando la traducción, puede enviar la imagen hacia arriba, abajo, izquierda y derecha. También puedes mofarlo combinadamente. Para traducir la imagen, podemos crear una función de traducción. Declaremos una función. Para eso, voy a empatar BA y nuestro nombre de función es traducir. Traducir dentro de los Rundreses y voy a pasar a lo largo Primero, tenemos que pasar la imagen, qué imagen quiero traducir IMG Entonces voy a pasar X xs y a continuación voy a pasar YxS Entonces dentro de esta función, ahora para traducir la imagen, necesitamos una matriz de traducción. Entonces voy a declarar una variable transmt. Transmat requieren dos, y voy a usar una función llamada float float 32 desde el módulo Numbi, NP, tot, float, dot, float 32. Pero antes necesitamos importar el módulo Numpi Aquí tecleamos, importamos NumPi como NP y éste, tomamos una lista y dentro de esta lista, tenemos que pasar a otra lista. Otra lista. En nuestra primera lista, vamos a decir uno, cero coma X, y en nuestra segunda lista, voy a pasar cero, una coma Y. Una vez que creamos la traducción de la matriz, entonces necesitamos proporcionar el Voy a declarar otra variable llamada tensión. Dimensión igual a am pasar una tupla. Dentro de la ronda ress aquí paso Amul, imagen en forma de metilo Forma de imagen dentro del cuadrado ss, am tipo uno, como ustedes saben, se define la imagen con. Además, necesitamos proporcionar la altura de la imagen. Para eso, necesitamos escribir imagen, punto, forma. Dentro de los vestidos cuadrados, voy a pasar cero. Es líquido definido. Entonces podemos devolver algún tipo, devolver vt bien. F fina. Dentro de las prensas redondas, voy a pasar la imagen. Entonces voy a pasar la transmt matricial y tenemos que pasar la dimensión Ahora vamos a crear nuestra primera imagen traducida. Pero antes te voy a decir si paso menos valor X, entonces va a desplazar el lado del labio de la imagen, y si uso menos valor Y, entonces va a enviar la imagen al alza. Y si quiero mover la imagen del lado derecho, entonces tenemos que pasar el valor X positivo. Y si lo muevo a la baja, entonces necesitamos usar el valor Y positivo Ahora, vamos a crear la imagen traducida. Entonces, para escribir otra variable, traducirla. Traducirlo igual a traducir. Traducir, luego dentro del proceso redondo, necesitamos pasar la imagen. Primer valor, voy a pasar esta imagen, ING. Entonces tenemos que pasar la dirección xs y la dirección xs. Voy a pasar valor cien positivo para xs para YxS también voy a pasar cien positivos Después de satisfacer, ahora necesitamos mostrar esta imagen en nuestra Ventana. Para eso, necesitamos usar c dot Imho methor Cv dot Imo Image show Entonces en lugar de la RoundRef necesitamos proporcionar un nombre a esta ventana, que se traduce Copo este nombre de variable y lo pego aquí. A continuación, necesitamos usar la imagen. Que imagen quiero fw. Quiero doblar esta imagen traducirla. Yo llamo a esta variable y voy a establecer este archivo. Después de configurar este archivo, si ejecuto este código en mi terminal, aquí puedes ver el resultado. Esa es la diferencia entre dos rezar. Esta es nuestra imagen original, y esta es nuestra imagen traducida. Aquí enviamos la imagen, 100 puntos xs y positivos 100 puntos yxs Se envía hacia abajo en 100 píxeles y se envía directamente por 100 píxeles. Ahora, enviemos la imagen, dejada por 100 píxeles y hacia abajo por 100 píxeles. Esta vez, voy a usar valores negativos. Quiero moverlo -100 pixel dirección Xs. Quiero decir lado de labio y también, quiero moverlo a la baja Así que nuestro X va en venta. Ahora, después de establecer este archivo, ejecutemos el código en nuestra terminal. Después de ejecutar el código en nuestra terminal, podrás ver el resultado. Como puedes ver esta vez movió lado del labio de la imagen y también movió la imagen a la baja Pero si quieres mover la imagen al alza, en ese caso, solo dale para que pase menos el valor YXS -100 píxeles. Ahora vamos a ejecutar el código y ver ¿funciona correctamente o no? Arriba para ejecutar el código, se puede ver el resultado. Esta vez enviamos esta imagen, 100 puntos del lado izquierdo y 100 puntos al alza. Así es como funcionan los traductores. También en nuestra sección de inicio, mencioné el método de trabajo de valor positivo y negativo Si quieres moverlo por el lado izquierdo, entonces usa menos X, y si quieres moverlo hacia arriba, luego usa menos Y. Si quieres moverlo del lado derecho, luego usa X positivo, y si quieres moverlo a la baja, entonces usa positivo Y. Esto es para este tutorial en la siguiente parte vamos a hablar de rotación 8. Rotación de imágenes de Cv abierto parte2: Me alegro de verlos de vuelta chicos. En esta sección, vamos a aprender cómo podemos rotar la imagen usando Python OpenC Como pueden ver en mi editor de código de Visual Studio, Harry ya creó el archivo Python, rote el punto pi, y ya distendo la imagen usando la función image it Entonces la rotación es exactamente lo que parece. Rotación de una imagen en algunos ángulos. Al principio, voy a crear una función, Dave y nuestro nombre de función es rotar esta función va a tomar un total de tres argumentos, la imagen, y a continuación va a tomar ángulo, el ángulo de rotación. Además, se toma otro parámetro que es el punto de rotación, algunos t, ROT, punto, igual a monja Entonces dentro de esta función, necesitamos agarrar la altura y anchura de esta imagen. Para eso, instantáneamente las rondas amo tipo height, width igual a, voy a usar el método ING shape, Ng. Dentro del cuadrado Base Hemotipo colon dos. Me refiero a los dos primeros valores, que es la altura y. A continuación, voy a usar condición IP. Si el punto de rotación es ninguno, entonces dentro de esta condición IP, vamos a rotar la imagen alrededor del centro y para obtener el punto central, voy a escribir otro punto raíz variable para obtener el punto central, su tipo rot point igual a dentro de la rotonda, necesitamos dividir con dos Entonces escriba ancho, dividido, dividido por dos. También de la misma manera, necesitamos dividir la altura con la altura dividida por dos. Va a devolver la posición central, lo contrario las coordenadas centrales de esta imagen. Ahora necesitamos crear la matriz de rotación. Para eso, voy a empatar primero voy a declarar una matriz de rotación de hombre pudrido variable. Matriz de rotación igual a v punto obtener matriz de rotación. Matriz de rotación de puerta dos d, esta. Entonces dentro de las rotondas, aquí hay que pasar el punto de rotación, que es la posición central Voy a pasar este valor, punto de pudrición. Punto Ot. Cuando eso también necesitamos pasar el ángulo. Entonces voy a pasar vial de escala. Si quieres escalar la imagen, cuando giras la imagen, en ese caso, puedes pasar a lo contrario, contrario, puedes usar el valor de escala predeterminado , que es 1.0. Entonces hay que mencionar la dimensión como tupla. Tipo dimensión dimensión igual a es en la tupla, voy a pasar ancho y alto Ahora ya podemos devolver la imagen de rotar, smtirTurn aquí voy a llamar al método v punto, Después dentro del latón redondo, aquí primero, voy a pasar la imagen. Entonces voy a pasar el tapete de podredumbre, matriz de rotación, y también para proporcionar CA entre ellos. Entonces tenemos que pasar la dimensión. Entonces esa es la función que puede rotar la imagen. Ahora, tenemos que llamar a esta función. Para eso, voy a crear una variable llamada rotate. Gire igual a aquí voy a llamar a la función rotar y dentro de las rondas primero, voy a pasar la imagen fuente IMG, luego pasaría el ángulo de rotación, que es 45 Voy a establecer este archivo. Ahora necesitamos para esta imagen en nuestra ventana. Para eso, necesitamos usar la función de imagen. Así que aquí escriba v punto Im dentro de la prensa redonda, al principio, necesitamos proporcionar un nombre a esta ventana la cual se gira. Copio el nombre y lo paso aquí. Entonces necesitamos usar coma y necesitamos pasar la fuente de la imagen, que se gira Voy a poner esta moneda. Después de configurar este archivo, si ejecuto este código en mi terminal, puedes ver el resultado. Puedes ver esta es nuestra imagen original, y esta es nuestra imagen rotada. Aquí giramos la imagen en sentido contrario a las agujas del reloj. Si quieres rotar esta imagen en sentido horario, solo necesitas pasar video negativo -45 grados. Después de satisfecho si vuelvo a ejecutar este código, se puede ver el resultado. Esta vez gira la imagen en sentido horario. Así es como podemos rotar una imagen usando el guardado abierto. Podemos rotar esta imagen en cualquier ángulo. Esto es para este tutorial. Gracias por ver este video. 9. Parte 3: Así que bienvenidos a otro tutorial relacionado con la transformación. En este tutorial, vamos a aprender a cambiar el tamaño, el movimiento y el recorte Entonces comencemos la práctica. Ya aprendemos sobre el cambio de tamaño en nuestros tutoriales anteriores, necesitamos usar la función de cambio de tamaño de punto Cv Entonces al principio, voy a declarar una variable llamada residir. Redimensionado igual a la función de cambio de tamaño de punto C, reside. Luego dentro de las rondas, primero, voy a usar una imagen IMG variable dentro de las rondas, necesitamos proporcionar la dimensión de redimensionamiento Tengo que pasar 300 por 300. A continuación, tenemos que pasar el valor de interpoliion. He escrito interpolación y ahí, voy a usar v punto interQPT Entrar Quvit es lento, pero devuelve mejor imagen Entonces solo acepta llamar a la función de show de imágenes y colocarla aquí, y esta vez, al principio, voy a cambiar el nombre de la ventana. Esto es redimensionado. Además, voy a llamar a la variable, ésta. Voy a fijar esta. Ahora, fijemos el archivo y ejecutemos el código en nuestra terminal. Después de ejecutar este código, podrás ver el resultado. Esta es nuestra imagen original, y esta es nuestra imagen redimensionada Ahora hablemos de nuestra próxima transformación, que está volteando. Primero, voy a comentar esta línea. Entonces aquí voy a aprender cómo podemos voltear una imagen usando SNing abierto Para eso, no necesitamos definir ninguna función. Primero, voy a escribir un comando de longitud única y voy a escribir flipping Entonces voy a declarar una variable llamada flip. Deslizamiento igual a c punto plano. Después en las prensas redondas, pasaría la imagen que quiero voltear IMG Aquí necesitamos pasar una u. Sería cero, uno, de lo contrario, uno negativo. Empecemos con cero. Entonces voy a exhibir esta huida. Para eso, necesitamos usar la función de show de imagen, y voy a reemplazar el nombre de la ventana, cambiar el tamaño con flip También, voy a sustituir la variable tendida. Voy a establecer este archivo. Cero básicamente implica voltear la imagen verticalmente, y si pasas una, entonces va a voltear la imagen horizontalmente Si pasas menos uno, entonces va a voltear la imagen, tanto la dirección, horizontal como verticalmente. Empecemos con verticalmente, pasa cero. Después de configurar este archivo, si ejecuto este código en mi terminal, puedes ver el resultado. Verticalmente voltea la imagen. Ahora voy a encender esta imagen horizontalmente. Yo paso uno. Después de configurar este archivo, si ejecuto este código, ahora puedes verlo voltear la imagen horizontalmente. Básicamente se reflejaba la imagen. Se puede ver el reinicio del espejo. Y si quieres voltear esta imagen tanto la dirección para eso, necesitas pasar menos uno. Si configuro este archivo y ejecuto este código, puedes ver el resultado. Ahora se puede ver voltear la imagen, tanto la dirección, vertical como horizontalmente. Así es como funciona el flip. A continuación, voy a comentar esta línea y esta vez, vamos a aprender sobre el recorte, cómo podemos recortar una imagen Ya aprendemos sobre el cultivo en nuestros tutoriales anteriores Primero, voy a declarar un comentario y recorte de Healt. Entonces voy a declarar una variable crop Crop igual a entonces necesitamos pasar esta fuente ImageMG Luego se coloca al lado del receso cuadrado, necesitamos definir la posición, el punto, el punto de inicio y el punto final del cultivo. Aquí voy a pasar poco técnica de rebanado 200 frio 400 Este es el punto de partida, y para el punto final, voy a pasar 300 400. Este es el punto, y voy a satisfyle. Después de configurar este archivo, necesitamos mostrar esta imagen. Para eso, necesitamos usar la función de show de imagen. Entonces copio esta función y la pego aquí y sustituyo flip con ra. También necesitamos reemplazar el recorte de longitud variable y necesitamos establecer este archivo. Después de configurar este archivo, si ejecuto este código en mi terminal, puedes ver el resultado. Vaya, no está funcionando. Creo que hice un poco de mistak. Vaya, cómo usaste una coma. Necesitamos usar colon Si. Después de otra vez, voy a configurar este archivo y ejecutar este código. Si ejecuto este código, puedes ver el resultado. Esto es lo que devuelve. Esta es la imagen recortada. Creo que esta es esta posición exacta. Si cambio el valor del cultivo algo 50, por 200 y 100 por 200. Luego configura este archivo y ejecuta este código. A ver. Esta es la zona a la que regresó. Ya nos enteramos de eso en nuestros tutoriales anteriores. Entonces esto es todo para este tutorial. En el siguiente tutorial, vamos a aprender detección de contre Gracias por ver este video, Styune para el siguiente tutorial 10. Detección de contornos Opencv: Hola a todos. Bienvenido a otro video. En este video, vamos a hablar sobre cómo podemos identificar contornos. Las señales son básicamente límites de objetos. Se confeccionó con línea y curvas. En una oración sencilla, contorno es el contorno o forma de algo. Se trata sobre todo de una curva, de lo contrario, figura irregular. La palabra de contorno vino de una palabra italiana, que es contorno. Pero si hablo de punto de vista matemático, Ctures y bordes son cosa diferente Oturor cosa muy útil cuando te involucras en el análisis de forma También es útil para detección y reconocimiento. En este tutorial, me gustaría darte la idea de contornos y cómo podemos usarlo en abierto C. Como puedes ver, ella leemos un archivo de imagen y esta imagen usando la función IMF. Si aprendes este código en mi terminal, puedes ver esta imagen. Es nuestra imagen CAT. Es la imagen exacta del CAT. Lo siguiente que voy a hacer, voy a convertir esta imagen en imagen en escala de grises Para eso, HemotypeGray. Gris igual al punto CV. Voy a usar un método llamado CVD color. C VT color dentro la ronda RessSF necesitamos pasar la imagen fuente, que es Entonces para pasar esta variable. Entonces voy a usar cv dot color. Cv coloreado. Color y quiero convertir este color BGR verde. Subrayar BGR gris. Éste. Y luego tenemos que mostrar esta imagen. Voy a copiar esta línea y pegarla aquí. Voy a sustituir a Tati gris. Además, necesitamos reemplazar el nombre de la variable, gris. Quiero establecer este archivo. Después de establecer este archivo, si hice este código en mi terminal, se puede ver el resultado, se puede ver el diferente. Esta es nuestra una imagen, y esta es nuestra imagen en escala de grises Después de esto, quiero agarrar los bordes de esta imagen. Para eso, voy a usar el detector de borde E. Al principio, voy a declarar una variable KE igual a C punto K. Luego dentro de la ronda versus, al principio, voy a pasar la imagen fuente, que es ING. Entonces entonces hay que pasar el umbral total de dos. Y aquí voy a pasar 125 coma y el segundo valor es 175 Entonces voy a mostrar esta imagen. Voy a copiar esta función me muestro y pegarla aquí y reemplazar el gris por K. Además, voy a comentar esta imagen real a color. No quiero mostrar tres imágenes en mi pantalla. Molestar este archivo, si ejecuto este código en mi terminal, aquí puedes ver el resultado. Esta es la imagen en escala de grises, y esta es la imagen de detección de bordes Y ahora quiero encontrar los contornos en esta imagen. Entonces vamos a usar el método de contorno. Déjame mostrarte. Entonces aquí voy a usar este método y este método para básicamente escribir contornos y jerarquías Entonces aquí voy a escribir contornos la segunda variable son las jerarquías Entonces aquí, voy a usar el método Civ dot find contu. Entonces dentro de la ress redonda voy a igualar los bordes como pueda. Toman movimientos en qué modo encuentra las contuas. Podría ser Civtrorct. Déjame mostrarte Civ dot RetorScoett one. Hay mucho recorrido. Tenemos modo externo, si te muestro trasero, lista com externa, FloodF ahora, me gustaría ir con lista porque va a devolver todo el contorno, sin usar árbol, me gustaría ir con El siguiente método que voy a pasar, que es el método de aproximación de contorno Entonces después de COVA, voy a teclear Cividt enfoque de cadena, monja, Ahora, vamos a explicar de nuevo esta línea. Aquí puedes ver CV contues finos. Esta función ret conduce a partir de una imagen binaria, y Ki es la imagen de origen En qué imagen se quiere detectar el conductor. CVR menos es el modo de contu retraable y el siguiente método, CV cadena de puntos aproximante almaceno todo el punto de contues y jerarquía es la variable Contenía información sobre tropolos de imagen y la variable de contorno es la lista de todas las contues Va a almacenar todos los contornos que encontremos en esta imagen y cada contorno almacenará un Nampi en un punto Como te dije, el contorno es una lista, y si quieres imprimir cuantos contornos encontramos en esta imagen, sí, puedes. Solo necesitas usar la función de impresión imprimir luego dentro del rebaje redondo, necesitas usar la función len A ten. Después dentro del receso redondo, voy a pasar los contornos. Éste, y voy a poner este archivo. Después de establecer este archivo, si ejecuto este código en mi ravinal, este es el resultado que encontramos, que básicamente es que se devuelve 359 contoures Y si quieres reducir el ruido de los contoures, puedes difuminar esta imagen Así que vamos a difuminar la imagen gris. Entonces aquí, voy a crear otra variable de desenfoque. Desenfoque, perdón, no azul. Desenfoque, igual a v punto Desenfoque gaussiano. Luego dentro del receso redondo, necesitamos pasar la imagen fuente que es gris. Con eso, tenemos que pasar a los valores, cuánto gris quiero. Después de pasar la imagen de origen, también, necesitamos definir el tamaño K. Quiero decir tamaño del kernel. Entonces dentro de la resis redonda, necesitamos pasar el tamaño del kernel. Entonces aquí paso cinco CA cinco. Entonces tenemos que pasar otro valor, el tiempo fronterizo. Entonces voy a escribir CV dot, border, y aquí estoy usando el predeterminado, border deform Además, me gustaría mostrar esta imagen borrosa. Entonces copio esta función, soy show y la voy a pegar aquí y reemplazar el gris con desenfoque. Entonces voy a configurar este archivo. Después de establecer este archivo, si ejecuto este código en mi terminal, ustedes ven el resultado. Esta es la imagen gris borrosa, y esta es la Kyimage A continuación, voy a encontrar los bordes de esta imagen. Para eso, necesitamos pasar la variable y esa sección. Aquí, puede. Quiero satisfacer. Appro satisfecho. Si ejecuto este código en mi terminal, esto es lo que devuelve. Ahora se puede ver que devuelve total 23 contu. Redujo el número de contorno porque héroe usa lnge. Es así como podemos encontrar contu a partir de una imagen. Hay otra manera de que podamos encontrar contorno a partir de una imagen. Pero no voy a cubrir en este trutorial. Voy a cubrirlo en el siguiente tutorial. 11. Detección de contornos Opencv parte 2: Oigan, me alegro de verlos de vuelta, chicos. Esta es la segunda parte de este tutorial. En esta sección, vamos a ver cómo podemos usar diferentes métodos para encontrar conductos Sin usar el detector Canny edge, vamos a usar umbral Es otra función de OpenCV. Entonces al principio, voy a comprometerme en la lente. No lo necesito. Después ahí abajo, primero, voy a declarar una variable, con. También, voy a declarar basura. Igual a cv punto h. este. Y va a tomar esta imagen gris. Entonces voy a copiar esto en gris. Además, tenemos que pasar el valor umbral. El primer valor umbral voy a pasar 125, y el segundo valor umbral voy a pasar 255. No te preocupes por ello. Vamos a aprender sobre umbral en nuestros próximos tutoriales. Umbral básicamente binarizar la imagen. Si la intensidad de Un píxel está por debajo del 125, entonces se va a establecer en cero. Quiero decir, entonces se va a poner en color negro. Y si la intensidad de la imagen está por encima de la 125, entonces se va a establecer entonces se va a establecer en 255, de lo contrario, color blanco. Y en nuestro método de contorno fino, vamos a pasar esta variable thrash Basura. No sólo eso, aquí tenemos que pasar otro valor en función de umbral, que es umbral t. entonces el paso coma, y aquí quiero atar cv puntos BinArt uno Ahora, establezca este archivo y ejecute el código en una terminal y vea cuántos contornos devuelve. Hasta ejecutar el código, como se puede ver, devolver totalmente 1073 contoure Ahora, vamos a mostrar la imagen thrashimage, no la imagen gris. Entonces copio esta línea y comento esta línea y llamo a OnShoFunction, y reemplazo gris con De nuevo, voy a configurar este archivo y ejecutar el código en mi terminal. Hasta ejecutar el código en mi terminal, este es el resultado que cultivamos. Este es el resultado que devuelve. Esta es la imagen en blanco y negro. No, es la imagen binaria, y está hecha con puntos blancos y negros. No te preocupes por ello. De lo que vamos a hablar en nuestra sección avanzada. Sólo una cosa hay que recordar, hresold básicamente binarizar Es la forma binaria de una imagen. Cero indica ese color y 255 indica color blanco. Ahora, déjame mostrarte una cosa. Al principio, voy a importar num pi. Se ata, importa num Pi como NP. Aparte de estos, voy a crear una variable en blanco B Blan igual a, y aquí voy a llamar a la función desde NumPinp punto Os. Después dentro del receso redondo, voy a agarrar la forma de la imagen, esta forma variable. Entonces aquí, voy a escribir mg punto Shae. Entonces dentro del cuadrado resistir dos puntos, voy a agarrar todo esto a v. A continuación, tenemos que pasar los datos tipo B, tipo, y aquí dentro de esta sola cita, voy a pasar UI NT, H. Y luego voy a mostrar esta imagen bancaria usando la función de show de imagen. Copio esta línea y la pego aquí. Y rasgar esta imagen con blanco. Voy a establecer este archivo. Up configurar este archivo. Si ejecuto este código en mi terminal, puedes ver el resultado. Esta es la imagen en blanco que creamos. Esta es la dimensión exacta de esta imagen CAT. Ahora la pregunta es, ¿con qué propósito creamos esta imagen en blanco? Porque en esta imagen en blanco, voy a dibujar o contue. Voy a crear este contute en esta imagen en blanco. Por eso creo esta imagen en blanco. Y para dibujar los contornos, necesitamos usar una función llamada draw contube así que escribe v dot, draw contes este, y dentro del vestido redondo, primero, necesitamos pasar la imagen en blanco Entonces escribe negro. A continuación, tenemos que pasar la lista de curvas de nivel. Esta variable. Como te dije, este contorno es una lista. Gusto todo el control ws. Entonces para pasar los contuses contra. A continuación, tenemos que pasar el índice de contorno. Quiero decir cuantos conti quieres pasar, y quiero todos Op. Así que voy a pasar Nativo uno A continuación, tenemos que proporcionar el color, y tenemos que proporcionar el color en formato Bzier Entonces quiero el color rojo. 00 coma 255 También necesitamos pasar el espesor y quiero pasar el espesor dos. Y ahora necesitamos dist esta imagen en blanco. Entonces para copiar esta línea, estoy segura y la voy a pegar aquí. Y también, comento la línea anterior. Ya no lo necesito. Y voy a poner este archivo. Después de configurar este archivo, ejecutemos el código en nuestra terminal. A Ejecuto el código en mi terminal no funcionando correctamente. Creo que hay un error en mi código. Creo que cometí algunos errores, así que vamos a comprobarlo. Aquí, esta, no necesito esta técnica de rebanado. Solo quiero usar la forma de punto de imagen. Va a agarrar el área de la forma de la imagen. Entonces, fijemos el archivo y volvamos a ejecutarlo. Hasta ejecutar este código, como puedes ver, esto es lo que devolvió. Se devolvió la imagen del gato. Básicamente, aquí dibujamos una nueva imagen usando los puntos condut Primero, tomamos una imagen en blanco, luego usamos los puntos conductos de la imagen de la palabra trillada y la aplicamos en la imagen en blanco. No es lo mismo. Desde la imagen umbral, vaya a agarrar los bordes y usando estos bordes, dibujamos una imagen en nuestra página en blanco. Si reduzco el grosor, creo que se ve más bonito. A ver. Voy a reducir el espesor 2-1 y re correr esta genial. Sí, los nervios se ven bastante claros. Además, puedes obtener el resultado diferente si cambias el valor umbral. Supongamos que si reduzco el valor umbral 255-175, entonces va a devolver un resultado diferente No te preocupes. Vamos a aprender más sobre umbralización en nuestro próximo tutorial Entonces gracias por ver este video, Estatuto para el siguiente tutorialm En el siguiente tutorial, vamos a hablar de espacios de color. 12. Espacios de color: Hola, chicos, me alegro de verles de vuelta. Una vez más, estoy de vuelta con otro tutorial relacionado con CV abierto. Y en este tutorial pagador aprenderemos espacios de color. Los espacios de color son básicamente espacios de color. RGB es un espacio de color, escala de grises es un espacio de color. También contamos con diferentes espacios de color como HSV, AAD y Mini Ahora, comencemos con tratar de convertir la imagen con escala de grises. Así que vamos a convertir imagen GR a imagen en escala de grises. Como ustedes saben, Bier es el modo de color predeterminado en abierto C. Para eso, voy a declarar una variable gris, gris igual a asignada, punto CVI, voy a usar un método llamado color CVD, color CVT Luego dentro de las rondas, primero, necesitamos pasar la imagen fuente que es IMG, luego tenemos que pasar el color Color Smit. Subrayar, y quiero convertir BGR a gris, éste, y voy a sub este Entonces voy a mostrar esta imagen usando el método Imho. Aquí apretado, Cm punto, IMO. Dentro del brcess redondo primero, voy a pasar el nombre de la ventana que es gris A continuación, tenemos que pasar la imagen fuente, que es variable gris. Y quiero establecer este archivo. Después de configurar este archivo, si ejecuto este código en mi terminal, como pueden ver, esta es nuestra imagen original y esta es nuestra imagen en escala de grises Aquí convertimos la imagen BGR en imagen en escala de grises. Ahora voy a convertir BGR a formato HSV. HSV significa saturación de tono W. Primero, voy a escribir un coman BGR HSVt aplicar el color HSV y quiero copiar el y quiero Y lo basé aquí. Primero, voy a cambiar el nombre de la variable grado dos HSV Entonces voy a cambiar Bijiac dos HSV. Éste. Además, voy a cambiar el nombre de la ventana, reemplazar el gris por HSV y longitud variable Quiero satisfacer. Después de satisfacer, si ra este código en mi terminal, veamos qué devuelve. Este es el modo de color GSv de esta imagen. Ahora, hablemos de otro tipo de espacio de color, que es AAB Aquí voy a escribir otro comando único, hashtag. Esta vez, voy a convertir VGR a LAB. Entonces nuevamente, voy a copiar esta sección y la voy a pegar aquí, y esta vez, voy a cambiar HSB a AB Además, voy a cambiar el código de color, jia a LAB. Entonces necesitamos cambiar el nombre de la ventana, LAB, también en para cambiar la longitud variable. Después de establecer este archivo, si ejecuto este código en mi terminal, veamos qué devuelve. Este es el modo de color LAV de esta imagen. Así es como se ralentiza. Como sabes, por defecto, OpenCV usa el formato gR Pero fuera de OpenC utilizamos formato RGB, que es opuesto a BGR Es un modo de color inverso de formato BGR. Ahora quiero abrir esta imagen en modo RGB. Voy a abrir esta imagen fuera de la C. abierta Primero, voy a comentar las líneas, después voy a importar licencia de tapete Moni, algún tipo, importar, licencia Mt Éste, Él llama a una función particular Pi plot una trama. Si no instalas este módulo en tu sistema, entonces solo tienes que abrir tu espinilla y corbata de Windows Power PIP instala Matt Blot y Tick Enter Lo va a instalar en tu sistema. Ya lo instalé, así que no lo voy a instalar E. Así que mad Blot salto, lee la imagen en AGM. Pero, ¿hemos abierto esta imagen usando C. abierta? Leí la imagen en BGM Abramos esta imagen usando Mt Blot leap. El tipo PLT, punto, yo ejecutaría la función IMS, yo soy así Entonces dentro de las runres voy a pasar la imagen fuente IMG, imagen, esta Entonces voy a mostrar esta imagen usando PLT dot sFunction Certificemos y ejecutemos código en nuestra terminal. Aparecen en este código en nuestro terminal, este es el modo BGir de esta imagen y este es el modo RGB de esta imagen Básicamente, aplica color opuesto esta imagen original. Esta es BgiriImage y esta es una imagen RGB. Abierto lee esta imagen como modo Bzier y por defecto Mtlot así la imagen en Por eso Matt Plotly piensa que es un color RGB. Por eso podemos ver la versión opuesta de este color. Ahora, déjame mostrarte algo. Voy a eliminar esta ventana y comentar ambas líneas. Déjame mostrarte algo. Comento tanto esta línea como esta vez, voy a convertir BGA a color RGB Aquí tipo de comentario BGR dos RGB. Entonces primero, voy a declarar una variable RGB igual a CV punto CVD color, color CVT Entonces es que la ronda res es imagen IMG, coma vt color Subrayar. Esta vez quiero convertir BGR a RGB. Éste. Entonces voy a mostrar esta imagen. Hemotipo CV que soy espectáculo. Es primero la rotonda, necesitamos pasar el nombre para mostrar, que es RGB, luego necesitamos pasar el nombre de la variable RGB. Eso es. Ahora, vamos a ejecutar el código y ver qué devuelve. Up run este código, también, se puede ver escrito una versión RGB de esta imagen. Ahora es que se ve bastante similar a mate porque aquí convertimos imagen VGA a RGB. Pero si ejecuto esto a código, copia esto a código y pegarlo hasta eso y comentar y descomentar tanto la línea, y esta vez como variable, voy a pasar RGB no imagen y configurar este archivo y volver a ejecutar este código Ahora puedes notar esta vez metap devolver la imagen original real, que es similar con la ventana de gato Esta es nuestra imagen original de BGR. Ahora, nuestra imagen RGB y la imagen BGR se ven iguales porque convertimos imagen BGR en imagen RGB usando Después paso esta imagen en imagen para funcionar usando matplot leave Por eso devolvió este resultado. Solo una cosa que debes recordar met plot dejar el código de color predeterminado es RGB y el código de color predeterminado de OpenCV es GR Así que ahora puedes ver Harry convertir Bzierimage a escala de grises, Bzierimage a HSV, imagen de Bier Pero hay una desventaja en Open C. No se puede convertir la imagen en escala de grises en Además, no se puede convertir HSV a LAB directamente. Si quieres hacer eso, primero, necesitas convertir la imagen de disco en BGR, luego puedes cambiar la imagen BGR a Voy a convertir HSV a imagen BGR. Aquí el tipo es único y comando y escribo esta vez voy a convertir H a BGR Y primero, voy a declarar una variable HHV guión bajo, GR Estas son variables y esta vez voy a ejecutar punto C, color CVT Inserta esta función, voy a pasar al principio, voy a pasar la imagen fuente, que es HSV Voy a descomentar esta sección. Y esta vez voy a pasar HSV, éste. Al siguiente, voy a pasar el color, que es CV punto, color, guión bajo y esta vez voy a convertir Hs V a BGR, éste, voy a mostrar esta imagen Entonces escribe cv dot No dentro de los versos de ejecución, dentro de los códigos individuales, primero voy a proporcionar un nombre que es HSV a BGR Entonces voy a proporcionar la variable. Antes de configurar este archivo ejecuto este código, voy a comentar todas las funciones de imagen. Quiero mostrar el original. Además, no sé qué mostrar estos. También me enteré de estas dos líneas. Mejoremos este archivo, vamos a sol el código y veamos qué Paso arriba este archivo, se puede ver el resultado. Esta es nuestra imagen original, y esta es nuestra videoing HSV dos Para entender mejor, déjame mostrarte la imagen del HSV. Si muestro la imagen HSE, y voy a mostrar este archivo Después de ejecutar este código, como pueden ver, esta es la imagen original del gato, no la necesito. Esta es la versión HSV de este color, y convertimos la imagen HSV en Pero no podemos convertir HSV directamente en imagen en escala de grises Entonces esto es todo para este tutorial. En este tutorial, traté de cubrir algunos pequeños conceptos de espacios de color en OpenCV Así que gracias por ver este video Stune para el siguiente tutorial 13. Canales de color: Hola, chicos. Es bueno verte de vuelta. Una vez más, estoy de vuelta con otro tutorial real tate O pensimi Y en este tutorial, vamos a aprender los canales de color. En este tutorial, sobre todo vamos a aprender cómo podemos escupir canales de color, y también vamos a aprender cómo podemos fusionar canales de color Una imagen en color consiste básicamente en múltiples canales, rojo, azul y verde. Todas las imágenes que ves en un medio digital hecho con tres canales de colores, rojo, azul y verde. Así que la imagen se hacen con el canal de tres colores, y OpenCV nos permite escupir los Como puedes ver en mi directorio de trabajo actual, tenemos una imagen, PIC dot JPG. Si abrimos esta imagen, como pueden ver, tenemos que hacer tres sutiles, tres surgen con tres colores diferentes, de color rojo, de color verde, de color azul. Esta es una sola imagen, y OpenCV puede adaptarse a los tres canales de colores, azul, verde y rojo Entonces eso es lo que vamos a hacer en este video. Besidalmente vamos a usar esta imagen y dividir esta imagen en canal de tres colores Entonces para el canal de tres colores, voy a tomar tres variables, B, G R igual a, voy a acelerar los canales de color. Para eso, voy a escribir Cv punto, voy a ejecutar la función de escupir, punto Cv, función de escupir, velocidad Y dentro de la prensa redonda, voy a pasar la imagen IMG Esta función de división va a dividir la imagen en color azul, verde y rojo. Pero al principio, las salidas convierten esta imagen en la imagen en escala de grises Y si quieres mostrar esta imagen en una ventana para eso, voy a usar, podemos usar la función Image show, entonces escribe cv dot IM show. Después la ronda presiona primero, necesitamos pasar un nombre de ventana, al principio quiero mostrar el color azul, así que quiero escribir Nombre de ventana azul. C, entonces voy a pasar la variable longitud B. Entonces voy a comenzar esta línea dos t. A continuación, quiero mostrar el color verde, y para el color verde, voy a pasar la variable G, y la última es para el color rojo para el color rojo, voy a pasar la variable R. Voy a sofocar. ejecutar esta cotización, déjame decirte algo. Básicamente esta función va a convertir esta imagen en imagen Griskal. Entonces según el valor del canal de color, podemos ver la parte oscura y brillante. Déjame mostrarte. Después de configurar este archivo, si ejecuto este código en mi terminal, aquí puedes ver tres navajas. Ahora se ve bastante confuso. Esta es la imagen original. Como puedes ver en la imagen original, podemos ver tres de los colores rojo, verde y azul. Pero si te muestro la ventana azul, aquí puedes ver ahora el color azul convertirse en color blanco. Ahora puedes notar que la ventana azul y los círculos azules se vuelven blancos. Ahora mi tienes cooten por qué se ha vuelto blanco, y otros dos colores se vuelven Como te dije cuando Opensi encontró el color azul en esa imagen, entonces aumentó la intensidad de este color Y como te dije, si función convertir la imagen en imagen en escala de grises Y cada vez que corremos canal de color azul en esta imagen de escala de grises, entonces alto y representar el color azul con color blanco Y como pueden ver, este es el color azul exacto. Por eso se vuelve de color blanco, color blanco exacto. OpenSni no encontró ningún color azul en esta imagen. No encontré ningún color azul en círculo de color verde. Además no encontraste el color azul en círculo de color rojo. Por eso se vuelve negro. la misma manera, cuando corremos el canal de color rojo, esta vez, el color rojo se vuelve de color blanco. Como puedes ver, ahora círculo rojo se convierte en círculo blanco porque esta vez tiene el color rojo y aumenta la intensidad de este círculo De la misma manera, funcionan canales de color verde. Esta vez aumenta la intensidad del color verde. Puedes hacer el mismo experimento con cualquier imagen colorida. Pero para tu comodidad y para entender cómo funciona, utilizamos este círculo, tres colores diferentes, rojo, verde y azul. Y luego círculo de ranura, no hay color verde disponible. Por eso se vuelve de color negro. Si alguno de porcentaje de color verde está disponible en esa porción, entonces se vuelve un poco más ligero. Y recuerda, la imagen original vienen con canal de tres colores y la ventana de radio ventana verde y ventana azul vienen con canal de color cero. Deja que te lo demuestre. Si borro esta ventana e imprimo la forma, déjame mostrarte tipo print dentro de la ronda ss, voy a escribir image, image variable shape. Voy a conseguir esta línea. Y esta vez, quiero imprimir uno de los canales de color bajo, supongamos gris. Ato G. Si configuro este archivo y ejecuto este código a A, ahora puedes ver en mi terminal, primero imprimimos la dimensión 300 por 500 y luego imprimimos el canal de color. En nuestra primera imagen, quiero decir la imagen original, tenemos que dibujar canal de tres colores. Pero en la siguiente imagen, que es ventana verde, no tenemos ningún canal de color. Por defecto, podemos llamarlo un valor de canal de color, pero básicamente, el blanco y negro no son colores. Básicamente, en esta ventana, el blanco y negro representan la intensidad de color particular. Y ahora voy a comentar ambas líneas, y voy a fusionar esta imagen de tres. Pero antes voy a comentar esta línea, la imagen original. No quiero esta ventana, y para fusionar la imagen de canal de tres curvas, voy a usar la función merge. Primero, voy a declarar una variable y nuestro nombre de variable es merge. Fusionar igual a Es el dobladillo de rondas para coll una función llamada Marge En algún momento v fusión de puntos. Es el latón redondo dentro de los vestidos cuadrados que voy a pasar. Herem para pasar lista de tres canales con, B, G R. Y luego voy a mostrar esta variable Para eso, de nuevo, necesitamos ejecutar la función del FMI de civeta. En la rotonda primero va a pasar el nombre de la ventana que se fusiona Copia la variable. Esta es la ventana fusionada y voy a pasar el coma, y voy a pasar la variable en fusionado. Y voy a poner este archivo. Después de que configuré este archivo, al principio, consiguió para esta ventana de canal de tres colores. Entonces se puso para la ventana fusionada. Déjame mostrarte. Entonces después de ejecutar el código, se puede ver, primero se imprime. Al principio, mostraba el canal de color azul, luego rojo, luego verde. Y por fin, muestra el canal de color fusionado. Y después de fusionar el canal de tres colores, nuevamente, devuelve una imagen colorida. Entonces esto es para este tutorial. En el siguiente tutorial, vamos a aprender a desdibujar. Entonces gracias por ver este video estadio para el siguiente tutorial. 14. Desenfoque: Hola, chicos, me alegro de verles de vuelta. Una vez más, estoy de vuelta con otro tutorial relacionado Open C. Y en este tutorial, vamos a aprender sangre. Vamos a aprender diferente método de desenfoque. Generalmente, suavizamos y desenfocamos la imagen cuando tenemos ruido en nuestra imagen, y aplicando algo de desenfoque, podemos reducir el ruido. En nuestros tutoriales anteriores, ya aprendemos sobre el desenfoque gaussiano, que es el método más popular para Sin Gersion blur, hay muchas técnicas de desenfoque, y vamos a aprenderlo todo Pero antes de comenzar nuestra práctica, necesitamos entender algo. Tenemos que entender lo que es borroso. Cómo funciona realmente el desenfoque. Aquí voy a abrir una imagen. Esta es nuestra imagen. Qué pasa exactamente cuando aplicamos desenfoque. Al principio, necesitamos definir algo llamado kernel. De lo contrario, puedes llamarlo indo. Entonces aquí en esa posición, voy a dibujar una ventana. Supongamos que este es nuestro tamaño de ventana. Aquí dibujamos una ventana sobre la imagen en una posición específica. Como puede ver, esta ventana tiene un tamaño, y se le conoce como tamaño de kernel. Y el tamaño del kernel básicamente número de filas y número de columnas. Aquí voy a dibujar tres filas y también voy a dibujar tres columnas. Cerdles hechos con fila y columnas o pixeles. Estos son todos píxeles. Entonces aquí tenemos un total de tres columnas y tres filas, por lo que su tamaño de kernel es de tres en tres. Esencialmente, ¿qué pasó? Tenemos múltiples métodos para aplicar desenfoque. Borroso aplicado a este píxel medio, y este píxel se aplica a los píxeles redondeados de fraude de resultado Aplica el resultado del píxel circundante en el medio. Discutamos el primer método de desenfoque, que es promediar Vamos a llegar a los usuarios a tu código. Y aquí, voy a escribir un comando de una sola línea hasta y voy a escribir promedio. Ahora la pregunta es cómo es el trabajo promediar el desenfoque. Si vuelvo a abrir esta imagen, como te dije, b siempre aplico al píxel medio y promediando el trabajo de desenfoque de acuerdo con el promedio de píxeles circundantes Supongamos que este valor de intensidad de píxel es dos. Este es cinco. Este es siete. Este es tres. Este es cuatro. Este son dos otra vez. Este es ocho, y este es nueve. Como tú, la intensidad del píxel medio es de cuatro. Ahora, va a extraer todo el valor de intensidad de píxel y aplicar este valor y aplicar este valor al píxel medio. Así es como funcionan los promediados. Básicamente se quiere decir que el promedio de píxeles circundantes se va a aplicar al pix medio. Regresemos a los usuarios a tu código. Para aplicar el desenfoque, primero, voy a declarar una variable y nuestra variable es promedio. Promedio igual al método de desenfoque de punto CV. Entonces en cambio la corrida pasa primero, necesitamos pasar la fuente, la imagen fuente, que es ING. Y entonces necesitamos definir el tamaño del kernel. Y para el tamaño del kernel, voy a tomar tres columnas y tres filas asi. Y podemos mostrar esta imagen en nuestra ventana, así que voy a ejecutar CV dot Si Mthood dentro de la rotonda dentro del código único, primero, voy a proporcionar un nombre de ventana que es promedio, coma, y luego voy a pasar la variable, que también es avg Si me senté este archivo y ejecuto este código en mi terminal, como pueden ver, es tanto la imagen. Esta es la imagen original del gato, y esta es la imagen borrosa promedio Si lo abro uno al lado del otro, se puede ver la pequeña diferencia. Se ve bastante nítida, pero esta no es nítida porque aquí aplicamos desenfoque promedio. Y si quieres aumentar la intensidad de desenfoque, entonces solo para pasar mayor valor del kernel. Déjeme mostrar. Así que sin usar tres por tres tamaño de kernel, estoy aquí para pasar siete por siete y establecer este archivo y ejecutar este código de nuevo. Hasta ejecutar este código, se puede entender la diferencia. Hasta aumentar el valor del kernel, también aumenta la borrosidad de esta Ahora vamos a aplicar otro desenfoque, que es Gasianblur. Elimina tanto las ventanas como aquí escribe otro solo comentario Gersionblur Para aplicar el Gersionblur, hierba para declarar otra variable adivinar igual a Cm punto Son las prensas redondas, primero vamos a pasar la imagen fuente, que es ING entonces necesitamos proporcionar el tamaño del kernel y aquí voy a aplicar siete Casern También para pasar Sigma X. Se utiliza para desviación de dictado X. Por ahora, voy a poner en cero, y voy a mostrar esta imagen en una ventana así que voy a copiar el on de Mthod y pasarlo aquí Voy a renombrar Promedio con Gertian. También cambie el nombre de la variable GUS. Si configuro este archivo y ejecuto este código en mi terminal, ahora puedes comparar tanto la sangre. Esto es desenfoque promedio y esto es Gasienbld. Pero puedes notar aquí usamos el mismo tamaño de kernel siete por siete. Pero en promedio, aplicó más sangre, pero en Gasiano se ve sangre natural Por eso la mayor parte del tiempo usamos Gersienbl porque se ve Entonces vamos a aplicar otra sangre. Déjeme mostrar. O el siguiente nombre es sangre mediana. El hemotipo es sangre única y mediana de mando. Entonces Hembo declara una mediana. Mediana igual a C punto mediana de sangre. Luego configura las rondas primero L para pasar la imagen de origen que es IMG En lugar de pasar el tamaño completo del kernel, aquí para pasar un intser Supongamos que voy a pasar tres. Ahora abierto C podemos suponer que su tamaño de kernel es de tres por tres. Ahora, vamos a mostrar la imagen en una ventana, así que voy a copiar el capó del mapa de Imro y lo voy a pegar aquí Primero, voy a reemplazar el nombre de la ventana. Voy a hacerla mediana. Además, voy a sustituir la longitud variable. Mediano, establece este archivo. Después de configurar este archivo, si ejecuto este código en mi terminal, ahora puedes comparar tanto el desenfoque. Esta es la imagen normal. Este es el desenfoque medio, y este es el Gasionblur y este es el desenfoque promedio A lo mejor no puedes entender la borrosidad si yo aumento el valor, déjame mostrarte Voy a hacer toda la ventana y aumentar el valor del tamaño del kernel. Voy a hacer nueve y luego volver a configurar este archivo y volver a ejecutar este código. Ahora puedes ver el efecto de desenfoque mediano. Si compara el efecto de desenfoque con otros efectos de desenfoque, se ve como Oil t. Ahora, apliquemos el efecto de desenfoque st, que es desenfoque bilateral Entonces aquí, voy a crear un sencillo y comentar y voy a escribir. Desenfoque bilateral. El desenfoque bilateral no es un desenfoque. Es un filtro. Es altamente efectivo en eliminación de ruido mientras mantiene los bordes afilados. Pero esta operación es más lenta que si comparo con otros filtros. Usando desenfoque bilateral, puedes tu imagen. También se puede mantener la nitidez de los bordes. Aquí, voy a declarar una variable llamada bilateral, así que copio este nombre y voy a declarar una variable bilateral igual a Aquí se llama el filtro bilateral. Algún tipo CV dot bilateral fitter. Entonces dices el RundresSSF necesitamos pasar la imagen de origen que es la variable IMG, entonces tenemos que pasar la dilateral adentro y voy a adentro y voy A continuación, tenemos que pasar este color Sigma. Voy a ponerle 154 ahora. El siguiente valor, tenemos que pasar el espacio Sigma. También lo voy a pasar y también quiero fijarlo 15. Ahora, vamos a mostrar la imagen. Voy a copiar el hierro de Math wood y voy a pegarlo aquí. Primero, voy a reemplazar el nombre de la ventana, Blteral luego voy a pegar el nombre muy bien, Blteral voy a Después de establecer este archivo, si yo en este código en mi terminal, aquí se puede ver el resultado DE. Se trata de BilterAlbla. Creo que es bastante similar a nuestro genoma. Aumentemos el valor y hagamos nueve. Y también, voy a decir a los valores de Sigma 75 y 75. Después de establecer este archivo, si tengo el scorde en mi terminal, ahora veamos qué escribió Ahora puedes compararlo con la imagen original. Así es como funcionan los filtros bilaterales. Esta es la imagen original, y este es el desenfoque de filtro bilateral. Entonces estos son los cuatro tipos de desenfoque que podemos aplicar en OpenCV Espero que ahora te quede claro cómo podemos aplicar diferentes desenfoque en CV abierto. Así que gracias por ver este video Studio para el siguiente tutorial. 15. Operaciones de BITWISE: Hola, chicos. Me alegro de verte de vuelta. Una vez más, estoy de vuelta con un nuevo tutorial relacionado con OpenCV. Y en este tutorial, vamos a aprender las operaciones de Batis En OpenCV, hay cuatro operadores Biti. El primero es N XR y el último operador no es nada. En OpenCV, los operadores Bitois se utilizan para operación a nivel de píxel entre dos imágenes o entre una imagen y una máscara Estas operaciones son útiles para tareas como mezclar, enmascarar y manipular parte específica de una imagen, y muchas más. Como ya le dije, tenemos que decírselo por operador BTI. Primero, voy a escribir aquí un solo comando de préstamo. No, voy a usar multi longitud comen para eso. Después en el comando multilínea, voy a pegar todo el nombre del operador y para qué propósito usamos Como te dije, este es el primer operador, BTI. Aplica una operación lógica a cada píxel de dos imágenes o una imagen y una máscara. Siguiente repertor tenemos BTs o aplica una operación lógica Entonces tenemos bitwis ZR. Se aplica una operación lógica ZR última palabra es bit a bit no Básicamente, invierte los píxeles. Se puede comparar con el operador de nodo lógico. Recuerde, operador bit a bit trabajando en un mender binario. Si pasamos valor cero, entonces va a girar del píxel y si pasamos un valor, entonces encenderá el píxel. Lo represento de color blanco y negro. Ahora vamos a importar otro módulo, num pipe, Hemotpimport, entumecido Entonces voy a tomar una variable llamada Blend y la pondría NP punto cero está en el runsSF, necesitamos proporcionar la forma de esta ventana Voy a tomar aquí voy a establecer tamaño de ventana 400 400. Además, necesitamos proporcionar el tipo de datos. El tipo D es igual a dos está en un solo código INT ocho. Básicamente, ella crea una imagen negra en blanco y decimos altura 400 y ancho 400. Básicamente, vamos a utilizar esta imagen en blanco como base para dibujar rectángulo y círculo. A continuación, voy a crear un rectángulo en esta imagen en blanco. Voy a escribir una variable RCT asignada con cv dot rectángulo Método. Rectángulo. Luego dentro de la ress redonda primero, necesitamos pasar la imagen en que imagen usaremos para crear el rectángulo. Quiero usar copia de punto en blanco. Voy a tomar copia versión de esta imagen en blanco. Entonces necesitamos definir el margen. Necesitamos definir el margen a partir de Xs e Y xs. Me lo voy a llevar 30 30. Entonces necesitamos definir el tamaño del rectángulo. Voy a tomarlo 370 pixel por 370 pixel, entonces necesitamos darle color. Como saben, es una imagen binaria, así que no voy a usar tres canales de color, así que voy a proporcionar 255, solo color blanco. Y por fin, tenemos que pasar el espesor. Entonces voy a pasar negativo menos uno porque verá esta imagen con color blanco. Después de crear el rectángulo, necesitamos crear otro círculo. Entonces voy a crear círculo variable, círculo igual a CV, círculo metal. Después dentro de las rotondas, primero, necesitamos definir la imagen En qué imagen quiero crear este tipo su soso, punto, copia, entonces necesitamos definir la posición central de este círculo Voy a pasar 200 por 200. Ma, entonces voy a darle radio a este círculo, que es 200 y también para proporcionar el color así que voy a usar solo color, así que quiero pasar 255, completamente de color blanco. Después de eso, necesitamos pasar el grosor de este círculo, así que voy a pasar menos uno para llenar el círculo de color blanco. Entonces necesitamos mostrar tanto la forma geométrica en diferentes ventanas Corre, C, punto, IN así método, No dentro de la ronda br dentro del sencillo primero, quiero mostrar el rectángulo, así atar rectángulo. Entonces necesitamos proporcionar el nombre de la variable, que es rec. A continuación, quiero mostrar el círculo. Voy a reemplazar rectángulo con círculo y también necesitamos reemplazar el círculo de longitud variable. Voy a establecer este archivo. Ahora, después de configurar el archivo, vamos a ejecutar el código y ver qué va a devolver. Después de ejecutar este código en mi terminal, pueden ver, aquí tenemos las dos imágenes con las que voy a trabajar. Es un rectángulo y es un círculo. Ahora comencemos con el primer operador básico de Btis. Así que comencemos con nuestro primer operador Bitwise, que es un poco creativo sencillo y común Bitwise A. Antes de discutir sobre bitwis y operador, déjame mostrarte lo que hace Así que al principio, voy a declarar una variable bit a bit a Bowie, guión bajo, N N, e igual a punto C, bit a bit y operador Bois y luego dentro de las prensas redondas, necesitan pasar a la fuente. Entonces como fuente, voy a pasar el rectángulo DC y como fuente también, vamos a pasar círculo. Vaya, la ortografía del círculo está mal, así que voy a hacer que sea correcta CR Y ahora voy a mostrar este resultado en una ventana diferente. Aquí voy a ejecutar CV, punto, on para método, M show. Después dentro de las prensas redondas, primero, vamos a pasar el nombre de la ventana, que es Bitwise A. Copio el nombre de la variable tal como es y lo pego aquí Entonces también para proporcionar la imagen fuente, que es bit a bit N, esta variable Quiero establecer este archivo. Después de configurar este archivo, voy a ejecutar el código en mi terminal. Un unicode, como puedes ver, esto es Bitois y el resultado del operador El operador bit a bit y el operador tomaron estas dos imágenes y la colocaron encima de la otra y devolvieron la razón de intersección Si muevo este círculo por encima del rectángulo, entonces devuelvo el área de intersección común de la forma combinada, y representa el área de razón común con color blanco y elimino la otra sección Ahora, vamos a saltar al bit a bit o operador. Aquí voy a comentar esta diapositiva. Entonces voy a escribir otro sencillo y comando y voy a escribir bit a bit u operador o básicamente, bitwis orbor devuelven el área de intersección devuelven el área no intersecante no Déjame mostrarte eso. De nuevo, voy a escribir una variable bitwise o Bitwis igual a c punto bitwis Entonces es en las rotondas voy a pasar el rectángulo Entonces como fuente a, voy a pasar el círculo. Si muestro esta imagen en una ventana, entonces estoy tipo C punto e informo Entonces en la RoundRessF proporcionamos un nombre de ventana que es BTI R. Luego necesitamos proporcionar la fuente, la imagen de origen Después de que configuré este archivo, si no codifico en mi terminal, ahora se puede notar, como le dije, devolvió el área de intersección, también devuelve área no intersección. Combinó el resultado común con razón no común y creó una nueva forma. Ahora pasando al siguiente operador de Bitwie. Para eso, voy a escribir otro comando single end, pero antes voy a comentar esta línea y aquí voy a crear otro solo endm bitwise Voy a escribir bitwise undersco Z operator, Bitwise y este nombre de operador es Veamos qué va a hacer. Creo otra variable, BitWisundersCoe, Básicamente, va a devolver la razón no intersecada Déjame mostrarte Sol type, CV, dot, Bis, Zr. Es el Runbss al principio, voy a pasar el rectángulo Entonces voy a pasar el círculo. Y voy a mostrar esta imagen. Entonces escribe, CV punto, soy fmthod. Yo soy show. Entonces en cambio la desnudarse, primero, voy a proporcionar un nombre de ventana como nombre ventana y pasar el mismo nombre de variable, zona BTI Entonces tenemos que pasar la zona BTI variable. Ahora, fijemos el archivo y ejecutemos este código en nuestra terminal y veamos qué devuelve. Hasta este código en mi terminal, como pueden ver, como ya les dije, va a devolver la razón no intersecada Si ponemos esta imagen una encima de la otra, va a crear razón de intersección y razón de no intersección y Za devolverá la razón de no intersección Za devolverá la Estos operadores son muy útiles para las ITS. Ahora, hablemos del último operador de Bitwis, que es BitWisno Entonces aquí, voy a escribir otro comentario final único y voy a escribir Bitwisptisn Básicamente, no devuelve nada, invierte el color binario Se volvió blanco en negro y negro en blanco. Deja que te lo demuestre. Entonces aquí, voy a declarar una variable llamada beat is underscope nada. Bitwise nada igual al pensamiento Civ, bit a bit, nada. Entonces dentro de estos vestidos redondos por ahora, voy a pasar este círculo. Para mostrar el ejemplo, no necesitamos combinar tanto la forma geométrica Solo necesitamos una sola forma geométrica. En nuestro caso, voy a usar este círculo y luego C pensó que soy de Matin Después dentro de los vestidos redondos, primero, necesitamos proporcionar la nuca de la ventana Voy a copiar la misma variable leap que Window nip y luego necesitamos proporcionar la variable. Y voy a poner este archivo. Después de configurar este archivo, también, voy a comentar esta línea, no necesito esta línea por ahora. No sé cómo mostrar éste. Entonces después de establecer este archivo, si ejecuto este código en mi terminal, como pueden ver, este es Btis no operador Como te dije, invierte el color. No invertir el color. Básicamente, convierte cero en uno y uno en cero. Es por eso que nuestro algo se ve negro y nuestro fuera del área del círculo y el área de la ventana se ven blancos. Esto es por este structurim. Espero que entiendas cuál es el uso de los operadores BTs y cómo podemos usarlo. Es muy esencial saber que estos operadores son muy importantes cuando trabajamos con nosotros. No te preocupes, vamos a conocerlo en nuestras secciones de proyectos. Así que gracias por ver este video. Estén atentos para el próximo tudio. 16. enmascaramiento: Hola, chicos. Me alegro de verte de vuelta. Una vez más, estoy de vuelta con otro tutorial, relacionado Python open CV. Y en este tutorial, vamos a hablar de enmascaramiento. En nuestro tutorial anterior, discutimos sobre el operador BTIs, y esencialmente usando el operador BTI, realizamos Musk En una oración simple, almizcle se utiliza para enfocarse en la razón especificada de una imagen mientras se ignoran otras posiciones En semi abierto, el almizcle se utiliza para enfocarse en razón especificada de una imagen mientras se ignoran otras, y esto se logra creando una imagen de máscara binaria donde los otros resultados de los intersets son blancos y el resto Como saben, el blanco representa con 255 y el negro representa con cero. Y la máscara se puede aplicar a la imagen original para filtrar o manipular las áreas deseadas. Supongamos que si tienes imagen de personas y quieres enfocarte solo en sus rostros, en ese caso, entonces puedes aplicar máscara en sus rostros y ocultar áreas innecesarias. Ahora veamos cómo funcionaba realmente en C. abierta Como pueden ver, aquí leí un archivo y muestro esta imagen. Y a continuación, voy a importar el moding de numbi porque vamos a crear una imagen en blanco usándola Entonces voy a escribir o, importar NumPi como N P. Entonces voy a crear una imagen en blanco Entonces aquí voy a declarar una variable en blanco, una igual a Np punto cero. Luego dentro del proceso redondo para proporcionar la forma para agarrar la forma, am tipo imagen, punto, forma. Luego dentro de la resis cuadrada, necesitamos proporcionar la dimensión de la forma. Recuerda, la dimensión de la máscara es muy importante. Tenemos que tomar el mismo tamaño de esta imagen. Aquí voy a pasar dos puntos y también necesitamos tomar el tipo de datos para Tata tipo D tipo Es sencillo en Imo tipo I NDA. Y si quieres mostrar esta imagen en blanco, puedes simplemente en el tipo Cm punto, y por método. Entonces dentro de la ronda está héroe tipo negro y coma, y voy a pasar la variable negra. Voy a satisfacer. Ahora voy a dibujar un círculo sobre la imagen en blanco y voy a llamar a la máscara. Aquí, voy a crear una variable llamada máscara máscara igual a máscara, igual a C punto subcal Dentro del receso redondo, primero, necesitamos pasar la imagen donde vamos a crear y dibujar la máscara. Así que pasa negro. Entonces necesitamos pasar la posición central, y agarrar el centro para definir la posición central, su tipo, imagen IMG, punto, forma, Es el hueco cuadrado, uno dividido, dividido por dos Y a continuación, imagen, punto, forma, es un cuadrado es cero dividido, dividido por dos. Y ahora también tenemos que pasar el radio por radio por ahora, voy a tomar 100 pixel, y luego tenemos que pasar el color y quiero 55 ful color blanco como espesor igual a menos uno para llenar el círculo de color blanco. Y ahora necesitamos mostrar esta máscara en imagen para ese tipo de timón. Punto C V, muestro entonces en tales rotondas al principio para proporcionar un nombre de ventana, que es máscara Y luego necesitamos proporcionar la máscara variable. En qué imagen queremos crear una máscara, esta. Y si estás bajo escocés, va a mostrar tal tres imagen Se va a abrir un total de tres ventanas. Déjame mostrarte. Primero, va a abrir la imagen del gato, luego va a abrir la imagen en blanco, y esta es nuestra imagen de máscara. Y ahora voy a usar el operador Bitwise para enmascararlo. Para eso, voy a crear otra máscara variable igual a CV punto bit a bit y, operador Bitwise Después dentro de la ronda resistir, primero, voy a pasar imagen como fuente, IMG Coma, imagen como segunda fuente, imagen como segunda fuente, luego necesitamos escribir máscara máscara igual a voy a pasar esta variable llamada máscara Entonces usando bit a bit y operador, aplicamos esta máscara circular sobre esta imagen Entonces si mostro esta imagen, así voy a escribir Ammtho copiar esta línea y pegarla aquí y reemplazar máscara por máscara Establecen este archivo y luego código en mi terminal. Veamos qué reteaba. Como pueden ver, esto es lo que reteó. Esta es nuestra imagen de máscara. Después de aplicar la máscara, así es como se ralentiza. Al principio, tomamos esta imagen, luego colocamos esta imagen sobre esta imagen original y creamos una máscara. Básicamente bits y operador, hicimos el resultado de intersección de esta área Si quieres mover esta masa, sí, puedes, déjame mostrarte cómo necesitas cambiar las coordenadas. Entonces aquí, voy a desacovar líneas innecesarias. No lo necesito, así que comento todo esto y aquí, a dividido por dos, quiero mover la máscara, así que quiero agregar pixel fortificado Aquí agrego fortificado con estas coordenadas. Después de establecer este archivo y sobre este código, se puede ver, movemos el área de la máscara, movemos la posición de la máscara. En lugar de usar círculo, puedes usar un rectángulo desactivado. Simplemente úsalo para reemplazar el círculo con un rectángulo. Sólo una cosa que debes recordar para aplicar mascarilla. Es necesario tomar el tamaño real de la imagen para la imagen en negro. Si usas alguna otra dimensión, supongamos mayor que la otra enramada que esta, entonces va a lanzar flecha Usando la forma de la imagen, aquí agarramos tanto las variaciones de resolución de la imagen. Y si lo cambiamos, entonces va a tirar error. Déjame mostrarte el ejemplo. Quiero duplicar la diapositiva y comentar anterior aquí en lugar de usar la forma exacta de esta imagen, voy a tomar 300 por 300. Si lo guardo este código se convierte en no, como pueden ver, son 30. No va a funcionar porque necesitamos tomar forma real de imagen para crear la máscara. Voy a comentar esta línea y descomentar la línea anterior y establecer este archivo y volver a ejecutar este código Ahora se puede ver que devuelve el resultado. Así es como podemos aplicar mascarilla. Espero que ahora te quede claro. Gracias por ver este video estatuto para el próximo tutorial. 17. Histograma de imagen en escala de grises: Hola, chicos. Me alegro de verte de vuelta. Una vez más, estoy de vuelta con un nuevo tutorial relacionado con Python open CB y en este tutorial, vamos a aprender histograma Ahora la pregunta es, ¿qué es el histograma? Un histograma es un gráfico que traza la distribución del valor de la variable numérica como una serie de barras Vamos a entenderlo cuando iniciemos nuestra práctica. Como pueden ver, aquí abro un archivo Python man dot Pi e importo una imagen, y muestro esta imagen usando Imghofunction El histograma básicamente permite visualizar la distribución de la intensidad de píxeles en una imagen Ya sea una imagen en color o si se trata de una imagen en escala de grises, puede visualizar la intensidad de píxeles Se puede entender la distribución de intensidad de píxeles con la ayuda del histograma Que es como una garra o una trama. Eso te dará una intuición de alto nivel de la distribución de píxeles en la imagen Podemos calcular un histograma para imagen de Griske y calcular el histograma para Vamos a comenzar con histograma de computación para Griskalimages Al principio, voy a convertir esta imagen en imagen en escala de grises Para eso, voy a declarar una variable llamada gris gris igual a Cv punto CVT Color en los vestidos redondos passimge IMG Variable de imagen, coma, y luego voy a convertir esta imagen ZR en imagen Grisker , resumen uso CV, punto, color, subrayado BGR, punto, color Éste. Entonces voy a mostrar esta imagen en nuestra ventana. Tipo CV. Voy a escribir CV, punto, método IMs, IM así. Entonces dijiste los vestidos redondos primero voy a proporcionar un nombre para mostrar el cual es gris. Entonces paso coma y aquí voy a pasar la variable, gris. Ahora bien, para realmente calcular el histograma grascal, lo que tenemos que hacer esencialmente, primero, voy a declarar una variable y nuestra variable es gris, subrayado hist, histograma gris, igual a CV enseñado, aquí voy a usar un método, que es calc hist, calc hist lo que tenemos que hacer esencialmente, primero, voy a declarar una variable y nuestra variable es gris, subrayado hist, histograma gris, igual a CV enseñado, aquí voy a usar un método, que es calc hist, calc hist, éste. Entonces dentro del receso de carrera, aquí necesitamos computar el historum para la imagen a la que pasamos Y aquí sólo nos interesa pasar una imagen grayscal. Copio esta variable gris y la pongo aquí. Apacoma, entonces necesitamos pasar el canal de color, y dentro del receso cuadrado, voy a pasar cero porque estamos usando imagen en escala de grises, no imagen colorida Ahora lo siguiente que tenemos que hacer es necesario proporcionar una máscara. Entonces aquí, si quieres obtener la posición específica del histograma de una imagen, entonces puedes especificar la posición de la máscara Pero por ahora, voy a usar toda la imagen, así que no voy a pasar ninguna. Y a continuación, tenemos que proporcionar el tamaño t y el tamaño es básicamente el número de bits que queremos utilizar para calcular el histograma Cuando hablamos de histograma de trama, necesitamos entender el concepto de B. Pero esencialmente por ahora, solo establece estos dos, cinco, seis También necesitamos envolver este valor como una lista. Lo siguiente, necesitamos especificar el rango de todos los valores posibles, todos los valores de píxeles posibles. Para nuestro caso, dentro de la plaza se voy a pasar de cero coma a cinco, seis, y eso es todo Ahora voy a importar un módulo, matplot leap. Aquí, voy a importar matplot leap como PLT. Así escriba importar Mc parcela dejar como PLT. Básicamente a partir de este módulo, quiero importar Pi plot leave. Aquí voy a pasar la trama McLoteaptpi dejar Pitht entonces voy a escribir PLT dot figure Yo llamo a este método, y continuación voy a escribir PLT dot title Entonces en su roundre necesitamos establecer un nivel y nuestro nivel es la escala de grises Se trata de un histograma de escala de grises. Voy a escribir histograma en escala de grises. Entonces voy a establecer X etiqueta. Entonces escriba PLT, punto, nivel X. Dentro de los rounders, voy a llamar a estas papeleras. A continuación, tenemos que establecer los niveles Y. Entonces escriba PLT, punto Y nivel. Aquí tenemos que pasar número de pixel de pixel. Finalmente, necesitamos usar el PLT de la parcela, la gráfica de puntos. Y dentro del receso redondo, voy a pasar el muy bien llamado histograma de escala de grises hist gris Además, necesitamos establecer el límite de cruce de las xs. Voy a teclear línea PLT. Dentro del receso redondo, voy a pasar la lista del 022 56 Por último, podemos mostrar esta imagen. Aquí voy a escribir PLT dot show Método. Entonces voy a establecer este archivo. Después de configurar este archivo, voy a ejecutar este código en mi terminal. Hasta ejecutar este código en mi terminal, esta es la imagen del histograma Es la imagen del histograma de escala de grises de este gato. Básicamente, esta es la distribución de píxeles en esta imagen. Como puede ver, el número de beans a través de los Xxs representa los intervalos de intensidades de píxeles Entonces, como pueden ver, hay un pico en esa posición. Esto significa que está cerca de 125, 125 contenedores. Es malo en esta imagen hay cerca de 9 mil píxeles más que tienen una intensidad de 125 Básicamente, quiero decir en esa posición, la intensidad de píxeles cruza casi 9,000 Entonces esto es esencialmente calcular el histograma de escala de grises para toda la imagen Ahora lo que podemos hacer es que esencialmente podemos crear una máscara. Entonces podemos calcular el histograma solo la máscara particular y para crear la máscara, necesitamos importar el módulo Numbi Entonces aquí, voy a escribir import Numbi como NP. Para crear la máscara, aquí, voy a declarar una variable llamada blank, blank igual a Heuse un método llamado np punto cero Np punto cero dentro de las rotondas aquí, necesitamos agarrar la forma de la imagen Imagen de forma de punto y quiero agarrar para decir dos valores dentro del cuadrado es dos puntos, los dos primeros valores. Se va a crear un mismo tamaño de imagen en blanco. Entonces necesitamos proporcionar el valor de tipo D. Tipo D igual a dentro del curso único UI NT ocho. Entonces voy a crear la máscara usando la imagen en blanco. Entonces aquí, voy a escribir máscara asignada ancho igual al círculo de puntos CV. Vamos a crear una máscara circular. Dentro de las prensas redondas para dibujar este círculo, primero, necesitamos proporcionar la imagen, que es negra. Entonces necesitamos definir la posición central para definir la posición central dentro de las prensas redondas. Él para usar la imagen en forma de punto. Dentro de los vestidos cuadrados voy a pasar primer valor y está dividido con dividido dividido por dos, necesitamos agarrar la posición central vertical y horizontalmente. Egomotipoimagen, punto, forma, Es que dice la dirección cuadrada, voy a pasar cero dividido, dividido dos Este cálculo va a proporcionar la posición central de esta imagen. Entonces necesitamos proporcionar el radio de este círculo, que es de 100 píxeles. A continuación, necesitamos proporcionar el color. Para el color, voy a usar 255 color blanco, solo color blanco y también quiero llenar este círculo. Paso menos un vu. Este es el valor de espesor. Si pasamos menos uno, va a llenar el círculo de color blanco. Y luego voy a mostrar esta máscara en ventana N. Entonces voy a usar Andromthod v dot IM y establecer el RunResSF voy a declarar una máscara de nombre de ventana, máscara, y voy a pasar Ahora voy a crear el histoum de la escala de grises para esta máscara Voy a establecer este parámetro de máscara de parámetro como máscara. En lugar de usar máscara de hemotipo monja. Pero antes de ejecutar este código, creo que cometí algún error. No es una máscara, es un círculo. Es un círculo. Creó un círculo. Aquí creamos sólo este círculo. No aplicamos mascarilla en esta imagen. Entonces para crear la máscara necesitamos usar el operador Bitwise. Es un muy sllistic. Así declaró máscara igual a CV punto y para usar Bie endoperator bit a bit y en dicho las rondas, primero, quiero seleccionar el grisscalimage, esta fuente como fuente, gris como segunda fuente, también multi pass gray y para usar Bie endoperator bit a bit y en dicho las rondas, primero, quiero seleccionar el grisscalimage, esta fuente como fuente, gris como segunda fuente, también multi pass gray. Y necesitamos tener que pasar máscara, máscara valor igual a círculo, círculo. Aquí aplicamos este círculo sobre la imagen en escala de grises como una máscara Voy a configurar este archivo y ejecutar este código en mi terminal. Hasta correr el scude en mi terminal, aquí puedes ver el resultado Esta es la zona de la máscara. Y este es el resultado del histograma de esta imagen de máscara. Ahora puedes notar que hay mucho pico en esta imagen de histograma porque la mayoría de las áreas son blancas Es por eso que la intensidad de píxeles es alta en esta imagen. Como puedes notar en la posición de 30 Bins, tenemos una intensidad de 500 píxeles. Así es como podemos calcular el histograma de imagen en escala de grises. En el siguiente tutorial, aprenderemos cómo podemos usar histograma de imágenes coloridas Esto es para este tutorial. Gracias por ver este video, estad atentos para el siguiente tutorial. 18. Histograma de imagen en color: Hola, chicos. Me alegro de verte de vuelta. Una vez más, estoy de vuelta con otro tutorial relacionado con el histograma, y en este tutorial, vamos a aprender cómo podemos extraer el gráfico de histograma de imagen de Cana Entonces como pueden ver, ya ingresé nuestras importantes bibliotecas, CV dos y Mt plot leave. Entonces ya leí el archivo de imagen usando la función image it. Además, presento esta imagen orgénica usando el Método IM So. A continuación, necesitamos crear una nueva ventana de figura para la gráfica del histograma Para eso, voy a escribir PLT dot figure, y luego tenemos que pasar el vestido redondo Después de eso, necesitamos establecer el título de la gráfica de histograma. Para eso, voy a escribir PLT dot title. Dentro de la ronda res, voy a pasar el título nm y el nombre del título es histograma de color A continuación, necesitamos tomar el nombre del nivel X para eso, voy a escribir PLT punto X nivel Dentro de los vestidos redondos, aquí voy a llevar frijoles. Nivele los Xxs como haces, donde cada uno de ellos representa un valor de intensidad de color 02-55 De la misma manera, voy a tomar el nivel Y. Duplico esta línea y sustituyo X por Y aquí voy a escribir número de pixel, número de pixeles. Las Y xs representan el recuento de color de píxel para cada nivel de intensidad en el histograma Hasta definir niveles de título y figura. A continuación, necesitamos crear una tupla. Aquí voy a atar un nombre de variable y nuestro nombre de variable es color. Colores iguales a, como te dije, es un tupel así que voy a usar briss redondo lado el bris redondo aquí voy a tomar un total de tres valor de cinta Nuestro primer valor es B, B para el azul. A continuación, voy a tomar G. G para verde, y nuestro último es R, R para rojo, R representa rojo. Como ya sabéis, por defecto abre imágenes V en modo RGB. Aquí definimos cinta con etiquetas de canal de color para indicar qué canal de color se está procesando. Después de eso, aquí, voy a tomar un follow flop para iterar todo el canal de color Voy a teclear cuatro, voy a llamar por coma, llamar significa color Y yo significa índice en enumerar dentro de los colores redondos. Entonces dentro de este bucle de otoño, voy a crear el histograma, la imagen del histograma Hemo escriba una variable llamada HIST hist igual a CV voy a usar un método llamado calc hit, calc Entonces dentro de las rondas, necesitamos pasar una lista, y como primer elemento de lista, voy a pasar la secuencia, que es imagen IMG Esta variable. Entonces tenemos que pasar el canal, el canal de color. ¿A qué canal de color quiero dirigirme? Un día lo que quiero apuntar a todo el canal de color. Voy a pasar el número de índice. En cambio la plaza se dirige voy a pasar yo, luego me voy a pasar la máscara Por ahora, no voy a aplicar ninguna máscara, así que aquí no voy a pasar ninguna. A continuación, necesitamos definir el tamaño hist y para su talla voy a pasar dentro del cuadrado sus 256 A continuación, necesitamos especificar el rango de intensidad a considerar para el histograma Aquí, dentro de la plaza ses, voy a pasar 02-55 Al principio, pasamos la imagen de origen. Después especificamos el canal de color, cero para el azul, uno para el verde , dos para el rojo, y quiero apuntar a todo, aquí paso I. I es el número índice del canal de color. Represento el número de índice y llamada representan el miembro del canal de color. Ahora, la variable hist almacenó los valores calculados del histooma, que indican la frecuencia de cada intensidad de píxel en ese canal de color Ahora necesitamos trazar los datos del histooma para el canal de color actual Para eso, herameertype, parcela PLT. Entonces dentro de las prensas redondas, al principio, necesitamos pasar un arco, arco como aquí como un arco, voy a pasar Hite, esta variable Entonces tenemos que pasar el color. Color igual a la variable de llamada. Después de eso, necesitamos establecer X límite de exceso de 022 56 para que coincida con el rango de intensidad Para eso HerramtyGPLT, punto lima, limite. Dentro de la ronda presione aquí para pasar un ítem de la lista del 022 56 Ahora fuera del bucle cuatro, voy a mostrar la gráfica del histograma usando el plt doth. Voy a establecer este archivo. Después de establecer este archivo, si ejecuto código en mi terminal, como pueden ver, abre nuestro histograma, histograma de color Esta es nuestra imagen original. Es una imagen colorida, y como puedes ver en este histograma, tenemos un total de tres canales de color, rojo, azul y verde Y si notas cada uno de los canales de color, supongamos que para el rojo en la posición de victoria de Essex, tocó el pico de intensidad para azul en el punto 110 tocó el pico. Y en la posición 155 XX, se puede ver el canal de color verde Pico. Puedes ver la distribución de cada canal de color en este grab. Este proceso es útil para analizar la distribución de colores en una imagen y comprender su composición general del color. Básicamente en este tutorial, aprendemos cómo podemos extraer histograma de imagen en color, y en nuestro tutorial anterior, aprendemos cómo podemos extraer histograma de imagen en escala de grises Gracias por ver este video, estén atentos para nuestro próximo tutorial. 19. Umbral openCV: Hola, y bienvenidos de nuevo a otro video relacionado Abre. Y en este video, vamos a hablar de umbralización Ahora la pregunta es, ¿qué es el umbral? Básicamente, el umbral es una binarización de una imagen. En general, vamos a tomar una imagen y convertirla en una imagen binaria donde cero representa el color negro y 255 representa el color blanco. Básicamente, comparamos cada píxel con el valor umbral. Si el valor de píxel está por debajo entonces el valor umbral, entonces lo establecemos cero significa negro, y si es mayor que, entonces lo establecemos 255 significa blanco. En sentido, esencialmente podemos crear una imagen binaria solo a partir de una imagen independiente regular. Y en este tutorial, básicamente estamos hablando dos tipos diferentes de umbralización, umbralización simple y umbralización adaptada Empecemos con umbrales simples. Al principio, voy a teclear aquí un comando de un solo tramo. Voy a escribir umbral simple. Enhebrado simple. Antes de aplicar el threfolding simple, necesitamos convertir esta imagen, esta imagen coloreada en imagen en escala de grises Para eso, aquí, voy a declarar una variable gris, asignar con CV CT coloreado. Este método. Luego dentro de la ronda versus al principio, necesitamos pasar la imagen fuente que es imagen variable IMG, y luego necesitamos usar el código de color Color cvt, subrayado BGR dos grises, éste. Entonces voy a mostrar esta imagen. Entonces de tipo, CV ¿soy Somethor en el latón redondo, primero, voy a proporcionar un nombre de ventana que es gris, y luego necesitamos proporcionar la imagen gris Ahora para aplicar el umbral simple, necesitamos aplicar una función Necesitamos usar una función llamada umbral de punto Cv, y esta función de umbral de retorno. Y también devuelve Basura. Igual a, entonces necesitamos usar el método, vt umbral, umbral y dentro de los vestidos redondos, primero, tenemos que pasar la imagen fuente que es gris, y a continuación, tenemos pasar la onda umbral, un punto flotante. Por ahora, voy a pasar 150. A continuación, tenemos que pasar el valor máximo. Si el valor de intensidad de píxel es mayor que 150, entonces quiero binarizar la Si cruza la etiqueta, entonces quiero ponerle 255. Quiero decir, completamente blanco. A continuación, aquí tenemos que pasar el tipo de umbralización para el tipo de umbralización, soy tipo C punto binario Éste. Otra pregunta es qué hace. Básicamente se va a comparar cada uno de los valores de píxel con este valor de faja Si es mayor que 150, entonces va a establecerlo 255, significativamente blanco Si es inferior a 150, entonces lo va a poner a cero, que representan el color negro. Esencialmente devuelve dos cosas TAS, que es la imagen Hefold o la imagen binarizada También devuelve Tfold que es esencialmente el mismo valor lo que pasamos aquí En nuestro caso, 150. Ahora, vamos a mostrar esta imagen, así que escriba, Su tipo punto y Mthods los Rundverses al principio, necesitamos proporcionar el tipo de nombre de ventana , umbral simple, y luego necesitamos pasar las imágenes esta ahora vamos a las imágenes esta ejecutar el código en una terminal y C para Como puedes ver, esta es nuestra imagen original. Esta es la imagen en escala de grises. Esta es la versión griscal de esta imagen original y esta es la imagen umbral Esto es esencialmente lo que obtenemos, si decimos valor umbral 150. Ahora, cambiemos el valor umbral. Yo hice esta terminal y voy a cambiar, voy a hacer que sea 100 valor umbral. Además, no quiero mostrar la imagen original. Comento esta línea y además no quiero mostrar la imagen gris. También, comento esta línea. Voy a sub este archivo. Después de establecer este archivo, si ejecuto este código en mi terminal, ahora puedes ver que esto es lo que está escrito. Si decimos thrash valor 100. Ahora, el valor de píxel por encima del 100 se convierte en 255 y el valor de píxel por debajo del 100 se vuelve cero. En lugar de pasar mayor valor, si paso menor valor, déjame mostrarte. Si paso 220. Entonces configura este archivo y ejecuta este código en mi terminal, ahora puedes ver el resultado diferente. Ahora solo se pueden ver dos globos oculares, nada más. Así es como puedes obtener un resultado diferente si pagas con umbral. Ahora, invertiremos este umbral de dos. Por ahora, lo voy a hacer por ahora, lo voy a hacer 120 y establecer este archivo, después duplique esta sección. Entonces voy a cambiar el par pra subrayado inverso, I NV Además, necesitamos cambiar el método. Cv punto binario inverso, N. Además, necesito llamar a esta variable Basura subscopio NV y umbral simple NV Este es el nombre de la ventana. Básicamente, va a invertir la imagen. Píxeles de imagen, déjame mostrarte. Después de establecer este archivo, se puede ver el resultado. Este es el umbral simple original, y esta es la imagen umbral con mod inverso. Como se puede ver, invertir los valores de píxel. Ahora, la porción blanca se vuelve negra y la porción negra se vuelve blanca. Esta es la inversa, la versión de esta imagen. Ahora, en lugar de establecer la intensidad de píxeles que es mayor que 120 en 255, va a ponerla a cero. Porque aquí invertimos la imagen. Utilizamos thrash binario inverso. Básicamente, se quiere decir qué valor es mayor que 120, lo va a poner a cero y qué valor es inferior a 120, va a establecerlo en 55. Este es un umbral simple. Ahora pasemos al umbral adaptativo. Aquí voy a escribir un solo encoman una pila, y voy a escribir umbralización adaptativa En el proceso de umbral simple, necesitamos proporcionar el volumen umbral manualmente. Pero en umbrales adoptivos, salimos de la computadora para encontrar el valor umbral óptimo por sí mismo, y usando ese valor binariza la imagen Y para contactar con el umbral adoptivo, aquí, voy a declarar una variable llamada A underscoe A igual a test para thrash adoptivo, igual a Cv punto aquí, necesitamos usar un método Éste. Entonces luego dentro de la ronda ss, al principio, necesitamos pasar la imagen de origen. Aquí voy a pasar gris, la imagen gris. Entonces también, hay que decir el valor máximo. No necesitamos establecer el valor de thrash manualmente. Tenemos que decir el valor máximo y voy a decir 255. A continuación, necesitamos usar el método adaptativo método, que método se aplicará para la basura adaptativa. Voy a escribir v punto adaptativo trash main C, este. Además, necesitamos llamar al umbral Ti, que es binario punto Cv, éste, entonces necesitamos pasar tamaño de bloque por tamaño de bloque, voy a pasar 11 por fin, tenemos que pasar CV y voy a establecer Cvu tres Ahora bien, ¿qué significa eso? La función llamada umbral adoptivo es un método de umbralización, que es muy útil para imágenes con condiciones de iluminación variables en las diferentes áreas Si hablo de este parámetro, C media adoptiva undersco C, este parámetro define el método utilizado para calcular el umbral para cada píxel En el siguiente parámetro definimos el tiempo de umbralización. Aquí la puedes ver pasamos por todas partes. Es para tamaño de bloque. Represento el tamaño del área vecinal. Aquí se utilizará 11 representan 11 por 11 block up pixel. Al fin pasamos tres. Represento el peso. Ayuda a afinar el umbral. Método estos métodos ayudan en el manejo de imágenes donde iluminación puede cruzar de manera muy significativa diferentes áreas ya que se adapta a las variaciones locales. Ahora, adelante y muestra esta imagen. Aquí estoy tipo Cb punto soy de método. Y dentro de los runddresses voy a pasar el mismo nombre de variable que nombre de ventana como adoptado y coma voy a pasar la También quiero comentar estas dos líneas, esta, y esta Si Matemáticas voy a mostrar la imagen gris. Voy a poner esto bien. Ahora, ejecutemos el código en nuestra terminal y veamos qué devuelve. Esto es lo que regresa Tash adoptivo. Esta imagen. Aquí definimos el tamaño del kernel 11 w 11. Y OpenCV computa una principal sobre esos barrios. Quiero decir píxeles de barrio, y es encontrar el umbral óptimo hacer para la parte específica. Sé que técnicamente suena loco y es difícil entender lo que está pasando detrás de escena. Entonces así es como podemos aplicar el umbral adaptativo en la imagen. Umbral va a jugar un papel clave en nuestros proyectos en nuestros próximos proyectos. Por eso necesitamos entender cómo funciona el umbral. Así que gracias por ver este video, Syuned para nuestro próximo tutorial 20. Visualización de las coordenadas de los puntos en los que se hace clic en la imagen con Python OpenCV: Hola, chicos. Me alegro de verte de vuelta. Una vez más, estoy de vuelta con otro ejercicio relacionado Python open C. Hoy en este ejercicio, vamos a mostrar el punto de coordenadas cuando haga clic en la imagen. Supongamos que si presiono clic derecho sobre esta imagen en esa posición, como puede ver, imprima las coordenadas X XS e YXS coordenadas Y de la misma manera, si alabo clic derecho sobre él, se puede ver también que imprime las coordenadas. Veamos cómo podemos lograr este programa usando PyonOpenC Entonces finalmente, estamos en mi editor de código de estudio Visal. OpenCV nos ayuda a controlar y administrar diferentes tipos de eventos de mouse y nos da la flexibilidad para operar allí Hay muchos tipos de eventos de mouse. Este evento puede ser mostrado por la ejecución de este código. Como puedes ver, Hey usa un bucle one liner para la función I DIR CV dos. Yo víspera P en. Va a imprimir todos los eventos desde el OpenCV, desde el CVRator abierto Ejecutemos el código en mi terminal y veamos cuántos evate tenemos Arriba en este código, como puedes ver, tenemos múltiples eventos de teclado y mouse. Flack llave vieja, tecla de control, botón de labio de bandera, botón del mouse , botón R, tecla mayús, pero necesitamos mostrar las coordenadas cuando haga clic en esta imagen Para eso, necesitamos levantar botón hacia abajo y escribir botón abajo, botón R abajo, esto para evento. Empecemos el código. Entonces primero, voy a matar a esta terminal. Entonces voy a comentar esta línea. A continuación, aquí, voy a Leer e imagen usando la función root de imagen, lectura IM. Al principio, voy a declarar una variable llamada imagen IMG, imagen igual a CV dos IMTFunction Estoy leído. Éste. Entonces dijiste las prensas redondas. Al principio, necesitamos proporcionar la ruta del archivo, la fuente de la imagen. Es el curso único, voy a pasar gato dos puntos JPG. Con eso, necesitamos pasar el canal de color y nuestro modo de canal de color es BGR. Quiero pasar uno. Si paso cero, entonces igual a devolver imagen en escala de grises. A continuación, necesitamos mostrar esta imagen usando la función IMS. El tipo, semi dos puntos Im en su lugar la prensa corrida, primero, necesitamos proporcionar un nombre de ventana que es imagen. Entonces necesitamos proporcionar la variable, la imagen fuente IMG Y ahora necesitamos establecer un mouse llamado esa función. Vamos a pasar la ventana de imagen y usar una función definida como parámetro. Aquí modo empate CV dos punto set mouse, llámelo a eso. Luego dentro de las rondas, necesitamos pasar el nombre de la imagen, el nombre la ventana de la imagen, no la variable y el nombre de la ventana de la imagen es imagen. Es el código único, imagen tipo Imo. A continuación, necesitamos pasar una función definida por el usuario como parámetro, y nuestro nombre de función es click event. Así que escriba, haga clic, subraye el evento clave. Esta función va a manejar todos los eventos de la tecla del mouse. También va a devolver las coordenadas. A continuación, voy a llamar al mojado así que escriba CV dos puntos, weit key La tecla húmeda es un d cero. No te voy a explicar por qué necesitamos usar la clave Quit porque ya aprendemos en múltiples videos. Además, voy a destruir todas las ventanas. Entonces escribe CV dos puntos, destruye todos los Windows. A continuación, antes de crear esta función, quiero mover todo el código dentro la función if named igual a igual a mean, que es nuestra función driver. Voy a escribir I ndscoe underscoenme, undsco underscore, igual a igual a dentro de los códigos dobles undersco underscoe M, códigos dobles undersco underscoe. Entonces dentro de esta función de controlador, voy a pasar por el código. Usamos if naan igual a igual a función principal porque vamos a llamar a esta función desde la página existente Por eso necesitamos crearlo. Ahora voy a crear esta función, haga clic en evento. Primero, voy a copiar el nombre de la función, haga clic en evento, y ahí así que aquí T D nuestro nombre de función, haga clic en evento. Después dentro de las prensas redondas, esta función va a tomar múltiples argumentos. Nuestro primer argumento es parejo. Nuestro siguiente argumento es Xs. Entonces voy a pasar Y. También, va a tomar bandera. Y el último es el perdón. Entonces dentro de esta función, por ahora, voy a escribir pass. Por ahora, creo que necesito imprimir algo en una terminal. Entonces voy a escribir print statement, print. Dentro del proceso, voy a escribir, es trabajo. Antes de ejecutar este código, déjame explicarte lo que hicimos. Como puedes ver aquí utilizamos una función de OpenCV, cv dos puntos, set mouse Es un ratón llamado esa función. Dondequiera que haga clic en esta ventana ventana de imagen, luego va a llamar a esta función, haga clic en evento. Y en nuestra función de evento click, simplemente imprimimos su trabajo en nuestra terminal. Si configuro este archivo y ejecuto este código en mi terminal, puedes ver la imagen. Y cada vez que hago clic en esta imagen, como la puedes ver impresa, funciona. Básicamente, cada vez que pongo el mouse sobre él, también funciona porque en nuestra función, no especificamos qué evento en particular vamos a usar Por eso funciona en cualquier evento cuando coloco mi caja sobre ella. Además, si presiono alguna tecla, creo que todavía va a funcionar. No, no va a funcionar si presiono tecla porque aquí usamos solo mouse llamar a esa función. Ahora hablemos del parámetro de esta función. Como puede ver, tenemos parámetro f total, X, Y, lino y params Usando el parámetro event, podemos definir el evento mouse. Puede ser clic de labios, de lo contrario, clic derecho. X e Y, las coordenadas abren el evento del mouse. Luego viene el parámetro de lino. No se usa, pero sí lo requiere la firma de devolución Quiero decir cualquier bandera relevante que pase por Open C. Y luego vienen los patrones. El patrón también es un parámetro adicional. Si es necesario, entonces vamos a usar este parámetro. Entonces primero, voy a usar condición IP en esta función. Entonces escribe, vamos a verificar el evento click del mouse. Incluso igual a CV evento de dos puntos aquí voy a usar un evento, y voy a usar evento de botón iluminado, algún tipo de evento. Underscoe L, botón abajo, éste. Después dentro de esta condición IP, primero, voy a mostrar las coordenadas, y voy a mostrar las coordenadas en nuestra terminal. Subtipo prin dentro de las rondas, X voy a proporcionar un espacio, así paso todos los códigos, voy a pasar las coordenadas Y. Entonces voy a duplicar esta sección. Quiero estudiar condición de IP. Porque aquí necesitamos secretar dos condiciones IP. Uno es para ello botón abajo y otro es para escribir botón abajo. Voy a establecer este archivo. Ahora voy a ejecutar este código. Ejecuta este código en mi terminal. Si hago clic en alguna parte de esta imagen, veamos qué está escrito en mi terminal. Como puedes ver, imprime las coordenadas. Primero, imprime la posición xx, luego imprime la posición y. Si alabo patada roja en esa posición, también imprima las coordenadas. Es para lip kick y iOS rojo porque usamos la condición IP. Así que ya casi terminamos. Necesitamos imprimir estas coordenadas en la imagen. Entonces al principio, voy a usar la fuente. Para eso, necesitamos usar fuentes, tipo de Ti, fuente, EPI dos Aquí voy a usar fuente de OpenCV, CV para hacer, y aquí voy a usar fuente, subrayado, Él semis, éste, éste Ahora voy a usar una función inviil de OpenCV, que vas a poner el texto en la imagen Para eso, voy a escribir CV a eso Poner texto. Dentro de la función Put text, al principio, voy a pasar la imagen fuente, que es IMG C entonces voy a pasar una cuerda. Entonces voy a llamar a la función de cadena TR. Después dentro de los versos redondos, primero, voy a imprimir X, X. Entonces voy a concatenar con Cgation Voy a pasar dentro de los códigos sencillos C. Entonces otra vez, voy a usar congatenation sine otra vez, voy a imprimir una cadena para Y VD para imprimir la Y VD STR, Is the rounds is Y después de este stream, necesitamos definir la posición donde necesitamos colocar el texto. Y para eso, dentro de las rondas, voy a pasar excesos y Y xs Somnotipo X, Y. Luego tenemos que pasar la fase de la fuente Qué fuente voy a usar. Voy a usar esta forma variable porque en esta variable definimos la fuente. Por último, necesitamos definir la escala de fuente, que es una, entonces necesitamos definir la fuente de color coloreada, y voy a usar BGR Dije la runbress y voy a usar de color azul. 255, el primer valor, segundo valor es cero, también el tercer valor es cero. Entonces por fin, necesitamos definir el grosor de esta fuente, que es dos. Eso es. Entonces necesitamos mostrar esta imagen usando la función IM show. Entonces voy a copiar esta línea, y voy a pegarla después de eso. Además, voy a copiar esta sección y pegarla para esta condición para la clave correcta. Voy a establecer este archivo. Después de fijar esta tierra, vamos a correr el abrigo y ver si funciona correctamente o no. Entonces arriba este bacalao inout terminal, si hago clic en cualquier parte, tan rápido voy a alabar deje clic UterPrais deja clic, como puedes ver, imprime las coordenadas en la imagen X es X exceso es 130 y Ys es 170. También imprime el mismo valor. En nuestro término. Ahora voy a alabar a Rattle. Si presiono R cli como pueden ver, esta vez también imprimo las coordenadas XXs y XS Así es como podemos imprimir las coordenadas XXs y xs usando OPC Espero que ahora te quede claro cómo podemos crear. Gracias por ver este video, Horario para el próximo proyecto. 21. Detección de puntos blancos y negros con OpenCV: Hola, y bienvenidos a otro ejercicio real tt Open City. En este ejercicio, vamos a aprender cómo podemos contar ese punto y punto blanco usando Python open City. Entonces veamos la demostración. Como puedes ver en mi pantalla, lado a lado, HeaOpen total dos imagen diferente La primera imagen viene con fondo blanco. Y en esta imagen, tenemos múltiples puntos negros. Y la segunda imagen viene con fondo negro. Y también, en esta imagen, tenemos puntos blancos. Pero si notas, puedes ver que el tamaño del punto es diferente. Algunas puertas son de tres píxeles cuadrados y algunas puertas tienen casi 20 píxeles cuadrados Entonces necesitamos escribir un programa usando Open CD, que va a contar todos los puntos negros, A que va a contar todos los puntos blancos. Así que vamos a entrar en el código del estudio de visor y veamos cómo podemos crearlo. Hola, y bienvenidos a otro ejercicio de Python Open Cit. En este ejercicio, vamos a realizar detección de puntos blancos y negros usando Open CP. procesamiento de imágenes usando Python es uno de los temas más candentes en el mundo actual, pero el procesamiento de imágenes es un poco complejo y los principiantes se aburren en su primer enfoque. Tenemos un programa Python de procesamiento de imágenes muy básico para contar puntos negros en superficie blanca y puntos blancos en superficie negra usando OpenCVFunction. En este ejercicio, vamos a utilizar funciones como umbral de lectura de imagen, contornos finos y área de contorno. Como puedes ver en mi directorio de trabajo actual, tenemos un punto medio fino de Python pi. Además, tenemos una imagen punto negro un punto GPH. Esta es la imagen que vamos a utilizar para encontrar puntos negros en superficie blanca. Como puedes ver en esta imagen, tenemos múltiples negro.in superficie blanca Necesitamos contar los puntos negros usando OpenCV. Así que vamos a llegar al editor de código de Visual Studio. Entonces primero, necesitamos importar el forro OpenCV. Entonces aquí tecleamos, importamos, importamos C dos. Entonces necesitamos definir la imagen cinco baño, que es punto negro un punto GBG Voy a declarar una ruta variable igual a dentro de los códigos Dual, negro, punto un punto JBG Ahora, necesitamos convertir esta imagen en imagen en escala de grises. Para eso, voy a usar imagen en función. Primero, voy a declarar una variable gris, asignada con, voy a llamar a una función C de dos puntos IMRDImageRad Luego dentro del UndresSSF solo para proporcionar la ruta del archivo de imagen Este entonces necesitamos proporcionar un valor plano tu, que es Z. Esto puede convertir cualquier imagen en imagen en blanco y negro Ahora, necesitamos convertir esta imagen griscal en una imagen binaria Para eso, vamos a usar threshool. Escriba un umbral único y de comando y hen tipo TH y otro empuje variable. S igual a CV dos puntos ahold. Entonces dentro de esta función, primero, hay que pasar la imagen en escala de grises, esta A continuación, tenemos que pasar a. Primero, tenemos que pasar el thrash B. Aquí voy a pasar 100 Entonces tenemos que pasar victoria de nivel máximo, que es 255. Entonces tenemos que pasar el tipo, que es binario. Voy a escribir dos puntos thrash Papelera binaria IN V. Entonces voy a usar el operador Odd y aquí para escribir CV dos puntos subrayan fuertes, Observe este archivo. Ahora, déjame explicarte la función umbral. La función CV dos umbrales funcionan como si el valor de píxel es mayor que un valor umbral, se le asigna uno, tal vez blanco, de lo contrario, se le asigna otro valor, tal vez negro. Básicamente, va a convertir esta imagen en imagen en blanco y negro. Quiero decir pura imagen en blanco y negro. Se puede llamar binario a partir de una imagen. El primer argumento es fuente de imagen, que debe ser una imagen en escala de grises segundo argumento es el valor umbral, que se utiliza para clasificar los valores de píxel Si el valor de píxel de la imagen es menor que 100, entonces va a establecer cero. Si el píxel de la imagen es mayor que 100, entonces va a decir 255. Como saben, cero significa color negro y 255 significa color blanco puro. C dos, bajo scoe binario uncoe IND es un tiempo umbral. Es decir, la imagen binaria de salida tendrá el color invertido y OTSU se usa para determinar automáticamente el TheSalvdo óptimo Sé que suena bastante técnico. No te preocupes por ello. Sólo haz lo que estoy haciendo. A continuación, necesitamos encontrar los conductos. Ahora la pregunta es, ¿cuáles son los conductos? Los condes se pueden explicar simplemente como una curva une en el punto de conducción junto con el límite Mantener el color y la intensidad es la misma. Los conductos son una herramienta útil para el análisis de formas y la detección, reconocimiento y menú de objetos Los contornos dan una mejor precisión para el uso de imágenes binarias, y la función find conduit toma un total de tres argumentos. El primero es la imagen fuente. segundo es ConturTrival, y el tercero es la aproximación de contornos y los divertidos condus devuelven una divertidos condus devuelven Vamos a usar la función. Primero, voy a declarar una variable, CNT igual a conductos iguales a CV, multa Éste, contues finos. Entonces dentro de la RoundRessF necesitamos pasar la imagen fuente, que es thrash, Copo esta variable y la pego aquí. Entonces tenemos que pasar la luna retrib. Para eso, voy a usar C dos puntos ETR ist. Lista de retv Y el tercer valor es el método de aproximación. Para eso, su pase CV de dos puntos de la cadena aproximada. Éste. El método de muestreo aproximado de la cadena comprende segmento horizontal, vertical y diagonal y deja solo los puntos finales. Esto da como resultado que se almacenen menos puntos en la memoria, lo que es útil para simplificar la representación de conductos Después siguiente, dentro de la plaza versus m para pasar menos dos. Esto se utiliza para manejar diferencias en los valores escritos del método Cut fine conduce Se utiliza para controlar diferencias en diferentes versiones de C. abierto En alguna versión, devuelve total de tres valores, contues jerarquías e imagen, y en alguna versión, devuelve valor total dos, solo contut y jerarquías, y sobre todo necesitamos contornos y jerarquías sobre todo No necesitamos imágenes. Es por eso que el héroe usa la técnica de rebanado menos dos porque necesitamos seleccionar solo estos dos valores, conduce y jerarquías Entonces esto va a encontrar el en el concurso y almacenar este contorno en el valor de los CNTs Ahora, necesitamos filtrar esta confusión. Necesitamos filtrar esos condones en función de su área. Tenemos que mantener esos confunden cuya área 3-20. Quiero decir tres y 20 píxeles cuadrados. Después de filtrar este conduce, necesitamos almacenar este contule en una variable Entonces, vamos a por el filtro. Entonces aquí necesitamos filtrar la contubo por su área. Entonces primero, voy a definir uno. Este es nuestro primer punto alimentador, que es de tres píxeles cuadrados. Vamos a duplicar esta línea, y este es nuestro segundo punto palpador, dos, que es de 20 píxeles cuadrados Ahora voy a crear una lista vacía, que es X CNTs X contubos igual a, es una lista vacía Y ahora vamos a correr el bucle a través de todas las contuas Para eso, voy a usar 44 CNT, ConTun conduce, para conduce en contornos variable es con todos los contes entonces en el otoño Él usa condición p. E es uno, I S uno significa condición uno, tres píxeles cuadrados, menos de CV dos. Él para utilizar el método de área de contorno área de contorno. Entonces dentro de las rondas, tenemos que pasar los conos CNT Quiero decir, si cada uno de los contornos coincide con esta condición, N contornos y con eso, es menor que S dos, yo condición dos, con dentro de esta condición de punta, quiero anexar todos los contornos que es coincidir con esta condición en esta lista Básicamente, quiero anexar todos los mar en esta lista, que es coincidir con esta condición Hemo tipo N X lleva la función anexar. Dentro de la prensa de carreras, voy a pasar los conductos particulares, CNP. Eso es. Ahora, vamos a explicar esta forma. Primero, ejecuto un seguimiento a todos estos contornos que almacenamos en esta lista, tu lista. Entonces cada uno de los contornos hace esta condición y la condición está en el contorno está entre tres píxeles cuadrados a 20 píxeles cuadrados, anexan este contorno al menos X contues Y ella crea el Dist conduzca. Ahora necesitamos imprimir la longitud del conduce para imprimir cuántos. En nuestra imagen. Para eso, fuera del fur lo amtype print statement, print dentro de los latones redondos, dentro de los códigos dobles, Hemotype número total de Y aquí, voy a usar el método de Estring. E string, luego dentro de las maldiciones, quiero imprimir la longitud de esta lista Entonces voy a usar la función de longitud AN y dentro del receso redondo, voy a pasar exent la lista. Voy a establecer este archivo. Y antes de ejecutar este código, vamos a revisar el código si cometí algún error o no. Creo que está bien. Vaya, hay un error. Sí, éste. Necesitamos mover esta selección fuera de las llaves redondas. Entonces corté esta sección y puse fuera de los tirantes redondos Y voy a poner este archivo. Y después de configurar este archivo, vamos a ejecutar el código y ver fácil de trabajar correctamente o no. Entonces para ejecutar este código, como puedes ver, el número total de punto negro es 23. Entonces funcionó a la perfección. Por lo que hemos sumado 23 negros.en esta superficie blanca. Entonces espero que ahora te quede claro cómo podemos contar puntos negros en superficie blanca usando Python Open C. Usando este programa, puedes contar puntos negros. También puedes contar los puntos blancos. Déjame mostrarte. Entonces como pueden ver, tenemos otra imagen en mi directorio de trabajo actual. Esta imagen viene con fondo negro, y en este fondo negro, tenemos puntos blancos, pero tenemos cientos de puntos blancos, y el tamaño del punto blanco es diferente. Algún punto blanco tiene casi tres píxeles cuadrados y algún punto blanco es de casi 20 píxeles cuadrados, necesitamos contarlos todos. Conductemos el pod de estudio de usuarios. Entonces como se puede ver en mi directorio de trabajo actual, tenemos esta imagen, punto blanco punto pinch. Primero, voy a copiar la ruta del archivo, de lo contrario archivo en. Entonces voy a reemplazar la ruta del archivo, así que voy a duplicar esta línea y comentar la línea anterior y reemplazar ese punto por punto blanco png. A continuación, voy a cambiar el número total de punto blanco. Es, también, voy a ejecutar este mismo programa, pero sólo para cambiar una cosa. Esta vez, no necesito esta inversión. Sólo necesito thresh bind. Entonces voy a duplicar esta línea y comentar anterior y eliminar INV Solo necesitamos thresh bind, y voy a establecer este archivo Up configurar este archivo. Si ejecuto este código en mi terminal, veamos qué escribió. Arriba corre este código, como puedes ver número total de puntos blancos, 583. Entonces así es como podemos contar también el punto blanco. Solo tenemos que cambiar el enlace del thrash. Si quieres contar el punto negro, entonces necesitas invertir el enlace de thrash, y si no lo haces, entonces no necesitas invertirlo Entonces esto es para este tutorial. Gracias por ver este video Estén atentos para el siguiente tutorial. 22. Dibuja formas rectangulares y extrae objetos: Hola, chicos. Me alegro de verte de vuelta. Una vez más, estoy de vuelta con otro proyecto Python open CP, y en este proyecto, vamos a dibujar una forma rectangular y extraer objeto usando Python open Civing Déjame mostrarte la demostración. Como pueden ver, aquí abro ventana de imagen de gato. Ahora voy a seleccionar alguna área de esta imagen. Elogio el clic de labios y la liberación en esa posición. Como puedes ver, aquí crea una forma de rectángulo. Y si tu selección no está bien, también puedes restaurar la ventana. También puedes restablecer la ventana, necesitas presionar R. De nuevo, puedes hacer esta selección. Y si crees que tu selección es buena, entonces necesitas presionar la palabra clave C en tu teclado y va a recortar esta sección y mostrarla en una nueva ventana. Como puedes ver, Harry pinta la imagen de recorte, y ésta muestra la imagen en esa ventana. Si quieres quint esta ventana, solo presiona Q para citar el programa Y para ejecutar el programa, vamos a usar argumento de línea común. Esto es lo que vamos a crear en este proyecto. Entonces comencemos la práctica. Aquí vamos a escribir un código Python que permitió al usuario seleccionar y recortar parte de una imagen dibujando un rectángulo usando weds del ratón Al principio, necesitamos importar módulos. Primero, voy a importar OpenCV, tipo de sonido CV dos Entonces voy a importar otro módulo que es arc perse Voy a teclear importar piezas Rc. Entonces, ¿cuál es el uso del módulo de examen Rc? módulo de examen rc se utiliza para manejar argumentos de línea de comandos No te preocupes, lo vamos a aprender más tarde. Ahora, inicialicemos la lista de puntos de referencia. Aquí voy a crear una lista vacía, y para eso, voy a tomar esta variable nombre RF subrayado punto de referencia Punto de referencia igual a él es una lista vacía. Entonces voy a declarar otra variable crop, por defecto, Cp igual a Fs. Esta condición son forbs. La variable de punto de referencia es lista vacía. Que va a almacenar el punto de partida y el punto final del rectángulo. Y crop es el valor booleano, que se utiliza para rastrear si el recorte está A continuación, vamos a utilizar la función de evento para mouse, que va a rastrear los clics del mouse. Para eso, vamos a usar básicamente dos eventos de mouse, que es lap bottom down y lap bottom up y vamos a usar esto para mouse evento en una función. Hem drew declara la función F y nuestro nombre de función es la selección de forma. Selección de subendoscopio de forma. Selección de forma dentro de los vestidos redondos. Primero, va a tomar evento como parámetro. Aquí tenemos que pasar el evento. Evento, entonces tenemos que pasar Xxs y YxS. A continuación, voy a pasar las banderas. Al fin, voy a pasar patrón. Dentro de esta función, necesitamos usar estas dos variables. Aquí voy a declarar esta dos variables como variable global, algún tipo punto de referencia global y la siguiente variable es crop. Ahora, si se hizo clic en el botón tardío del mouse, registre las coordenadas X iniciales y las coordenadas Y e indique que se está realizando el recorte Quiero decir si hago clic en el botón de vuelta en la ventana, entonces va a agarrar el punto rectángulo inicial. Así que necesitamos usar evento de condición IP igual a igual a aquí voy a usar mouse lip button event. Voy a escribir C guión bajo del evento de dos puntos, y voy a usar el botón de labios abajo evento botón abajo, este Entonces dentro de esta condición IP, voy a decir el punto de referencia de onda punto de referencia igual a aquí lo voy a decir dentro de los cuadrados, dentro de las rondas, voy a establecer el primer El primer valor es X, Y. Aquí usamos if event equal to equal to let button down, entonces va a agarrar los Xxs e YX y coordinarlo y guardarlo en esta lista vacía Ahora también necesitamos agarrar el punto final para ese tipo de dobladillo condición ellip Else si evento igual a igual ir. Esta vez, voy a usar CV dos puntos, incluso, guión bajo, y esta vez voy a usar botón de labios, botón p. Quiero decir, cuando soltamos el botón lapeado, entonces quiero agarrar el punto final del rectángulo para agarrar la coordenada, necesitamos usar apenFunction Tenemos que añadir otro punto xs e YxS apuntan a esta lista vacía Para eso, voy a escribir punto de referencia punto apen. Cuando dijiste las vueltas, voy a pasar las coordenadas, coordenadas de XX YX Ahora podemos dibujar un rectángulo porque ahora tenemos el punto de partida y las coordenadas N. Es la función y fuera de la condición, voy a dibujar el rectángulo. Entonces escriba C rectángulo de dos puntos. Luego dentro de las rondas en nuestro primer parámetro, necesitamos pasar imagen En el segundo parámetro, necesitamos pasar la primera coordenada. Coordenada Xxs e Y exceso de coordenadas juntas. Para seleccionar la primera coordenada, voy a atar punto de referencia punto de referencia. Dentro de la resis cuadrada, voy a dormir la primera vista. Entonces voy a pasar cero. Y luego en el cooma otra vez, voy a teclear punto de referencia Dentro de la resis cuadrada, voy a pasar una. Se va a seleccionar la segunda vista. Donde ya guardas, las Ss y Xs coordinan. Después de eso, necesitamos seleccionar el color, el color del rectángulo. Dentro de los vestidos redondos, necesitamos proporcionar color como formato GR. Para el azul, voy a pasar cero. Para verde, voy a pasar 255. Y para rojo, de nuevo, voy a pasar cero. Básicamente, quiero el color verde. Entonces tenemos que pasar el grosor del borde rectangular. Voy a pasar dos y después voy a mostrar el rectángulo en esta imagen. Para eso, voy a usar el método IMS, veces CV dos puntos iMso luego dentro de las prensas redondas, pasaré dentro del código doble, necesito pasar el nombre de la ventana que Entonces tenemos que pasar la variable de imagen. Imagen. Escribimos una función de evento de mouse que puede agarrar el punto de inicio del rectángulo y el punto final del rectángulo y también puede dibujar un rectángulo en una imagen. Y ahora necesitamos construir el analizador de argumentos y analizarlo Es la función. Al principio, voy a declarar una variable llamada AP. AP igual a escuchado voy a llamar a este módulo arc parse tipo R parse. A partir de aquí, voy a ejecutar una función llamada analizador de argumentos. Éste. En la siguiente línea, voy a analizar el argumento. Para eso, voy a escribir punto AP aquí voy a usar otra función llamada add argument. Agregar argumento underscoe. Agregar argumento dentro de los rounders, aquí al principio, necesitamos pasar una pantalla Wh va a trabajar como nombre, de lo contrario, lino. Dentro del doble curso, voy a pasar I. Luego fuera de la cita, tenemos que pasar el mismo argumento. Dentro del doble curso, voy a pasar imagen. Com este argumento es muy importante, así que voy a hacer que se requiera. Requerido, igual a verdadero. Y para entender la línea, también, voy a escribir y a entender la línea con qué propósito escribo esta línea. Voy a añadir un infierno. Infierno igual a dentro del doble curso, voy a escribir. Este es el camino a la imagen, así que escribe path to image. No te preocupes, te lo voy a explicar paso a paso. A continuación, tenemos que hacer un análisis del argumento. Para eso, voy a escribir otra variable args. Args igual a, voy a llamar a una función llamada palabras. Palabras dentro de la ronda ress voy a pasar apt parse arc. Voy a llamar a una función parse arc. Ahora déjame explicarte ¿qué es eso? Por qué utilizo estas funciones. Básicamente, se construye un analizador de argumentos usando la biblioteca de análisis de arco Al principio, aquí creamos un objeto analizador de argumentos. El objeto analizador de inicialización y argumento, que manejará el argumento de línea de comandos pasa al script A continuación agregamos un argumento de imagen. Yo e imagen, estas son la opción corta y larga para el argumento. El usuario puede especificar ya sea al ejecutar el script, y luego pasaremos requerido true. Se quiere decir que el argumento es obligatorio. Si el usuario no proporciona la ruta de la imagen, el script pasará por un error. A continuación pasamos L básicamente esto proporciona descripción de un argumento, y en la siguiente línea, se hace un análisis del argumento. Primero, hablamos de apt pass Rg. Este método analiza el argumento de línea común y devuelve un objeto. Entonces usamos una función llamada verso. La función verso convierte argumento parse en un diccionario. Se puede acceder fácilmente al valor por su nombre de argumento. Básicamente, cuando ejecutamos este script desde nuestro terminal, entonces podemos proporcionar directamente la ruta de una imagen. Y ahora necesitamos cargar la imagen y clonarla. Además, necesitamos configurar la función Globo del ratón. Déjame mostrarte cómo cargar la imagen, voy a crear una imagen de nombre variable. Imagen igual a. Aquí voy a leer la imagen usando la función de lectura de imagen. Entonces escribe v imagen de dos puntos leída, me leen. Luego dentro de las prensas redondas, aquí necesitamos proporcionar la ruta del archivo de imagen para leer la imagen. Pero como te dije, vamos a pasar la ruta del archivo cuando ejecutemos este script como argumento, y ya lo hicimos usando el método arc purse. Entonces desde el método de arco monedero, voy a pasar RCs esta variable y dentro del receso cuadrado, necesitamos pasar la imagen Entonces voy a clonar esta imagen, así que escribe otra variable clon igual a la función de copia de punto de imagen. A continuación, voy a asignar un nombre de ventana para esta imagen. Sono tipo CV a nombre ventana, ventana de nombre, ventana Dentro de las rotondas voy a pasar la imagen del mismo nombre Y ahora voy a configurar la función de devolución de llamada del mouse. Llamada del mouse C V de dos puntos. Dentro del proceso de ejecución, primero, tenemos que pasar la ventana en qué ventana, quiero establecer la devolución de llamada del mouse que es imagen Entonces tenemos que llamar a un evento en el que evento queremos llamar y quiero llamar a este evento selección de forma. Copia el nombre del evento y pégalo aquí. Ahora vamos a comprobarlo y es que funcione correctamente o no. Aquí, voy a escribir C dos, punto, bastante clave. Dentro del proceso redondo, voy a pasar Z y también voy a destruir todas las ventanas. Voy a escribir C dos puntos, destruir toda la ventana. Pone código en mi terminal. Como pueden ver, no me equivoqué la ortografía de. Es E, no A. Voy a poner este archivo. Si ejecuto este código en mi terminal, como pueden ver, va a devolver un error porque Harry no pasa el argumento. Pero si paso el argumento, quiero decir el argumento de la línea de comandos. Si paso el argumento de la línea de comandos, entonces voy a escribir el script, algunos para ejecutar el script, algunos tipo Python. Espacio, el nombre del archivo M punto Pi. Entonces voy a escribir ID a continuación voy a pasar el FlePat Como puedes ver, nuestra ruta de archivo es cat two dot JPG. Aquí voy a escribir gato dos puntos JPG. Entonces voy a darle a Enter. Después de que golpeé Entrado, creo que hay un error. Aún hay un error. Pero funciona. Como pueden ver, puedo dibujar los rectángulos. Como puede ver, está escrito en error de índice, menor índice fuera de franja, línea número 18 Primero, para resolver el problema. Voy a borrar esta terminal y luego saltar a la línea número 18. Sí, creo que identifico el problema. El principal problema es que necesitamos mover estas dos líneas dentro de la condición del labio, no fuera de la condición del labio. Entonces voy a moverlo dentro la condición de labio y el conjunto de este archivo de nuevo. Si cavo otro código en mi terminal, va a arrojar un error Pero si ato Python, si paso el argumento de la línea de comandos, punto principal pi I, luego paso el nombre de la imagen gat dos puntos JPG, presiono Enter. Como puedes ver esta vez funciona perfectamente y no arroja ningún error, y como puedes ver, todavía podemos dibujar rectángulo usando nuestro cursor. Nuestros eventos de mouse funcionan perfectamente, y no arrojan ningún error en nuestra terminal. Como puedes ver, podemos dibujar múltiples rectángulos. Después haga clic en el mouse, asumo como punto de partida y cuando suelte el mouse, principalmente el click izquierdo, entonces va a asumir el punto de liberación como punto final del rectángulo. Realizamos nuestro 80% de trabajo. Ahora necesitamos recortar el área de selección de esta imagen. Hagámoslo. Voy a leer la terminal también, voy a comentar ambas líneas, de lo contrario, también, podemos eliminarla. Ahora voy a ejecutar un loop que va a mostrar la imagen infinitamente hasta que alabemos a Q. Aquí voy a escribir archivo. Dos. Después dentro del Valor, al principio, voy a mostrar la imagen y esperar a que presione la tecla Para eso, soy tipo V dos, ¿soy tan método, soy así Después dentro de los vestidos redondos, voy a pasar la imagen del nombre de la ventana. Además, voy a pasar la imagen de origen que se almacena en una imagen variable de imagen. A continuación, voy a asignar una variable llamada key. Clave igual a CV dos puntos clave húmeda. Dentro de las prensas redondas, voy a pasar una. Ahora el quoti es YI pase uno. Va a esperar elogios clave por un milisegundo. Si se elogia una clave, capturó el código clave, con eso, voy a pasar un bocado, un código bit a bit, cero X si H. Esta operación bit a bit asegura que solo se consideren los últimos ocho bits Garantiza mejor la compatibilidad multiplataforma para los coodes clave de captura Ahora después de crear el rectángulo, si presiono rkyword, entonces quiero restablecer la ventana Para eso, necesitamos ver una condición. Tenemos que establecer la condición de IP. Si clave como te dije, va a capturar el código clave. Clave igual a ella para ejecutar una función llamada ORD, o dentro de los rundres dentro de los códigos Dugal, clave R, luego dentro de la condición IP, quiero clonar Voy a escribir imagen igual a clonar. Copia de punto. A continuación, si paso C, entonces quiero romper el bucle. condición de hemotipo, LC K igual a igual a ORD, está en las rondas está en la cita, C, luego romper el bucle Descanso. Ahora la pregunta es, ¿qué es la función RD? función ORD convierte el carácter R, lo contrario carácter C en un AI V permito la comparación con el código clave, que se captura desde la función Wek Ahora fuera del bucle Y, necesitamos recortar la imagen. Para eso, de nuevo, voy a usar yo condición. Entonces root yo aquí quiero llamar a la función len AN dentro de los versos redondos, voy a usar el llamado punto de referencia. Copio este punto de referencia y lo pego dentro de la función len. Si la longitud de este punto de referencia es igual a dos, inserte la condición. Recortar la imagen. Por lo tanto, escriba variable, recortar imagen por debajo del alcance Recortar imagen igual a dos, y aquí voy a usar la imagen clonar. Voy a copiar este clon de variable. Entonces dentro de la plaza dice, necesitamos definir la posición del cultivo. Pero permítanme explicarles qué es el punto de referencia igual a igual a dos. Por qué uso esta condición. Arriba el usuario phis selección del área y crear el rectángulo y ater presionando C para hornear el bucle. El código va a verificar que el punto de referencia mantenga dos valores o no, y los dos valores representan el punto inicial y el punto final del rectángulo. Entonces a partir de la imagen clonada, necesitamos definir el área de recorte para recortar la imagen, vamos a usar la técnica de rebanado. Aquí tipo Imo, punto de referencia R punto underscoe está en las plazas, voy a pasar cero Entonces otra vez, voy a usar resis cuadrada aquí voy a pasar una. Entonces voy a usar colon. No te preocupes, voy a explicar los puntos. De nuevo, voy a escribir punto de referencia. Es que las direcciones cuadradas esta vez voy a pasar una y una. Co el siguiente valor, voy a pasar por hierba. Punto de referencia, yo en la resis cuadrada, voy a pasar cero. Además, voy a pasar cero. Colón, punto de referencia dentro de la plaza s es Helm para pasar uno y luego dentro los cuadrados es voy a pasar cero. Ahora permítanme extender la coordenada esta técnica de rebanado. Esta selección es para la selección de altura. Se va a seleccionar el área desde la dirección YxS. Es fila de trabajo es. Se va a seleccionar desde el punto YXS y terminando el punto YXS y la siguiente selección es para columna Se va a seleccionar el ancho. Primero, va a seleccionar el punto xx inicial y luego vas a seleccionar el punto XS final. Entonces voy a mostrar esta imagen de recorte en una nueva ventana usando IMSHOFunction Aquí voy a escribir cv dos puntos Imo dentro de la carrera presiona primero completamente para pasar el nombre de la ventana que es Crop Image. Recortar subrayado imagen, coma, entonces voy a pasar la variable crop image, el área exacta que quiero mostrar, y además voy a ejecutar ct C dos wet key Heunpass Updo eso dentro de la condición IP, voy a destruir toda la ventana Para eso, voy a escribir CV a punto, destruir todos los Windows. Eso es. Voy a establecer este archivo. Ahora, vamos a configurar el archivo y si ejecuto este código directamente en mi terminal, como saben, va a lanzar una flecha. Voy a ejecutar este código desde la línea de comandos. Primero voy a escribir Python space, fine name main dot pi dot pi space I space, y luego necesitamos proporcionar la ruta del archivo, que es cat two dot JPG. Si pulso Enter, como pueden ver, se muestra la imagen. Ahora, voy a seleccionar alguna área de esta imagen. Voy a seleccionar este es nuestro punto de partida y este es nuestro punto final. Selecciono esta área. Creo que no me gusta esta selección. Quiero eliminar esta selección. Para eso, como saben, ya usamos un Kort, que es R. Si presiono RKOD va a eliminar Si selecciono la imagen varias veces, también si hago clic en R, entonces va a eliminar esta selección. Pero después de seleccionar el área, si alabo, C, entonces como pueden ver, recorta esta sección y la muestra en una nueva ventana. Así es como funciona. Espero que ahora te quede claro, cómo podemos crear éste. Gracias por ver este video, estén atentos para el siguiente tutorial. 23. Detección y extracción de texto con OpenCV y OCR: Hola, chicos. Me alegro de verte de vuelta. Una vez más, estoy de vuelta con otro proyecto relacionado Python open CV. Y en este proyecto vamos a realizar tomas detección y extracción usando Python open CV. Como vamos a tomar ayuda de ORC. Quiero decir Tsat ORC. Como puedes ver en nuestro directorio de trabajo actual, hay una imagen llamada simple punto JPG. Si abro esta imagen, como pueden ver en esta imagen, tenemos texto. Tenemos una sentencia. Se trata de un texto sencillo. También, tienes otra frase. El texto está en razón diferente. Y ahora necesitamos extraer el texto de esta imagen y necesitamos guardarlo en un archivo de texto para extraer el texto, vamos a tomar ayuda de That Oc Ahora veamos qué es That Os y cómo podemos descargarlo en nuestro sistema local Antes de comenzar nuestro próximo proyecto, necesitamos descargar That OC y necesitamos instalarlo en nuestra máquina local Abre Google y busca Desert OC. A continuación se le proporcionará un enlace y es necesario hacer clic en el primer enlace del motor TesArc OpenSurceoc Pero antes de abrir este enlace, hablemos de That OC La prueba es un reconocimiento óptico de caracteres zin para varios sistemas operativos Se trata de un software libre lanzado bajo la licencia Apache. Básicamente, es un reconocedor óptico de caracteres. Utilizándolo, podemos extraer texto de una imagen. Antes de comenzar el proyecto, necesitamos instalarlo en nuestra máquina local. Voy a dar click en el primer enlace. Se volverá a ensuciar a una página web de Github. Tarecoc es una herramienta de línea común. Podemos ejecutarlo a través de nuestra paleta común y utilizándola, podemos extraer texto de una imagen. Ahora necesitas saltar a la sección de instalación, desplazarte un poco hacia abajo, y aquí puedes ver esta sección, Instalando Tresorat Entonces necesitas instalar el paquete binario TrasatypBuild . Simplemente haga clic en este enlace. Se redirigirá a esta página. Desde esta página, podrás encontrar la versión diferente de este traseract También se pueden encontrar diferentes sistemas operativos. Soy usuario de Windows, así que estoy buscando Windows. Si eres Mcuser entonces usa este enlace . Entonces soy usuario de Windows. Por eso me salto a esta sección. Entonces necesitas hacer clic en este enlace, Taser en enlace UB Minh Si haces clic en este enlace te proporcionará 32 bits. Ya que proporciona 64 latidos. Doy clic en este enlace y lo redirecciona a esta página. Estoy usando sistema operativo de 64 bits, así que voy a dar click en este enlace That ORC, W Quiero hacer clic en este enlace e iniciar mi descarga. Ahora una vez finalizada la descarga, necesitas abrir la carpeta y necesitas instalarla como otro software. Entonces puedes abrirlo directamente. De lo contrario, puedes abrirlo ejecutarlo como administrador. Entonces necesitas seleccionar el idioma, luego hacer clic en Siguiente y debes seguir este sencillo proceso. Siguiente Mezclar siguiente. Estoy de acuerdo. Quiero instalarlo para todos los que usen la computadora, así que hago clic en siguiente y luego solo presiono mix. También desde esta sección, puedes seleccionar la carpeta de destino y voy a dejar como está. Después hago clic en Instalar e iniciar el proceso de instalación, y nuestra instalación está completa. Vuelvo a hacer clic en Siguiente y haga clic en terminar. Entonces necesitamos encontrar la carpeta de instalación. Yo hago clic, así que voy a hacer clic en Crve y luego voy a saltar a los archivos del programa Se puede ver que encontramos la carpeta llamada TsArcorc. Si abres esta carpeta, aquí podrás encontrar todo el archivo necesario para Trasact Luego volvamos al archivo del programa y al principio, voy a cambiar el nombre de esta carpeta. Sólo quiero llamarlo Tsat. Voy a quitar dash y ORC. Trato de llamarlo Tsat. Y entonces dije este nombre. Ahora necesitamos abrir esta carpeta ag y voy a copiar la ubicación del archivo. Doy clic en esta ruta de archivo y acabo de copiar esta ruta de archivo. Entonces necesitas agregar esta ubicación de archivo a tu ruta. Para eso, busca PAT y necesitas abrir estas variables de entorno. Después basta con hacer clic en las variables de entorno, y es necesario seleccionar la sección PT. Entonces solo eso y agrega un nuevo Camino. Ahora necesitas pegar la ruta del archivo Tsat. Configura este entonces necesitas abrir tu shell de energía de Windows, y necesitas atar That TE WSE RACT. Taser guión guión infierno. Si presiono Enter, veamos qué devuelve. Como puedes ver, está funcionando. Desde esta línea de comandos, puede usar directamente Desarat y extraer texto de una imagen Pero vamos a usar el lenguaje de programación Python y crear un programa sofisticado. En esta sección, aprendemos cómo podemos instalar Disac y cómo podemos configurarlo como variable de entorno Vamos a usar Dsarec con Python. También necesitamos instalar un módulo, así atar P, instalar el espacio Pi desierto, PI TeS E RA CT. No está sentado, es Tsat. Voy a quitar R y reemplazar por T. Luego solo instala este módulo en tu sistema local. Es necesario para nuestro proyecto. Golpeé Enter. Después de presionar Enter, como puedes ver, descarga este módulo e instálalo en nuestro sistema local. Así que después de instalar TsaIcos y configurarlo como una variable de entorno Con eso, ya instalamos un módulo, que es Pitste. Usando la ayuda del módulo Pitsact, podemos ejecutar funciones Tsaric en nuestro Entonces, al principio, vamos a importar los módulos. Al principio, necesitamos importar módulo OpenCV, Stipe, importar Después voy a importar el módulo Pisact, Styimport Pi Entonces tenemos que mencionar la ubicación tasaic en nuestro sistema local e instalamos Tsaric en nuestro Entonces, para pasar el nombre de este Poa, que es That. Aquí escriba comando desde el modo Pisaic. 40, PisacPitsac punto De nuevo, voy a escribir Pi Esta vez voy a ejecutar un comando Tsact CMD. Tasert subraya CMD aquí, hay que mencionar la ubicación Dentro del código único, voy a escribir el nombre de la carpeta, que solo es Taserc no tasaic sobre C. En un pequeño caso, voy a Como sabes, TsARIT es un programa de línea común. Por eso necesitamos usar el comando Tsat. Entonces tenemos que leer la imagen. En qué imagen, quiero extraer el texto. Primero, voy a declarar una variable IMG, y G igual a C método IMRT de dos puntos, IMRad Luego dentro de las rotondas, tenemos que pasar la ubicación del archivo y nuestro nombre de archivo es simple punto JPG Después de leer la imagen, puede convertir esta imagen en imagen en escala de grises Además, si no quieres convertir esta imagen en imagen grayscal , sí, puedes Pero me gustaría convertir esta imagen en imagen grayscal Voy a declarar otra variable. Gris, gris, igual a y de CV dos, quiero ejecutar un método CVDLor CVT color dentro de la redondez primero, necesitamos pasar la variable en que variable almacenamos la imagen, que es IMG, entonces necesitamos pasar CV dos punto color Bsa a gris, subrayado coloreado, BGR a gris quiero ejecutar un método CVDLor CVT color dentro de la redondez primero, necesitamos pasar la variable en que variable almacenamos la imagen, que es IMG, entonces necesitamos pasar CV dos punto color Bsa a gris, subrayado coloreado, BGR a gris. Ahora, vamos a mostrar la imagen en una ventana. Para eso, voy a empatar CV dos punto, soy tan metodo. Después las rondas. Al principio, necesitamos pasar un nombre de ventana que es simplemente D y luego necesitamos pasar la imagen de origen, que es gris. A continuación, quiero ejecutar método de llave húmeda, CV dos llave húmeda, yo que la ronda brrass cero Así que vamos a ejecutar el código y ver si convierte esta imagen en escala de grises o no. Entonces, para ejecutar este código, haces una terminal, como puedes ver, y convierte la imagen colorida en imagen en escala de grises Ahora necesitamos extraer el texto de la imagen. Para eso, necesitamos ejecutar un método. Necesitamos ejecutar un método desde el módulo Pi resurrect. Entonces primero, voy a hacer una variable text, igual a, voy a llamar a este módulo Pi resucitar Pi resucitar de Pi resucitar, voy a ejecutar una función que es image to Entonces escribe imagen. Underscoe a underscoe arroyo. Éste, el último. Luego dentro de las prensas redondas, necesitamos pasar la ruta del archivo, la fuente del archivo, que es la variable gris. Ahora voy a comentar ambas líneas, no necesito estas líneas y quiero anclar el texto en mi terminal. Algún tipo print statement, print, Is the round dresses, quiero pasar la variable de texto. Método de imagen a cadena va a extraer el texto de esta imagen y va a establecer este texto en esta variable. Así que vamos a configurar el archivo y ejecutar este código en mi terminal y ver si funciona correctamente o no. Después de ejecutar este código en mi terminal, como se puede ver, se imprime el texto con éxito. Se trata de un texto sencillo. El texto está en razón diferente. Si abro este archivo de imagen, se puede ver tanto el texto. Imprimo tal como es. Puede identificar letras mayúsculas, también puede identificar letras minúsculas. Ahora necesitamos establecer este texto en un archivo de documento. Para eso, voy a abrir un archivo. Primero, voy a declarar una variable. Archivo igual a abrir dentro de las rotondas. Primero, necesitamos declarar un nombre fino, que es reconocer punto PHD, y quiero abrir este archivo, modo W plus, así que escriba W plus. Entonces tenemos que escribir el texto en este archivo. Entonces Cinco, punto, voy a llamar a la función correcta. Derecha. Entonces dentro de este método de escritura, voy a pasar la variable. Voy a pasar la variable, que es texto. Como sabes, es un buen hábito si abres algún archivo, también necesitas cerrar el archivo. Voy a escribir método de cierre de punto de archivo. Entonces esto es todo. Si configuro este archivo y vuelvo a ejecutar este código, ahora puedes ver mi terminal primero imprimirlo, este es texto simple. Entonces también, puedes ver mi directorio de trabajo actual, crea un archivo de texto de punto reconocido. Si abro este archivo, aquí verán el mismo texto, que extraemos de esta imagen. Así es como podemos usar Pi resact y OpenCV juntos, y podemos extraer fácilmente texto de Espero que ahora sea c para ti, gracias por ver este video Stu para nuestro próximo proyecto 24. Camiseta invisible con OpenCV: Hola, y bienvenidos a otro emocionante proyecto de Open CD. Hoy, este proyecto, vamos a crear camiseta invisible. Déjame mostrarte la demostración. Como pueden ver, este soy yo y estoy vistiendo camiseta negra. Y ahora voy a traer mi camiseta invisible. Como pueden ver, esta es mi camiseta invisible. Si llevo esta camiseta, me vuelvo invisible. Y también se puede ver la cama a través de esta camiseta. Se ha vuelto invisible coopeti. Al igual que el reloj invisible de Harry Potter, hicimos invisible nuestra camiseta. Para crear este tipo de efecto, me voy a llevar camiseta de color rojo. También puedes tomar color verde, lo demás color azul, pero el color rojo es perfecto para mi. Y en cuatro pasos, voy a copiar este proyecto. En SAS, necesitamos almacenar y capturar el marco de fondo. El, necesitamos detallar la tela de color rojo usando detección de color y algoritmo de segmentación A continuación, necesitamos generar máscara y necesitamos sustraer el color rojo, y por fin, necesitamos generar la salida final que es cuando creas el efecto mágico Sin perder el tiempo, saltemos a pantalla de la computadora e iniciemos la proteína. Entonces finalmente, estamos en mi editor de código ser studio. Al principio, vamos a importar el módulo. Entonces escriba, importe CV dos. Entonces voy a importar otro módulo, y voy a importar módulo Numpi . Es necesario. Importar NumPI como NP. Al principio, necesitamos capturar el video, y voy a capturar el video usando nuestra webcam. Aquí voy a declarar una variable de captura de nombre subrayado captura de video video, asignar con, voy a llamar a una función llamada captura de video, punto Cv captura de video Ya estamos familiarizados con esta función. Entonces dentro de los versos redondos, voy a pasar cero. Ahora la pregunta es ¿por qué paso cero? Porque si pasamos cero, entonces podemos acceder directamente a nuestra webcam. Podemos acceder directamente a nuestra webcam predeterminada. Si tiene múltiples cámaras web y suponga que tiene tres cámaras web en su sistema, entonces de acuerdo a sus necesidades, puede cambiar el número. Quiero iniciar mi cámara web predeterminada para que pase cero. A continuación, necesitamos darle un poco de tiempo a nuestra cámara para arma. Voy a usar el módulo T. Él escribe, importa, y quiero importar método de deslizamiento de punto de tiempo y tiempo. Dentro de la ronda bss, voy a pasar una Aquí le doy 1 segundo de retraso a nuestro código. Entonces voy a declarar variable. Primero, voy a declarar una variable llamada count, count assign con cero. Entonces quiero declarar otra variable llamada fondo. Fondo asignado con cero a. ahora necesitamos detectar el fondo. También, necesitamos capturar el fondo. Podemos usar fácilmente este fondo para enmascarar para capturarlo, necesitamos ejecutar un bucle a través de esta variable. Así que aquí voy a usar for loop para I en rango, y quiero establecer rango hasta 60. Luego dentro del bucle for, voy a declarar una variable, val escrita, return, underscore, value, val, coma Como voy a usar esta variable llamada fondo igual a quiero ejecutar la función capture dot Rt. Capturar punto Video Tat y quiero ejecutar la función de lectura. Quiero leer el video que obtenemos de nuestra webcam. Entonces Tyt video, leer método de lectura. Entonces voy a establecer una condición IP. Escribí Vallow escrito Val igual a igual a falso, luego dentro de esta condición IP, quiero continuar con esta regla Continuar. Puede que sea bastante confuso para ti. Déjame explicarte este código paso a paso. Este código Nippy Do Python se utiliza para capturar el fotograma de fondo de un video En nuestro caso, vamos a leer este video desde la webcam. A lo largo de un cierto número de fotogramas, en este caso, 60 frame. Después va a procesar los fotogramas de video y extraer un fotograma de fondo para nuestra tarea posterior. Podemos usar este marco para sustracción de fondo, lo contrario, efecto especial como pantalla verde, etcétera. Al principio, este bucle se ejecutará 60 veces, lo que significa que el núcleo dentro del techo, ejecutamos para los primeros 60 fotogramas del video. Entonces aquí ejecutamos un método de lectura, captura de video punto Método Rojo. Es un método de OpenCV, que es leer un fotograma del feed de video Y la primera variable bien escrita indica si el fotograma fue capturado con éxito o no. Se escribe true si el marco se lee con éxito. De lo contrario, escrito cae si falla. Luego viene otra variable de fondo. Como puede ver, primero declaramos fondo igual a cero. Esta variable de fondo va a contener el fotograma real que se obtiene del video. Básicamente, se va a capturar una imagen, y luego comparamos una condición si se escribe bien igual a igual a falso, esto verifica si el fotograma fue capturado con éxito. Si escrito bien falla, los prógrafos saltan a la siguiente iteración de la sala Y si la trama no fue capturada, el estado continuo puede decirle al más pobre que omita el resto del código de bucle y procese la siguiente iteración t va a asegurar que solo se consideren las tramas capturadas con éxito se consideren las tramas capturadas Y ahora fuera del bucle cuatro necesitamos voltear el fotograma de captura. Básicamente, queremos reflejar el fotograma de captura. De lo contrario, va a devolver la imagen opuesta. Para eso, voy a atar fondo igual a lo que llamamos un método de NumPI tie NP enseñado método flip Entonces dijiste primero el proceso de ejecución, necesitamos proporcionar el archivo fuente, que es fondo. Como saben, almacenamos el marco en nuestra variable de fondo. Entonces para pasar fondo, coma también necesitamos pasar Xs x es igual a uno. Voy a voltear el marco. Hasta voltear con éxito el marco de la imagen, también, necesitamos voltear el fotograma de video. Para eso, aquí voy a correr dentro de las rotondas capturadas video, y aquí voy a correr es método abierto Punto está abierto, entonces mientras bucle, escrito al coma, imagen, herético, otra variable llamada imagen igual a capturar video punto leer Mnood capturar video punto leer después de leer el video, quiero reflejar Quiero filmar todo el video. Entonces otra vez, voy a correr Condición de cadera. Si no se escribe bien, entonces dentro de esta condición IP, quiero romper el bucle, romper y fuera de la condición Ip, quiero aumentar la variable count v. Count, count igual a count más uno porque necesitamos incrementar el loo más uno, quiero incrementar este loop Entonces, para leer todo el video fotograma por fotograma, necesitamos. Tenemos que voltear todo el marco. Entonces, para leer todo el video fotograma por fotograma, necesitamos voltear los fotogramas. Aquí, dentro del bucle, voy a escribir imagen, igual a. De nuevo, voy a escribir np dot flip Método. Voltear. Entonces dentro de las prensas redondas voy a pasar la variable IMG, coma X es igual a uno Entonces también interst los xs. X es igual a uno. En nuestro grupo anterior, leímos solo 60 frame, y luego reflexiono un frame. Pero en este Valu, leemos video completo y seleccionamos todos los fotogramas, y luego volteamos todas las imágenes. Aquí volteamos nuestro video e imagen de fondo con éxito, y luego tenemos que convertir las imágenes en color HSV Por defecto, viene con color BGR. Aquí voy a declarar otra variable llamada HSV. HSV igual a CV dos para cambiar el color, necesitamos usar un método llamado CVD color, CVT color Después dentro de la prensa redonda, primero, necesitamos pasar imagen, la imagen fuente, tipo verano ING. Después para cambiar el color, voy a llamar a CV dos puntos color, subrayado A partir de aquí, necesitamos seleccionar el visir exacto dos colores HSV Entonces escriba PGR dos HSV. Éste. Va a cambiar todo el color del marco en GR a HSV Espero que ya estés familiarizado con el color HSV, y ahora necesitamos crear dos máscaras para isolucionar cierto color a partir de una imagen, sobre todo nos estamos enfocando en el color rojo también Básicamente, estamos enfocados en extraer tono de color rojo en una imagen. Eso se ha convertido a color HSV. Aquí, necesitamos crear total de dos máscaras y cada una de las máscaras necesita dos tonos de color, tono color rojo inferior y tono de color rojo superior. Aquí, voy a escribir un solo en comin configurando el rango inferior y superior para la masa uno Voy a declarar una variable. Al principio, quiero establecer el tono rojo inferior. Esto es para la masa uno. Entonces, ¿quién escribe menor tasa de subrayado. Igual a aquí, voy a usar Nb AA Mth Np AI. Entonces dentro de las rondas aquí voy a pasar una matriz. Es el cuadrado pasa, voy a escribir 140, 40. También, voy a decir la onda roja superior. Sí empiezo esta línea y voy a sustituir tasa inferior por rojo superior. Y esta vez, voy a decir que el valor 100 es 100, valor de saturación es 255 y el valor es 255. Ahora, déjenme explicarles estas dos líneas. Como puede ver, creamos una matriz numérica y en esta matriz, tenemos un total de tres Vo, Henry p tres Vo 140 y 40. El primer valor representa Hu, el segundo valor representa saturación, y el último es representa valor. Básicamente, representan etiqueta coloreada. Mido en grados. Para Open CB, utilizamos 021 80 grados, pero tradicionalmente, su rango es 023 60 Entonces viene la saturación. La saturación determina la intensidad o pureza del frío. Cero es gris y 255 es de color completamente saturado, y aquí usamos 40 y la saturación la usamos relativamente baja. Significa que el color será algo vasto o harto. Y el último valor controla el brillo. Controla el brillo del color. El cero representa el negro y 255 representa el brillo completo. El valor que utilizamos es el azul. Lo que significa que el color será relativamente oscuro. En esta variable, capturamos una especie de color azul verdoso en lugar de color rojo De la misma manera, decimos rojo superior Valor. Además, la variable roja superior contiene el mismo color, pero su brillo e intensidad es alta. No se desvanece. Y ahora voy a crear la máscara una variable. Sra. uno. Esto es mask one, Hemel mask one asignado con CV dos punto, y voy a llamar a un método llamado in range Yo rango. Entonces dijiste las prensas redondas, voy a te HSV, coma va a pasar la librada inferior y la tasa superior Coma de menor tasa, también es necesario pasar la tasa superior. Esta es nuestra primera máscara. Aquí creamos una máscara binaria basada en el rango de color especificado. Como te dije, necesitamos crear otra máscara. Sí me sale esta sección y primero, voy a cambiar el comando. Esto es para la máscara dos, y también necesitamos usar la misma variable, tasa inferior y tasa superior. Pero esta vez, voy a cambiar los ángulos de color. También, voy a cambiar los valores. Entonces aquí, voy a empatar 155 grados. Y para arriba a la derecha, voy a pasar 180 grados, y después voy a cambiar la longitud variable. Esta es la máscara dos. Y ahora voy a combinar tanto la máscara. Entonces aquí, voy a escribir máscara uno igual a masa, uno más máscara dos. Si lo marcamos, entonces permite un cotage más completo de detección de color rojo Después de marchar tanto la máscara, necesitamos refinar la máscara. Tenemos que eliminar todo el ruido de la máscara. Para eso, hemorrotida, máscara uno, máscara uno, asignar W, aquí, necesitamos ejecutar un método desde OpenCB que llame morfología X. Puede eliminar todo el punto de ruido de la Hemorrotida, CV dos puntos, morfología X. Esta. Entonces dentro de las rotondas como primer prater, necesitamos pasar la fuente, la imagen fuente metal, que es la máscara uno Después del coma, aquí es necesario llamar a la operación morfológica de apertura De nuevo, soy tipo C dos punto morph abierto. Este, primero pasamos un binnymsk que se creó anteriormente donde el píxel blanco representa el área de interés, y el píxel negro representa el fondo o las Después realizamos una operación, opinamiento morfológico. Se trata de una operación de dos pasos. Primero, realiza erosión, luego realiza delirio. La erosión elimina pequeños ruidos blancos. Especialmente píxeles aislados y dilución, restablecen el tamaño de áreas blancas más grandes. Esta operación es particularmente útil para eliminar objetos pequeños. En nuestro caso, el ruido. El ruido no forma parte de nuestra detección de medias. Por eso tenemos que quitarlo. Ahora necesitamos crear un elemento estructural, de lo contrario el tamaño del kernel. Para eso, voy a pasar coma, y voy a usar función de Numbi tipo NP Después dentro de las prensas redondas, voy a pasar kernel tamaño tres por 333 Club. Entonces también, necesitamos pasar el tipo de datos de este pixel, que es NP dot UN tight. Este indser Edwit sin signo se usa comúnmente en procesamiento de Ig porque puede representar Luego después del coma, necesitamos pasar el valor de iteración. Iteraciones, y quiero ejecutarlo por dos veces. Voy a pasar dos. Esta iteración especificó cuántas veces se aplica la operación de apertura En este caso, esta apertura se aplica dos veces. La operación múltiple aumenta el efecto estañado. Por eso necesitamos esta iteración. Después de eso, necesitamos realizar la dilatación en la máscara uno. De nuevo, voy a escribir máscara uno igual a aquí voy a llamar al método de CV dos, que se conoce como dilatarlo Entonces tipo C dos, punto, dilatar. Luego dentro de las rondas al principio, necesitamos seleccionar la máscara una Soy tipo mask one, entonces tenemos que pasar los lados del kernel. Nuevamente escriba NP punto uno. Dentro de los metales redondos, voy a pasar tres coma tres Entonces hay que mencionar la inmersión de datos, que es NP INT ocho. Entonces atracma también necesitamos mencionar la iteración, pero antes, necesitamos mover toda esta sección dentro de la Aquí voy a mencionar la iteración. Esta vez queremos sólo una iteración. Ahora el cociente es lo que se marca y básicamente ¿qué vas a hacer? Esta operación expande el área blanca de la máscara, haciendo que el resultado detectado sea más grande y llenando pequeños agujeros. Y estos s mejoran las robustas de la máscara. A continuación, necesitamos invertir la máscara. Necesitamos convertir el píxel blanco en negro y el píxel negro en blanco. Y para ello, necesitamos usar VT no es operador. Entonces primero, necesitamos escribir máscara, dos para seleccionar la máscara, dos iguales a Aquí escriba C V dos, punto, mordiendo, algún tipo B, bit a bit nada Ya aprendemos operador bit a bit. No lo voy a explicar aquí cómo funcionan los operadores bitwise, como Bt nought, bit a bit dentro de los Rundress voy a pasar Aquí refinamos la máscara correspondiente al color rojo detectado. Después de refinar nuestra sección de máscaras, necesitamos generar el out final. Y ahora necesitamos crear un total de dos salidas separadas. En la primera salida, voy a mostrar el fondo donde se detecta tlor rojo En la segunda salida, quiero excluir las áreas de comido. Vamos a crear la primera salida para el fondo. Aquí, voy a escribir y me voy a este muy bien como recurso uno. R es un recurso uno igual a dos, y necesitamos usar PTs Operator, PTI y operator Así que ate CV dos, punto, B sabio, y luego dentro de los versos redondos, voy a pasar el fondo. El fondo es la imagen, que representa la escena donde se desea mostrar las partes de las imágenes en base a la curva roja detectada. Primero, tenemos que pasar el fondo y ya creamos el fondo. Déjame mostrarte. Estos antecedentes. Como puedes ver, volteamos el fondo. Voy a copiar la variable de fondo. Voy a pegar juguetes instantáneos y operitoT es la imagen de fondo, que representan la escena donde se quiere mostrar partes de la imagen en función de su color rojo detectado Entonces después del coma tenemos que pasar la fuente, fuente dos, que es el fondo. A continuación, tenemos que pasar meta. Y voy a escribir masa igual a masa masa uno. Básicamente, estas variables almacenan el fondo donde se detecta el color rojo. Ahora necesitamos extraer los fotogramas actuales sin color rojo. De nuevo, voy a declarar otra variable RDS dos. Esto es resos dos igual a C dos, nuevo cuando usamos tis operator Es N. Entonces dentro de las prensas redondas esta vez, voy a pasar la fuente de video. Entonces como puedes ver, configuramos esta fuente de video como variable de imagen, IMG Este es nuestro video flip. Voy a copiar esta variable, y la voy a pasar aquí. Nuevamente, necesitamos pasar la fuente dos, esta es la fuente dos, y quiero asignarla con st dos. Voy a mecanografiar máscara metálica, máscara Tkoado dos. Básicamente, B towise y operador realizan la operación en dos imágenes, lo contrario, entre una imagen y una máscara Se utiliza para fusionar dos imágenes en base una operación lógica que compara el valor de píxel en cada posición correspondiente de la imagen. primera fuente es la primera imagen de entrada y la segunda fuente es la segunda imagen de entrada, y los parámetros de máscara especifican qué píxel considerar para la operación. Ahora necesitamos crear la o final, así que voy a declarar un guión bajo final variable. así que voy a declarar un guión bajo final variable Salida final equivalente a aquí voy a llamar a un método, CV dos, C dos punto agregar peso. Sonido tipo A, D, éste, claro. Básicamente, utilizamos este método para unir dos imágenes. Aquí voy a proporcionar la primera imagen, recurso uno, RD es uno. Además, necesitamos pasar el valor Alfa, que es un punto flotante. Entonces para pasar una coma entonces necesitamos pasar la fuente dos, y esto es R es el recurso dos Y otra vez, bueno para pasar el punto de flotación. En este tiempo, bien para pasar el punto de flotación beta. De nuevo, voy a pasar una. Al fin, voy a pasar Gama Val. Gamma es cero. Esta función une dos imágenes juntas combinándolas con especificar peso. Al principio, necesitamos pasar el valor fuente uno, luego tenemos que pasar el valor Alfa, luego la fuente dos, luego tenemos que pasar el valor beta, al fin, necesitamos pasar el valor Gamma. Ahora necesitamos mostrar la salida final en una ventana. Para eso, voy a empatar CV dos puntos, método Im, método FMI, FMI. Después los vestidos redondos, voy a pasar. Primera unidad para byte el nombre de la ventana, que es invisible T shirt, y también tenemos que pasar la salida final. Copio esta variable y apracma voy a pasar el valor Final. A continuación, tenemos que salir del programa donde alabamos una clave especificada. Prese la tecla ESC en nuestro teclado, quiero salir del programa Para eso, voy a declarar una variable K igual a CV dos método de clave húmeda. Tecla húmeda dentro de las prensas redondas, voy a pasar diez milisegundos de retraso Entonces me ponen una condición profunda I K igual a igual a 27, luego en tal condición, quiero romper el bucle, romper. Creo que hice alguna mística. Yo hice una muy sllistic necesitamos mover el código dentro del nivel de sangría, necesitamos moverlo intent seis Voy a proporcionar el espacio y moverlo dentro del nivel de sangría. De lo contrario no va a correr. Uno a uno, voy a mover toda la línea dentro del nivel de intendion Ahora se ve perfecto. Como saben, 27 es asykey. Es código para llave omitida. Cuando alabamos a scape key, va a romper el bucle y es nuestro programa. Ahora, vamos a configurar el archivo y ejecutar el código en nuestro terminal y ver si funciona correctamente o no. Entonces voy a presionar el botón Ejecutar. Después de presionar el botón Ejecutar, tenemos que esperar un par de segundos. Se necesita tiempo para iniciar la cámara web. Además, me voy a mudar frente esta webcam porque necesitamos agarrar el fondo. Como puedes ver en tu pantalla, abre la webcam y además puedes ver, no estoy en esta ventana. Entonces este soy yo y estoy usando una camiseta negra. Ahora me voy a llevar mi camiseta invisible. Esta es mi camiseta invisible. Como puedes verlo completamente invisible, puedes ver el mundo de fondo a través de él. Ahora voy a usar esta camiseta y volverme invisible. Después de usar esta camiseta, como pueden ver, me vuelvo completamente invisible. También puedes notar pequeños fallos y es, pero es trabajo bastante bien. Este es el proyecto donde construimos una camiseta invisible. Espero que les guste este proyecto. Muchas gracias y estad atentos para el siguiente tutorial. 25. Resta de fondo: OpenCV: Hola, chicos. Me alegro de verte de vuelta. Una vez más, estoy de vuelta con otro proyecto relacionado con Open CPI y hoy en este proyecto, vamos a ejecutar suscripción en segundo plano usando Open SIP La suscripción de fondo es una forma de eliminar el fondo de la imagen. Para lograrlo, extraemos el primer plano móvil del fondo estático sustracción de fondo tiene varios casos de uso en la línea cotidiana Se está utilizando para la segmentación de objetos, mejora de seguridad, rastreo de peatones, conteo del número de visitantes, número de vehículos en tránsito, etcétera Es capaz de aprender e identificar la máscara de primer plano. En Open Civi tenemos tres algoritmos para hacer esta operación Déjame mostrarte los algoritmos. Estos son los tres algoritmos que podemos usar para restar fondo Este es nuestro primer algoritmo, substract de fondo o MG Es un algoritmo de segmentación de primer plano de fondo basado en mezcla gaussiana primer plano de fondo Vamos a usarlo primero. Al principio, voy a importar las bibliotecas. Voy a empatar Import y nuestras primeras bibliotecas es NumPI NumPi como N P. A continuación, necesitamos importar la biblioteca más importante Importación de Corbata. CR dos. Ahora, primero, necesitamos crear un objeto usando este algoritmo. ¿Qué algoritmo nuestro primer algoritmo, data substrctorG? Yo para copiar este nombre de algoritmo y primero voy a declarar una variable donde voy a estar nuestro primer objeto. Básicamente, se trata de un algoritmo substructor de primer plano a fondo Voy a llamarlo G BG, G VG uno. Esto se encuentra y vector subsector uno, igual al tipo hermano, CV dos punto, y necesitamos llamar a otro método, y nuestro nombre de método es BG AC GA, este Entonces voy a escribir punto, y necesitamos crear el tipo de objeto, crear, y voy a pegar nuestro primer substructor de fondo, este Al fin va a pasar por ss. Este es el primer objeto que creo usando este algoritmo, substructor de fondo Mogen A continuación, voy a capturar fotograma de la cámara. Entonces voy a tomar una captura CAP variable, cap cap, asignar con ella y llamar a C punto videocapture Metal Captura de video. Entonces dentro del receso redondo, necesitamos pasar las fuentes. Vamos a encender mi cámara web predeterminada así que voy a pasar cero. Después de eso, aquí necesitamos ejecutar un bucle while infrate. Entonces voy a teclear I dentro de las rotondas una, quiero decir, verdad Si la condición es verdadera, entonces dentro de la i, primero, quiero capturar el fotograma. Necesitamos leer marcos. Para leer fotogramas, también es necesario declarar el tipo de valor Gulen. Este es el Willian Valu almacenado a Bullen Value también voy a devolver la imagen del fotograma Voy a escribir ING, igual a, y necesitamos ejecutar la función de lectura. Lectura de punto de cabina. Este método se leerá en los marcos. Al principio, va a devolver un valor vol, qué valor Bullen Se va a almacenar si hay un marco o no. Entonces entonces la imagen, va a almacenar la imagen real, lo contrario, marco real. Después dentro de la VIL, va a crear la máscara, la primera máscara usando esta imagen. Para eso, voy a crear una divertida masa G masa uno. Se trata de G masa uno, igual a Helm para aplicar esta imagen a este objeto. Helmer tipo G, BG uno enseñado aplicar bota masiva. Entonces dijiste las prensas redondas, voy a pasar imagen IMG Aquí, aplicamos máscara para la subestructura de fondo. Entonces quiero exhibir esta máscara y también quiero exhibir el ala original. Al principio, voy a exhibir la ventana original. Voy a atar C dos puntos IMF metal, IM así entonces dentro la ronda resiste dentro de la sola capa, esta es la ventana original, donde quiero hacer fi webcam metraje, algún tipo original y aquí voy a pasar imagen variable. Como saben, la variable de imagen almacenó el metraje original. Por eso necesito pasar imagen. Y luego otra vez, voy a llamar a Ema Show math. Duplico esta línea. Pero esta vez, quiero mostrar el algoritmo Mg. Copio MG y más nombre, reemplazo original por MG. Yo sustituyo IMG por GMGMSk G mask O. Y ahora necesitamos llamar al método wet Aquí amarre K igual a CV dos puntos mojados método K. Entonces dentro de la ronda se invierte, voy a pasar 30 milisegundos También, aquí, voy a pasar la operación BTIs, así que voy a usar operador y voy a pasar un Por código, cero XF Entonces leemos esta línea. Entonces voy a establecer una condición para SkepkherType, I K igual a igual a 27, luego dentro de este bloque E, quiero romper Descanso. Como ya sabéis, 27 es el código para la clave scape. Entonces después de romper el bucle, voy a poner el bucle IE, quiero soltar la cámara. Así atado, captura, CAP cas, tot, libera madera de metanfetamina Subir. Además, necesito destruir todas las ventanas, así que voy a escribir C dos, tot destruir toda la ventana Así que vamos a poner el archivo y voy a ejecutarlo. Después de ejecutar este código, va a abrir un total de dos ventanas. En nuestra primera ventana, va al metraje de video original. Quiero ver el colorido metraje de video y la segunda ventana, va por la máscara de fondo para abajo. Ahora, fijemos el código y veamos qué va a devolver. Quiero presionar el botón de correr y tenemos que esperar algún tiempo para poner en marcha la cámara. Como puedes ver, enciende mi webcam y voy a mover esta ventana al lado de esta ventana original que podrás comparar fácilmente. Como puedes ver, esta es nuestra ventana original y esta es la máscara MOG Como se puede ver este filtro escrito operador bit a bit, y cuando muevo mi mano, lo contrario cuerpo, se puede identificar la porción móvil con el color blanco Básicamente, definió el área con color blanco. Esta es la parte móvil de mi cuerpo. Por eso capturó estas secciones. Y si quieres volverte invisible, solo quédate quieto y no te muevas. Como puedes ver de vez en cuando, me vuelvo invisible y cuando muevo mi mano, entonces otra vez, rastrea el área en movimiento. Es así como podemos sustraer el fondo y mostrar solo la porción móvil Ahora hablemos del siguiente algoritmo. Voy a borrar en las ventanas. Ahora, vamos a crear el siguiente objeto usando el algoritmo Mg two. Fondo substructed Mg dos. Primero, voy a duplicar esta línea y voy a cambiar el nombre de la variable. Esto es MGMG dos. También podemos retirarlo. No necesitamos este método para esto, y voy a reemplazar MOG por Mog two Entonces voy a crear una máscara. Para eso, voy a duplicar esta sección y reemplazar la máscara uno máscara dos y también necesitamos reemplazar la variable, esta, Healtide GBG two, y aplicamos esta imagen a este segundo objeto Después de eso, necesitamos mostrarlo en nuestra ventana. Voy a duplicar esta sección y voy a mostrar la máscara dos. Voy a cambiar el nombre de la ventana. Se trata de MOG dos. Veamos después de aplicar esta función, qué va a devolver. Para configurar este archivo, nuevamente, voy a ejecutar este código en mi terminal, y tenemos que esperar un par de segundos para iniciar la webcam. Ahora, como pueden ver, tenemos que decirle a tres Ventana. Este es MOG dos, este es MOG y este es el Window original Ahora veamos la diferencia. Como puede ver, si comparamos Mg dos con MG uno, OG dos proporcionan una mejor adaptabilidad a la escena variable debido a los cambios de iluminación Quiero decir que adopta la luz más precisa que MOG. Por eso puedes reconocer mis expresiones faciales. Como pueden ver, cuando muevo mi mano, Mg dos devuelven la imagen completa de mano porque este algoritmo lee las luces mejor que MOG Ahora vamos a aplicar nuestro siguiente algoritmo. Yo sólo voy a hacer victorias. Este tipo, voy a aplicar mejor substructor GMG. De nuevo, voy a duplicar esta sección y reemplazar GBG dos por GBG tres Se trata de un fondo divertido tres. Nuevamente, necesitamos escribir Cv punto BG ACG, crear Bagnew substructor y aquí necesitamos Y aquí se puede ver este algoritmo combina imagen estadística de fondo, estimación, y segmentación de cuenca perfixel substructor Bgrou Mg two también es un algoritmo de segmentación de primer plano basado en mezcla gaussiana El substructor Bgrou Mg two también es un algoritmo de segmentación de primer plano basado en mezcla gaussiana. Vamos a crear una máscara para el tercer algoritmo. Súper crear el objeto, voy a crear la máscara. Voy a crear esta línea. Y voy a reemplazar la máscara dos con marcas tres y también necesito reemplazar el nombre del objeto. Y también hay que cambiar el nombre del objeto, GBG tres. Después de crear la máscara, también necesitamos mostrar esta máscara en ventanas. De nuevo, voy a duplicar esta línea y reemplazar Mg dos por Gng aquí, necesitamos mostrar la máscara tres para abajo las máscaras de fondo tres y lo haremos satisfechos Después de paso este archivo, de nuevo, voy a ejecutar el marcador en mi turno. Ahora puedes entender todos los algoritmos. Ahora se puede ver que tenemos total de cuatro ventanas y lo voy a arreglar de acuerdo al pedido, OMG original, OMG dos, y GMG Esta es nuestra ventana original. Esta es la ventana MG, y esta es Mg dos y la última es G&G Ahora puedes identificar la diferencia entre todos los. Ahora puedes identificar la diferencia entre todos los Se pueden comparar los tres resultados entre sí. Si notas GMG aquí puedes notar una vez que se establece el modelo de fondo, el algoritmo aplica la segmentación de cuenca en cada píxel y la segmentación bayesiana es algoritmo aplica la segmentación de cuenca en cada píxel y la segmentación un método probabilístico . Eso calcula la probabilidad de que un píxel pertenezca al primer plano o fondo en función de su intensidad También puedes notar que exagera el pixel de los pedidos. Pero todos estos tres algoritmos funcionan perfectamente. Sustrae el fondo y lo representa con color negro y muestra la porción móvil con color blanco Es por eso que estos algoritmos son ampliamente utilizados en el análisis de video en tiempo real, cámara de vigilancia y sistema de monitoreo de tráfico. Además, se utiliza para el seguimiento de objetos. Entonces así es como podemos sustraer el fondo del primer plano Espero que ahora te quede claro. Entonces en este tutorial, te muestro, tenemos un total de tres algoritmos que pueden ser utilizados para la substricción de fondo Y según yo, Sig uno es el mejor MOG dos De lo contrario, puedes ir con MOG. El algoritmo GG es bastante ruido. Estos algoritmos están preconstruidos en Open Series, así que no necesitamos hacer demasiado para eso, necesitamos aplicarlo. Espero que les guste este proyecto. Gracias por ver este video, estén atentos para el siguiente tutorial. 26. Detección de rostros con Python y OpenCV con cámara web: Hola, es bueno verte de vuelta. Una vez más, estoy de vuelta con un nuevo proyecto relacionado con Python OpenCV Y hoy en este proyecto, vamos a crear detección de fase. Sí, vamos a crear detección de fase usando open C. Así que antes de iniciar nuestro programa, veamos la demostración. Y como puedes ver, detecta con éxito nuestro rostro y crea un rectángulo a su alrededor. Y cada vez que muevo mi cara con mi cara, también es mover el rectángulo. Es malo que nuestro programa funcione perfectamente. Puede detectar rostros. Y si muevo mi mano frente a mi cara, ahora se puede ver que quitó el rectángulo y si lo muevo, nuevamente, muestra el rectángulo. Entonces, sin perder el tiempo, comencemos la práctica. Este proyecto utilizó la biblioteca OpenCV para realizar una detección de fase en tiempo real usando rob Cam como cámara principal Pero para crear el proyecto, necesitamos descargar algo. Necesitamos descargar un clasificador de ataúd escuchar bien. Así que vamos a saltar al navegador. Como sabes en este proyecto, estamos realizando detección de fase. Así que aquí abro mi motor de búsqueda, Google, y aquí busco har Cascade, nscFontPas underscodfault, punto N. Sí, necesitamos Después de buscar este archivo, como puedes ver, proporciona un sitio web, enlace de GitHub, ArcascadeFontalfas, underscofat punto N. Voy Voy a redirigir a esta página, y esta es la página ML que necesitamos bajar. Hay muchos ataúdes duros disponibles para diferentes partes del cuerpo, como ojo, anteojos, fontalfas, fontalpas por defecto, cuerpo completo, cuerpo completo Pero tenemos que seleccionar éste, Hardcasket underscoFontal phase, undersco default A la gran pregunta es, qué es eso y por qué necesitamos descargar este archivo. Este archivo es un clasificador pre carpa utilizado por Popsii para detectar fases Este clasificador está entrenado para detectar fases fontales humanas. Un HRGskE es un algoritmo de detección de objetos utilizado para identificar objetos en una secuencia de imagen o video Funciona entrenando al modelo para que reconozca el patrón en la imagen usando sus características similares, que son similares a los filtros de dección de borde Y este clasificador ya se construye entrenando sobre muchas imágenes positivas como imagen de cara fontal y también imágenes negativas Quiero decir imagen sin caras. partir de este entrenamiento, el clasificador aprende a detectar patrones faciales Así que ya se guardó mucho algoritmo de tratamientos faciales en este archivo. Entonces no necesitamos enseñar nuestro modelo por nosotros mismos. Voy a descargar este archivo y voy a wp este archivo en mi directorio de trabajo actual. Entonces como puedes ver en mi directorio de garantías actual, hay un nombre de archivo colgado en cascada, underscoeFondl phase underscoe default Es un clasificador har cascada pre entrenado, que es un algoritmo de especificar diseñado para detectar fase en imágenes En una sola oración, este archivo contiene los datos necesarios para detectar fases en imágenes. Al principio, necesitamos importar la biblioteca. Aquí voy a importar nuestra biblioteca OPC. Importar CV dos, y luego necesitamos cargar el ataúd duro pre tad fino Para eso, voy a declarar una variable y voy a declarar y nuestra variable es A, A, asignar Wi, CV dos puntos de aquí, voy a llamar al clasificador en cascada de metanfetamina, algún tipo clasificador en cascada Después dentro del latón redondo, dentro de los códigos dobles, voy a copiar la ruta del archivo. De lo contrario, defina herame. Aquí, voy a copiar el nombre fino y volver al archivo principal punto Pi. Entonces dentro del doble código, voy a pegar el nombre fino, HCASCdundersCoe fase fontal, underscoe default Este archivo se guarda en formato de archivo XML. A continuación, necesitamos capturar el feed de video desde la webcam U. Para eso, voy a declarar otra variable, y nuestro nombre de variable es CAN Cam igual a desde aquí, vamos a ejecutar un modo Math, CV de captura de video de dos puntos. Luego dentro de los rebajes redondos, necesitamos proporcionar la fuente de la cámara. Aquí estoy uso mi webcam predeterminada, así que voy a pasar Z Siguiente, necesitamos ejecutar un bucle infinito para capturar el fotograma continuamente desde esta cámara. Para eso, vamos a ejecutar un uh adentro dentro de esta IU, necesitamos leer el fotograma de la cámara. Dobladillo tipo Cam Cam punto leer Método. Lee este método, va a volver a embotar dos vdu. Entonces necesitamos almacenar este vario en una variable. Primero, devuelve un valor booleano que indica que el fotograma se leyó correctamente o Entonces voy a ordenar este valor de Bolen en la variable RET. C entonces va a devolver la imagen real. Para almacenar la imagen, aquí voy a declarar otra variable, cnksImage IMG, asignada con la función Cam Esta variable va a almacenar el valor booleano y esta variable va a almacenar la imagen real, que se obtiene de este Y ahora necesitamos convertir este colorido marco en imagen briske Jabón para el cabello, voy a escribir gris. Gris, asignar con, voy a ejecutar una función llamada CVD color Cv CVT color. Entonces dentro de la ronda res como fuente, voy a pasar esta imagen de cabina variable. Vamos a convertir los archivos de imagen CaM a color gris. Entonces como segunda fuente, necesitamos pasar el código inicializado, que es CV dos puntos, y quiero convertir color a color BGR a color gris Entonces escriba, coloreado bajo alcance y necesitamos convertir color BGR a color gris tipo BGR a color gris Éste. Básicamente, la detección de fase funciona mejor en imágenes en escala de grises, lo que simplifica el proceso. Ahora necesitamos detectar las fases desde el marco de la escala de grises. Para eso, necesitamos usar un detector de metanfetamina multiescala. Aquí voy a declarar otra variable y mi nombre de variable es fase, asignar con un punto, deTTT uno Luego dentro de las prensas redondas, primero, necesitamos pasar la imagen de origen que es genial. Entonces tenemos que pasar el factor de escala, que es 1.3. A continuación, tenemos que pasar número mínimo de nunca rectángulo. Para eso, voy a pasar seis. En este método, primero pasamos la fuente de imagen gris. Después pasamos el factor de escala win. Aquí paso 0.3. 0.3 es el factor de escala que controla cuánto se reduce el tamaño de la imagen en cada escala de imagen y seis es el número mínimo de palancas Un rectángulo debe tener que ser considerado como una fase. Esta variable de fase va a almacenar todas las fases de la imagen en escala de grises y excepto las coordenadas de fase Ahora, usando estas coordenadas, necesitamos dibujar un rectángulo a su alrededor. Así que vamos a dibujar rectángulo. Necesitamos dibujar un rectángulo alrededor de las caras de detección. Para eso, necesitamos usar la forma. Porque en la Y. Así que voy a teclear cuatro dentro de las rotondas aquí, introdu algunas coordenadas como hacemos X uno, Y uno, W uno, H uno en fase Entonces dentro de este pl boop, necesitamos dibujar rectángulo usando estas coordenadas Entonces, como saben, para dibujar rectángulo, introducemétodo ectangle Rectángulo de dos puntos CV. Entonces estableces el RoundRessF que necesitamos para pasar la imagen fuente en la que imagen queremos dibujar el rectángulo como imagen fuente pasaría esta variable CaM Ma. A continuación, tenemos que pasar los puntos para dibujar el rectángulo. Pero antes necesitamos entender los puntos. Este bucle de cuatro iterar fases de detective generales que se almacena en variable de fase Y para cada fase detectada, XY e Y uno representan la esquina superior del labio de la fase, y W uno y H uno representan maleza y altura. Estos dos valores combinados representan la esquina superior del labio y este valor representa mojado y este valor representa la altura. Usando esto para usar estas coordenadas, vamos a dibujar el rectángulo. Y como ya saben, para dibujar el rectángulo en OpenCV, necesitamos pasar dos totales, labio superior y esquina inferior derecha Para la esquina superior izquierda, ya tenemos las coordenadas. Entonces aquí, voy a pasar X Conga Y, X uno, Y uno Entonces entonces tenemos que pasar el valor de la esquina inferior derecha y no tenemos el valor de la esquina inferior derecha, pero podemos calcular el valor de la esquina inferior derecha. Déjame mostrarte cómo. Para calcular el valor de la esquina inferior derecha, necesitamos sumar con valor y1s con rectángulo con, que es uno Entonces necesitamos calcular YR más H uno, altura. Al principio, sumamos con valor xs, luego agregamos altura con Y xs pulg. Combinado, va a devolver el botón derecho esquina v. Ahora, tenemos que pasar otro valor el cual está coloreado aquí voy a usar color azul. Primero, voy a pasar 2550, cero. A continuación, voy a pasar el ness, el grosor del borde rectangular. Voy a pasar tres y además puedes usar mayor valor para eso si pasas cinco o seis. Voy a pasar cinco. Después de dibujar el rectángulo alrededor de la cara, necesitamos mostrar el marco con la fase detectada. Para mostrar los fotogramas en la fase detectada, necesitamos salir afuera de este bucle de cuatro y aquí necesitamos exhibir el metal del FMI. C dos punto en mi humilde opinión dijeron las rotondas. Al principio, necesitamos proporcionar un nombre de ventana y el nombre de la ventana es cara, y luego necesitamos proporcionar la imagen de origen, que es Cam Image. Eso es. Además, necesitamos establecer la llave húmeda para detener el programa. Aquí, voy a escribir I CV dos puntos weit key dentro de la rotonda voy a configurarlo para uno de nuevo, milisegundos y cero F igual a igual a ORD Dentro de las prensas de carrera, si alabamos pequeña A, entonces dentro de esta condición p, quiero romper el bucle. Quiero romper el bucle Y, romper. Si elogiamos a A, entonces va a traer el bucle y matarte en. A continuación, tenemos que liberar el resurgimiento de la cámara web. Fuera del bucle ID, tipo Hemel, punto Cam, método de liberación También necesitamos destruir toda la ventana, tipo S, CV dos, punto, destruir todas las ventanas. Éste. Voy a establecer este archivo. Ahora, ejecutemos el código en mi terminal y veamos es que funcione correctamente o no. Después de configurar este archivo, voy a presionar el botón Ejecutar, y tenemos que esperar algún tiempo para iniciar mi webcam. Por último después de esperar, un par de segundos, abre nuestra ventana. Como puedes ver, detecta con éxito nuestro rostro y crea un rectángulo a su alrededor. Siempre que muevo mi cara con mi cara, también es mover el rectángulo. Es malo que nuestro programa funcione perfectamente. Puede detectar rostros. Yo muevo mi mano delante de mi cara, ahora se puede ver que quitó el rectángulo y si lo vuelvo a sacar muestra el rectángulo. Usando este archivo de ataúd FontalPashar pretendido, creamos creamos Ahora cerremos la ventana y volvamos al código de Visual Studio. Así que creo con éxito programa de detección de fase usando OpenCV No es muy difícil. Es un proyecto muy fácil. Espero que disfrutes mucho de este proyecto y también entiendas cómo funciona la detección de fase. Así que gracias por ver este horario de video para nuestro próximo proyecto. 27. Detección de objetos de color similar en Python con OpenCV: Hola, chicos, me alegro de verles de vuelta. Una vez más, estoy de vuelta con un nuevo proyecto relacionado Pythonopen Hoy en este proyecto, vamos a realizar el seguimiento de objetos utilizando la segmentación de color Sí, vamos a rastrear objetos usando segmentación basada en color El seguimiento de objetos es una técnica de visión por computadora para localizar la posición de un objeto en una imagen o video. Recuerde, reconocer el objeto y rastrear el objeto son dos diferentes. En el seguimiento de objetos, puede rastrear cualquier objeto en movimiento, pero en la detección de objetos, puede identificarlo. Estas son dos cosas totalmente distintas. Hay muchos tipos de método de seguimiento de objetos en OpenCV, como el basado en la segmentación de color, como el basado en la segmentación de color diferenciación de fotogramas y la base de coincidencia de características Yo institutorial, vamos a realizar seguimiento de objetos basado en la segmentación de color, y para realizar el seguimiento efectivo del color, vamos a convertir el color BGir en color HSV Como saben, HSV significa saturación de tono vue. Hue significa color, Vallow significa cantidad de color y saturación significa cantidad gris de color Sin hablar demasiado, déjame mostrarte un ejemplo de lo que vamos a crear en este tutorial. Ahora puedes verlo rastrear con éxito nuestro objeto. Puede rastrear nuestra tapa de botella de color azul. En nuestra ventana de marco, puedes ver el metraje original y en nuestra ventana de máscara, aquí puedes ver el metraje del operador BTIs Aquí, el blanco representa la tapa de la botella y el color negro representa el área no seleccionada Pero en nuestra tercera ventana RIA, aquí se puede ver el objeto de color real. Aquí puedes ver la tapa exacta de la botella. Sin esta tapa de botella, no se puede ver nada aquí porque rastrea solo esta segmentación de color desde esta ventana Esto es lo que vamos a crear en este proyecto. Saltemos a la pantalla de la computadora e iniciemos el proyecto. Entonces como pueden ver, finalmente, estamos en mi editor de código visa studio, y ya creé un archivo Python main dot py. A rapido, voy a importar nuestra importante biblioteca. Voy a escribir import, y voy a importar CV dos. Entonces voy a importar Numpi. Sí, Numpo es importante para crear este tipo de proyectos. Voy a escribir import NumPi como NP, a continuación, necesitamos importar la parcela Pi de la hoja matplot El tipo, importa parcela matplot hoja Pi como PLT. Aquí vamos a realizar un seguimiento de objetos basado en el color del objeto. El seguimiento de objetos y reconocimiento de objetos son cosas totalmente diferentes. En el seguimiento de objetos, podemos rastrear cualquier objeto en movimiento. Pero en el reconocimiento de objetos, necesitamos reconocer el objeto particular. Como te dije antes, hay muchos métodos que podemos usar para el seguimiento de objetos, como la segmentación de color, la diferenciación de fotogramas, la coincidencia de características, desperdicio de aprendizaje automático, etcétera Pero como saben, vamos a realizar un seguimiento de objetos basado en la segmentación de color Ahora comencemos la práctica. Al principio, necesitamos crear un objeto de video para capturar el fotograma. Para capturar el fotograma, vamos a usar nuestra webcam. Aquí voy a escribir un nombre de variable, CAP, CAP, Asignar W y aquí necesitamos usar un método llamado captura de video. Punto Cv Video captado éste. Entonces dentro de los vestidos redondos, aquí tenemos que pasar la fuente Z. luego después de eso, voy a definir una función vacía ¿Por qué necesitamos la función vacía? Debido a que vamos a crear barra de pista usándola y para crear esta barra de pista, necesitamos devolver la función vacía. ¿Quién no va a devolver nada? Aquí, voy a escribir Dave y nuestro nombre de función no es nada. Nada. Dentro de los vestidos redondos, voy a pasar un parámetro normal llamado X y dentro de la función, Hemo type pass Básicamente no va a devolver nada. Después usando esta función vacía, vamos a crear la barra de pista. Pero antes de crear la barra de pista, necesitamos definir el nombre de la barra de pista. Aquí, voy a escribir V dos puntos llamado Ventana. Aquí voy a usar un método llamado nombre Ventana llamado Ventana, y necesitamos proporcionar un nombre para esta ventana, para nuestro Tug bar Ventana voy a escribir seguimiento ahora aquí, voy a escribir seguimiento ahora aquí, crear seis barras de pista porque necesitamos agarrar el valor de saturación de Hue superior y también para agarrar el valor de saturación de Hue inferior Vamos a crear nuestra primera barra de pista. Aquí voy a escribir C dos puntos, crear barra de pista. Esta función. Luego dentro de los latones redondos, al principio, necesitamos crear una barra de seguimiento para valor de límite inferior para Hu Aquí voy a usar el corto de Hu H. inferior Después de crear el nombre de la barra de pista, necesitamos pasar el nombre de la ventana. En qué ventana, queremos mostrar la barra de pista. Dentro de los códigos dobles, voy a pasar este rastreo de nombre de ventana. A continuación, tenemos que pasar un valor. Aquí, tenemos que pasar el valor inferior, que se llama cero. Entonces tenemos que pasar el valor más alto y para mayor valor, voy a pasar 255. Por fin, necesitamos pasar una función. Esta función no devolverá nada, así que voy a usar esta función, nada. Sólo quiero copiar el nombre de la función y ponerlo aquí. No voy a establecer ningún valor predeterminado a nuestra barra de pista porque la vamos a establecer minualmente Entonces voy a duplicar esta línea y esta vez voy a cambiar el nombre de esta barra de pista, que es As. Como significa menor saturación. Entonces lo duplico A y esta vez lo voy a nombrar L V, menor valor. Estas tres barras de vía representan el valor de límite inferior. Ahora tenemos que pasar el valor de límite superior. Voy a duplicar toda la línea de tres. Entonces nuestra última palabra de tres triángulos es para mayor valor, tono más alto y syn es mayor saturación y la última es onda más alta Ahora necesitamos ejecutar bucle infinito para procesar continuamente el fotograma de video. Para eso, vamos a usar While loop. Aquí voy a escribir YT luego dentro de este illoop voy a usar el método de lectura Método de lectura captura cada fotograma de la webcam para almacenar el valor de captura y el valor Bullen, voy a declarar total de dos variables Primero, voy a declarar B, que va a almacenar el valor booleano, luego voy a declarar otro valor llamado frame, frame igual al método cap dot read Entonces después de leer todo el marco de color, necesitamos convertir el marco de color en HSV Como saben, por defecto, OpenCbuse formato de color BGR Necesitamos convertirlo en formato de color HSB. Voy a declararlo muy bien Hs V igual a V dos, punto, color CVD Después dentro de los vestidos redondos, voy a pasar el marco Al principio, tenemos que pasar la fuente de la imagen. Voy a pasar el marco variable frame. Entonces voy a convertirlo CV dos punto, color, guión bajo, y voy a convertirlo BG HSV Buscar GR a HSV. Éste. A continuación, necesitamos obtener el valor HSV de estas barras de vía. Para ello, necesitamos declarar diferentes variables para almacenar el valor de la barra de pista. Entonces para bajar, voy a escribir underscoe H. Igual para agarrar los datos de esta barra de pista, necesitamos usar un método llamado gate track bar pause Voy a atar CV dos puntos puerta, barra de pista, pausa, éste, y luego dentro de las prensas redondas, dentro de los códigos dobles, primero, tenemos que pasar el nombre de prohibición de pista. De qué barra de pista, quiero agarrar el, que es H H. A continuación, tenemos que definir el nombre de la ventana, y nuestro nombre de ventana está rastreando. Voy a usar este nombre de ventana, rastreo. Copio el nombre de la ventana y dentro de los códigos dobles, lo voy a pegar aquí. la misma manera, necesitamos crear otras cinco variables para obtener el valor de la barra de pista. Duplico esta línea. Esta vez, voy a extraer valor de AS. El tipo de subrayado también es intercambiar la pista banname L De la misma manera, voy a crearlo todo. Esta es para V, y voy a cambiar el nombre, V. Entonces duplico esta línea de tres y voy a hacer esta HH H UnderScoeh Esto es para un alto valor de U. El siguiente es para alto valor de saturación, HH el último es para HV También para cambiar la pista pero nombre, que es H V. Así estas líneas retroceden la posición actual de las barras de pista HSV, que representan el límite inferior y superior de la gama de colores HSV Vamos a usarlo para enmascarar. A continuación, necesitamos crear una matriz con límite HSV inferior y superior. Para crear esos array, voy a declarar una variable L subrayado B. Es sinónimo de límite inferior y para crear esta matriz de límite inferior, vamos a usar matriz de puntos NumPi p, Son las rondas, aquí voy a pasar todo el valor de límite inferior Lunde H, subrayado a, y subrayado V. De la misma manera, necesitamos Duplico esta línea y voy a cambiar el nombre de la variable. U UV significa valor de límite superior. Aquí también intercambiar el nombre de las variables. Voy a hacerlo HH. HH significa mayor valor Hs HH significa mayor saturación, mayor U, mayor saturación y mayor valor. A continuación, necesitamos crear una máscara usando el valor de límite inferior y el valor de límite superior. Para crear esta máscara, vamos a utilizar el método in range. Esta es la parte más importante de este video. Al principio, voy a declarar una variable llamada máscara máscara igual a CV dos.in range math boot in range in Después dentro de las prensas redondas, primero, tenemos que pasar la fuente. Como fuente, voy a pasar esta variable HSV. Así atar HSV. Entonces tenemos que pasar el valor del límite inferior. Como puede ver, almacenamos valor del límite inferior usando esta variable, underscoe B, límite inferior L underscoe B. Además, necesitamos pasar el valor del límite superior Y representamos valor perbund usando el uso de subrayado, B, eso es todo Aquí creamos máscara usando la función ne. En función utilizada para crear máscara basada en valores de color en el espacio de color HSV Al principio, pasamos el espacio de color HSV. Esta es la imagen del espacio de color HSV. Convertimos imagen BGR en HSV aquí. Paso esta variable. Primero pasamos array de valor de límite inferior, luego pasamos array de límite superior. Ahora, la función bit inne convierte estos valores en una imagen binaria, y almacenamos esta imagen binaria en la variable mas Como ustedes saben, la imagen binaria la crean un total de dos valores. Mientras que cero representan negro y 255 y 255 representan blanco. Ahora esta máscara resalta la razón en el marco que coincide con el rango de color especificado. Supongamos que selecciona la marca de pista innu de color azul, entonces va a mostrar solo la porción de color azul adentro en Ahora necesitamos aplicar esta máscara con BTIs y operador. Aquí, no voy a explicar a fondo cómo funcionan los Chicos y el operador. Para aplicar la máscara en Bitwise y operador, voy a declarar una variable RES. Rs iguales a, necesitamos usar BTI y sub tipo CV dos puntos B dos veces y operar. Entonces dentro de los latones redondos, al principio, necesitamos pasar la primera fuente, que es frame como segunda fuente, voy a pasar otro frame variable En nuestro primer video, pasamos el fotograma original y en nuestro segundo video también pasamos el fotograma original porque ya que estamos enmascarando el ancho original en sí, y ahora necesitamos pasar la variable de máscara. Máscara de hemotipo igual a la máscara. Esto crea una salida que muestra solo la parte del marco original que coincide con el rango de color especificado. Básicamente, vas a aislar el objeto en función del color. Ahora voy a mostrar el video y la salida de máscara, también la variable ras. Aquí voy a usar iMso Mathod algún tipo V dos puntos IM show Después dentro de las prensas redondas, primero, voy a pasar el nombre de la ventana en la que ventana quiero mostrar el marco. El nombre de nuestra ventana es frame. Entonces voy a pasar el marco variable. Básicamente, esta ventana nos va a mostrar el metraje original, el metraje colorido, el metraje a color de Bier Entonces te voy a mostrar el metraje de la máscara. Duplico esta línea y reemplazo marco con máscara. Y por fin, voy a mostrar esta variable res, este metraje, este alquitrán arriba se cruza con el operador Bt Entonces aquí primero, voy a cambiar el nombre de la ventana Rs. Además, voy a reemplazar esta máscara variable con RE y voy a configurar este archivo. Ahora necesitamos establecer la condición IP para romper bucle usando el método Wetey Aquí voy a tipo E condición I CV dos puntos wet key wet key. Dentro del proceso de ronda, voy a esperar 25 milisegundos y cero x FF equivale a dos iguales a ORD Dentro del redondo dice, si alabo pequeña Q en nuestro teclado, entonces quiero romper el bucle Descanso. Esto es. Después de eso, necesitamos liberar la captura. Método de liberación de tapa. Esto va a lanzar nuestra captura de video. También para destruir todas las ventanas. V dos, punto, destruye todas las ventanas. Entonces terminamos, pero aquí cometí un tonto error. Como puedes ver, es una matriz, así que necesitamos pasar este video dentro de la base cuadrada. Aquí en base cuadrada. Ahora voy a volver a configurar este archivo y voy a ejecutar este código. Ahora, vamos a ejecutar el código en nuestra terminal. Después de hacer clic en el botón Ejecutar, tenemos que esperar algún tiempo para iniciar nuestra webcam. Como pueden ver, su necesidad de abrir nuestra ventana. Aquí tenemos que decir cuatro ventanas. El primero es para la barra de seguimiento, y el segundo es para el marco original y el tercero es para la máscara. Es para máscara Bis y voy a colocar todas las ventanas lado a lado que podamos comparar el resultado muy fácilmente. Como pueden ver, esta es la tapa de botella de un solo color que voy a usar a la par del rastreo de objetos. Aquí utilizo tapa de botella variante de color azul sólido. Puedes usar cualquier objeto de color sólido, y voy a emparejar este color usando nuestra barra de seguimiento. Y ahora necesitamos jugar con esta barra de pista para que coincida con el color de la tapa de la botella. Tenemos que jugar con el valor de seis. Al principio, voy a incrementar el alto valor. Entonces voy a incrementar el alto valor de saturación. Necesitamos ajustar estas barras para obtener el resultado perfecto. Como se nota, cuando cambio los valores, reduce el ruido y trata de enfocarnos en nuestra tapa de botella. Voy a llegar primero lejos este proceso para obtener el resultado perfecto. Ahora estas coordenadas casi me dan el resultado perfecto. Ahora puedes verlo rastrear con éxito nuestro objeto. Puede rastrear nuestra tapa de botella de color azul. En nuestra ventana de marco, puedes ver el metraje original y en nuestra ventana de máscara, aquí puedes ver el metraje del operador BTs. Aquí, el blanco representa la tapa de la botella y el color negro representa el área no seleccionada Pero en nuestra tercera ventana REAs, aquí puedes ver el objeto de color real. Aquí puedes ver la tapa exacta de la botella. Sin esta tapa de botella, aquí no se puede ver nada porque rastrea solo la segmentación del color desde esta ventana Ahora matemos la ventana y volvamos al programa. Es así como podemos realizar el seguimiento de objetos basado en la segmentación del color Espero que ahora te quede claro cómo podemos crearlo siguiendo casi el mismo proceso, podemos crear Air Canvas con él. Lo vamos a aprender en nuestro próximo tutorial. No te preocupes por ello. Gracias por ver este video. Estén atentos para nuestro próximo tutorial. 28. Importa módulos y configura el objeto mediapipe: Me alegro de verlos de vuelta, chicos. Una vez más, estoy de vuelta con un nuevo y emocionante proyecto relacionado con OpenCV Y hoy en este proyecto, vamos a crear Finger Counter, con la ayuda del módulo Media Pipe. Ahora, déjenme mostrarles un ejemplo. Uno que vamos a crear. Entonces como puedes ver, inicia nuestra cámara web. Y ahora voy a levantar la mano cerrada. Como puedes ver, ahora muestra cero dedos y además rastrea todos los dedos con éxito. Aquí puedes ver todos los hitos, y ahora voy a extender todo mi dedo. Como puedes ver en tu pantalla, ahora imprime cinco dedos. Se puede notar que rastrea todas las articulaciones de los dedos y dientes. Y si cierro el pulgar, ahora puedes verlo imprimir cuatro dedos. Y si lo vuelvo a subir, otra vez, imprime cinco. Y si muevo mi dedo índice, como pueden ver, ahora me imprimo cuatro dedos. De la misma manera rastrea todos los dedos. Cuenta todos los dedos y además rastrea todas las coordenadas de los dedos. Así funciona nuestro contador de dedos. Por último, estamos en mi editor de código de Visual Studio, y como pueden ver, aquí ya creo un archivo Python main dot pi. Al principio, voy a importar nuestro módulo principal, CV dos. Entonces para escribir, importar CV dos. Entonces necesitamos instalar un módulo importante, que es media pipe. Para instalar el medio Pipe, necesitamos escribir este comando. P instalar OpenCB Python Media Pipe entonces necesitas golpear Enter Como puede ver, requisito ya satisfecho. Ya descargo este módulo, pero necesitas completar tu proceso de descarga. Luego de vuelta al punto principal Pi Pi y esta vez, es necesario importar tubería de medios. El módulo de tubería de medios. Así que para escribir Importar tubería de Medios como MP. Ahora podrías tener duda, ¿qué es Media pipe? Media pipe es un potente marco de código abierto de Google, diseñado para construir canalización de aprendizaje automático multimodelo Proporciona una colección de biblioteca multiplataforma y modelo pre entrenado para implementar tareas de visión por computador y aprendizaje automático en tiempo real. Y si hablo de su uso común, se utiliza para la detección de fase. Puede detectar fases y rastrear fases en tiempo real. Entonces podemos usarlo para la estimación de pose. Puede identificar la postura del cuerpo humano, que es útil para la aplicación de fitness. Además, podemos usarlo para el seguimiento de la mano. Utilizándolo, podemos rastrear los movimientos de la mano y reconocer el gesto. También, podemos usarlo para detección de objetos en tres D para la realidad argumentada Pero en este tutorial, vamos a utilizar el seguimiento manual. Este módulo es muy ligero y rápido. Además, es trabajo en variedad de dispositivos, incluyendo dispositivo de baja potencia. Ahora, después de ingresar nuestras bibliotecas, necesitamos inicializar las manos de la tubería de medios Para eso, primero, voy a declarar una variable y nuestro nombre de variable es MP, underscopean, media pp hand, media pipe hand igual a PTT, solución de aquí, quiero llamar Se va a salir de la solución de manos del medio bith luego manos iguales a puñetazo P undercoe mano que voy a ejecutar un método Luego dentro de las rondas, aquí necesitamos pasar algunos parámetros como el modo de imagen estática, el número máximo de manos y la confianza mínima de detección. Primero, voy a pasar imagen estática mano, subrayado, imagen, subrayado, modo, modo de imagen estática igual a, y voy a hacerla falsa Entonces voy a pasar número máximo de manos. Máximo máximo, número undercoe, NUM, manos underscoe, número máximo de manos, igual a, por ahora, voy a pasar No te preocupes. Voy a explicarlo más tarde. Por fin, voy a pasar la mínima confianza de detección. Entonces escriba, media, subrayado, detección subrayado confianza, igual a hermón para establecerlo 0.7 Como puedes ver, aquí ejecutamos un método llamado hands, y como primer parámetro, pasamos el modo de imagen estática. Nosotros lo pusimos cae. ¿Qué significa eso? Es decir que está optimizado para video, y detecta mano solo en el primer fotograma y pistas en fotograma posterior. Después en el segundo parámetro, establecemos el límite. Aquí establecemos límite de número de manos, y aquí pasamos una. Limita la detección a una mano. Por fin, como puedes ver, herro usa otro parámetro, confianza mínima de detección Aquí establecemos confianza mínima de detección lado de punto cero Es ala establece el umbral para la confianza de detección. Los umbrales más bajos pueden dar como resultado falsos positivos. A continuación, necesitamos definir el dibujo MP. Es una utilidad para dibujar puntos de referencia y conexión en manos detectadas. Déjame mostrarte. Aquí escriba, P underscoe dibujo igual a hero type pt, un método llamado solución punto dibujo Utes, un método llamado solución punto dibujo Utes, underscoe utils. Como te dije, es una utilidad para dibujar hitos y conexión en manos detectadas. Entonces básicamente, en esa sección, Hero inicializa media pipe hand A continuación, necesitamos crear una función. Tenemos que crear la función de conteo de dedos, y no voy a hacer eso en este video. Entonces esto es todo para este video. En el siguiente video, vamos a definir una función. Así que gracias por ver este video, Sta tune para nuestro próximo estudio. 29. Crea la función de contador de dedos: Es bueno verles chicos. Esta es otra parte de este proyecto. Y aquí vamos a definir una función que pueda contar nuestro dedo. Además, puede contar nuestros pulgares. En nuestro tutorial anterior, inicializamos los medios de la mano Pipe, y aquí vamos a crear una función Vamos a definir una función llamada D Dave nuestro nombre de función es dedo de conteo. Underscoefinger. Contar dedo, y dentro del rebaje envolvente va a tomar un argumento, que es hito de la mano, hito underscoe Aquí vamos a pasar los hitos de mano detectados a esta función. Entonces dentro de esta función, voy a definir una lista, una lista vacía, y nuestro nombre de lista es digitado Dedos iguales a una lista vacía. Esta lista va a almacenar el estado de cada dedo. Y ahora necesitamos definir el hito. Para eso, voy a declarar una muy bien llamada hitos, Hitos iguales a mano, Hitos Landmark. Landmark es una lista de 21 puntos, W va a mantener la coordenada X y las coordenadas z? Se trata de una lista de 21 puntos correspondientes a diferentes partes de la mano. Como puedes ver en esta imagen, estas son las coordenadas Landmark, que es proporcionada por Media Pipe. Así es como media pipe lee nuestras manos. Como puede ver, este es nuestro dedo pulgar, este es el dedo índice, este es el dedo medio. Esto es dedo anular, y este es dedo meñique Como puedes ver, puede detectar todas las articulaciones de nuestro dedo. Además, puede detectar la punta de este dedo y cada una de las coordenadas definidas con un número. Vamos a utilizar estos números y coordenadas XXs e YXS para contar los dedos de nuestra Volvamos al código is studio. Por lo que puede reconocer 21 puntos de nuestra mano. Ahora necesitamos detectar el pulgar. Necesitamos verificar las coordenadas X para la orientación izquierda y derecha. Para eso, HemrotypFingers, método dot append. Dentro de los vestidos redondos, hitos hemotyp y quiero es de este hito, quiero es cuarto índice, Tt, quiero exceso de coordenadas Xs y menos Puntos de referencia dentro de la plaza ss Amel pasar índice tres Como te dije, nuestra mano se dividió en 21 hitos. Como ya les dije, hito es una lista de 21 puntos cada punto representa una parte específica de nuestra mano y cada agujero de punto suman tres coordenadas. coordenada X xs, el codent XS y la coordenada Z xs, y el índice Landmark cuatro representan la punta del pulgar según el tubo de medios, y el punto de referencia tres representan la articulación del pulgar cerca la punta, estas son la coordenada X de la punta del pulgar y la articulación Ahora hablemos de ¿cuál es la lógica detrás de esto? ¿Por qué uso más pequeño que seno? ¿Por qué Landmark cuatro puntos x menos que Landmark tres puntos X? Es decir, si las coordenadas de la punta del pulgar son más pequeñas que las coordenadas de la articulación, significa que el pulgar se extiende hacia afuera. Esto suele ser cierto para la mano izquierda cuando se extiende el pulgar y para la mano derecha, esta lógica funciona porque el marco se voltea horizontalmente Y aseguró que las coordenadas X sean constantes para la detección. Ahora, después de entender la lógica, podríamos haber cuestionado por qué necesitamos agregar esto en esta lista de dedos Aquí, los apenes de punto dedo almacenan el resultado, cierto o cae Si la condición es verdadera, su pulgar principal se extiende hacia afuera. Si falla, el pulgar no se extiende. Entonces este código es para la detección del pulgar. Ahora necesitamos detectar otros dedos. Para eso, voy a usar cuatro loop para Pep dentro del cuadrado ss, voy a verificar las coordenadas Y para ese 812, 16, 20 Entonces dentro de este bucle de cuatro, ahora necesitamos entender el bucle cuatro. ¿Qué significa eso? Para propina en ocho, 12, 16 y 20. Es decir que itera a través de la punta del dedo índice, que se representa la punta del dedo medio ocho, que se representa con 12, luego la punta del dedo anular, que se representa con 16 y la punta del dedo pingy, que se representa con Entonces dentro de este cuatro bucle, los dedos de Hematites puntean anexan dentro de la resis redonda, marcan dentro de la resis cuadrada, P, y quiero acceder a las coordenadas Y Y Menos que Landmark, dentro del cuadrado resis, PP menos dos, quiero acceder a las coordenadas Y. Ahora la pregunta es, ¿cuál es el significado de esta condición? ¿Cuál es el significado de esta lógica? Básicamente, va a comprobar que nuestro dedo frontal esté extendido o no. Y Landmar TP, refiérase la punta del dedo actual. Landmar punta punto YX, refiérase la punta del dedo actual y punta Landmark menos dos puntos yxSrfer la articulación base del mismo Tratemos de entender con una imagen real. Como pueden ver, esta es la forma en que media pipe observa nuestra mano. Como puedes ver, ocho es el dedo índice tif y 12 es la punta del dedo medio, y 16 es el dedo anular tif y 20 es la punta del dedo meñique Y si menos dos desde el punto de punta, entonces se puede ver la articulación. Aquí puedes ver la junta base. Si menos dos del ocho, va a devolver seis. Entonces seis es la articulación base de este dedo índice. la misma manera, podemos identificar otra articulación basada en dedos , diez, 14, 18. Entonces estas son las coordenadas Y de la punta, y estas son las coordenadas Y de la articulación base en nuestros dedos. Y aquí comparamos las coordenadas Y de la punta con la articulación base. Y si la punta es más alta, el dedo se considera extendido. Y si la punta es más baja, entonces el dedo se considera doblado. Y nuestro método append va a agregar el resultado true false para cada dedo en esta lista de dedos en esta lista de dedos vacía Si la condición es verdadera, es media que el dedo está extendido, y si cae, es media que el dedo está doblado. Entonces ahora tenemos la lista que puede identificar el dedo extendido y el dedo doblado. Y ahora necesitamos contar la lista. Para eso, fuera de este bucle de cuatro, su tipo de retorno, necesitamos contar la lista de dedos, nada más. Dedo, dedos punto, método de conteo, conteo. Y dentro de las runbs necesitamos contar solo los valores verdaderos, no los valores falsos Entonces aquí escribo, cierto. Eso es. Ahora, vamos a terminar esta sección E. Y lado a lado, como pueden ver, abro mi editor de código visual studio y esta imagen para entender los diates los hitos Aquí, primero, definimos una función y nuestro nombre de función es dedo de conteo, y va a tomar como argumento el punto de referencia de la mano. Entonces aquí creamos una lista EmptyList de dedos. ¿Va a almacenar el valor en dos o falso? Verdadero significa que el dedo está extendido y falso significa que el dedo no está extendido. Después accedemos al hito. Landmark es una lista de 21 puntos, y como puede ver, estos son puntos proporcionados por medios Pi y cada uno de los puntos tiene un total de tres coordenadas. XXs YxS y ZxS. En la siguiente parte, detetemos el pulgar usando este método append Como puedes ver, esta es la imagen del pulgar de la mano derecha. Y este es el número de referencia del pulgar, que es cuatro. Y de este pulgar, aquí extraemos los xs de este valor pulgar. Después accedemos a la articulación del pulgar, que es el hito tres, y a partir de este hito tres, nuevamente, extraemos el valor xs. Y si la condición es cierta, entonces es mezquino nuestro pulgar está extendido. Si el valor S del punto de referencia cuatro es menor que el valor del punto de referencia tres x, significa que la condición es verdadera. Significa que el pulgar está extendido. Si notas puedes ver la distancia entre el límite de este Landmark cuatro es algo 20 pixel y la distancia entre el límite dos, Landmark tres es algo 60 pixel o 80 pixel Landmark tres El valor X es mayor que Landmark cuatro, quiero decir que el pulgar está extendido Si doblamos nuestro pulgar, diez, hito cuatro sería mayor que el hito tres. Es decir, el pulgar está doblado. Aquí comparamos la punta del pulgar con la articulación basada en el pulgar. la misma manera para otros dedos, al principio, usando este bucle, accedemos a todos los tips. En esta lista, aquí pasamos la punta del dedo índice, la punta del dedo medio, la punta del dedo anular y la punta del dedo meñique Después extraemos las coordenadas Y de esta punta, y luego la comparamos con la dirección Ys de esta manera. Para nuestro pulgar, comparamos con la dirección Xs. Pero esta vez comparamos con la dirección YxS. Si la base del pulgar se unió al valor mayor que el toque del pulgar, entonces la condición es verdadera. Y va a agregar el verdadero valor en esta lista. Y a continuación contamos los valores verdaderos. ¿Cuántos verdaderos valores tenemos en esta lista única? Supongamos que tenemos un total cinco valor verdadero en esta lista según esta imagen. Entonces va a devolver cinco. Va a contar todos los valores verdaderos. Si una de las condiciones es falsa, entonces no va a contar el valor falso, entonces va a devolver cuatro. Entonces así es como va a funcionar nuestra función. Entonces esto es todo para este video. En la siguiente parte, vamos a iniciar nuestro bucle principal. Vamos a leer frame. Así que gracias por ver este video, Estén atentos para nuestra siguiente parte. 30. Crea el bucle principal y ejecuta el proyecto: 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 aprender el bucle principal. Al principio, voy a abrir la webcam. Para abrir la webcam, primero, voy a declarar una variable, y nuestro nombre de variable es CAP, CAP igual a cv punto Método de captura de video. Captura de video. Luego dentro de las prensas redondas, necesitas pasar la fuente de la cámara. Voy a encender mi cámara por defecto, así que voy a pasar cero. Aquí voy a escribir Y, tapa está abierta, está abierta. Después dentro de esto mientras oop, primero, voy a ejecutar el método de lectura Lectura de punto de tapa. Como ustedes saben, método de lectura va a volver a dos resultado, un valor Bullen y el fotograma original, y para almacenarlo en un tipo de héroe variable para almacenar el wollen soy tipo éxito Coma y para almacenar el marco multi frame, igual al método de lectura Cabot Después una mutua en condición EP. Si no es éxito, entonces dentro de la condición IP, quiero romper el bucle. Despierta, eso es. Y ahora necesitamos voltear el marco horizontalmente para el lty e, para la revisión del espejo Así HemtiFrame igual a CV dos punto flip método. Voltear. Después dentro de los vestidos redondos, voy a pasar el marco y también voy a pasar el código flip. Y voy a voltearlo horizontalmente, así que voy a pasar uno. Entonces necesitamos convertir este marco Bier en color RGB. Para eso, voy a declarar otra variable RGB bajo marco de alcance, igual al hemotipo CV de dos puntos CVD Éste. Después dentro de los vestidos redondos, primero hay que pasar el archivo fuente, así que voy a pasar marco, luego sólo para pasar el código coloreado. CV dos puntos aquí voy a convertir color, subrayado BGR a RGB, éste Aquí convertimos este marco en, BGR a álgeb. Ahora, después de convertir este fotograma en color álgeb, necesitamos procesar el marco Para ello, necesitamos ejecutar el método de proceso. Aquí voy a empatar resultado igual a manos, Do método de proceso. Proceso. Entonces dentro de esta redondez, necesitas pasar el marco RGB RGB, subrayado libre. A continuación, aquí voy a correr yo condición. Si resultado obtuvo multi mano Así escriba, multi underscoehand, hand, underscoe Después inserte esta condición, quiero ejecutar un bucle de cuatro. Él escribe cuatro, mano, uncoe hitos en resultado, punto, hitos de múltiples manos Entonces voy a copiar esta línea, hitos multi mano. Otro pesttivo. Entonces dentro de este bucle de cuatro, necesitamos dibujar los hitos. Básicamente, hablo de estos hitos. Tenemos que dibujar estos hitos. Aquí comprobamos las manos detectadas en la variable de resultado. Contiene los puntos de referencia de mano detectados, que está escrito por el módulo de manos de tubería de medios. Si se detecta una mano, esto contendrá una lista de objetos de referencia de mano. Si no se detectan manos, este valor es ninguna, y luego iteramos a través las manos detectadas usando for para mano en puntos de referencia de múltiples manos de resultado Como sabes, cada objeto contiene 21 puntos de referencia como pulgar, TP, punta del dedo índice, etcétera, y cada una de las coordenadas de punto de referencia guarda el valor XXs YX y Y ahora necesitamos dibujar un hito en nuestra mano. Para eso, aquí voy a escribir dentro de este seguimiento, tipo amino, MP underscoe y dibujo NP subrayado dibujo, punto, aquí, voy a dibujar Entonces soy tipo, dibujar underscoe hito. Dibujar hito es que el más redondo dice, primero, voy a proporcionar el marco, en qué marco quiero dibujar el hito Así pasa marco. Entonces necesitamos proporcionar los puntos de referencia de la mano, la variable de punto de referencia de la mano y los puntos de referencia. Esta variable hitos de mano es básicamente el objeto principal, que va a contender 21 puntos A continuación, necesitamos definir qué puntos están conectados, como uniones y puntas. Para eso, voy a escribir MP guión bajo, De ahí, dibujar los hitos también en cuenta los dedos Para eso, voy a declarar otra variable conteo de guiones bajos dedos Conteo de dedos igual a, voy a escribir un método, contar dedo. Es el más redondo dice, aquí voy a escribir mano hito marca de mano, esta Básicamente, aquí llamo a la función, que ya creo, esta, contar dedo. Y como se puede ver como parámetro, tenemos que pasar hitos de mano. Entonces llamamos a esta función. Ahora después de contar el dedo, necesitamos mostrar el conteo de dedos. Para eso, aquí, voy a usar el método put text. Entonces escribe CV dos puntos, pon texto. Poner texto. Después dentro de la rotonda primero, voy a pasar el fotograma con imagen fuente Frame, coma, y aquí voy a usar el método string. Después dentro de las capas dobles, voy a escribir dedos, colon dentro del Cibass, voy a pasar esta variable, Tinger. Éste. Y a continuación, necesitamos definir la posición de este texto. Entonces dentro de la prensa redonda, voy a pasar 1070. Entonces necesitas definir el estilo de fuente. Entonces voy a atar CV a la fuente hoch simplex, underscoeh simplex, underscoeh simplex Entonces hay que definir el tamaño de fuente, así que voy a pasar dos. Es el valor de escala de fuente. A continuación, necesitamos definir el color de fuente. Entonces como color de fuente, voy a pasar color azul. Tenemos que pasarlo en formato BGR. Primero, voy a escribir 2550, cero. Después de eso, debes pasar el grosor de la fuente. Como grosor de teléfono, voy a pasar dos. Por lo que colocamos con éxito este texto en este marco. Después de eso, necesitamos mostrar este marco. Para eso, tenemos que correr, soy Shomthodoside Entonces aquí, fuera de la condición IP, voy a escribir CV dos punto, CV dos punto, soy Shoathod soy show Después dentro de las rondas, dentro del doble curso, voy a escribir, dedo contado. Dentro del doble curso, primero, necesitamos definir el windowame y nuestro windowname se Entonces tenemos que pasar el nombre del marco, qué marco quiero mostrar nuestro nombre de marco es frame. También necesitamos romper el bucle usando el método weitey. I tipo I, CV llave húmeda de dos puntos. Dentro de las piezas redondas, voy a esperar un milisegundo y cero X F igual a igual a ORD dentro de las rotondas Dentro del curso único, voy a pasar Q. Luego dentro de esta condición IP, quiero romper laúd, romper Entonces voy a liberar a los capturados. Tapa de liberación de puntos. Además, tenemos que destruir todas las ventanas. Tipo de suma, CV dos puntos, destruir todas las ventanas. Éste. Y antes ejecutar este código, déjame mostrarte algo. Aquí, tenemos que hacer que dibuje hitos de subrayado. Necesitamos agregar una, también en tipo mphand punto conexión de mano Se va a definir qué puntos están conectados, como articulaciones y puntas, etcétera Después de eso, puedes configurar este archivo y ejecutar este código en tu terminal. Y si ejecutas este código en tu terminal, al principio, va a mostrar alguna advertencia. Esta advertencia, entonces va a iniciar tu webcam. Hay que esperar algún tiempo. Como puedes ver, inicia nuestra cámara web. Ahora voy a levantar la mano cerrada. Como puedes ver, ahora muestra cero dedos y además rastrea todos los dedos con éxito. Aquí puedes ver todos los hitos y ahora voy a extender todo mi dedo. Como puedes ver en tu pantalla, ahora imprime cinco dedos. Se nota que rastrea todas las articulaciones de los dedos y dientes. Y si cierro el pulgar, ahora puedes verlo imprimir cuatro dedos. Si lo vuelvo a subir, otra vez, imprime cinco. Y si muevo mi dedo índice, como pueden ver, ahora me imprimo cuatro dedos. De la misma manera rastrea todos los dedos. Cuenta todos los dedos y además rastrea todas las coordenadas de los dedos. Así es como funciona nuestro contador de dedos, y si quieres cerrar este programa, entonces necesitas elogiar la pequeña Q en tu teclado y va a romper el bucle. Espero que disfrutes de este proyecto. Gracias por ver este video y estad atentos para nuestro próximo proyecto.