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.