jelp!

Robots la parte programada en el ordenador, cibernetica, autoguiado del pc, algoritmos, recursividad
Responder
xapu
Hacker del Foro
Mensajes: 82
Registrado: 12 Dic 2009, 15:42

jelp!

Mensaje por xapu »

ola!
tengo un desafio con un profesor de mi instituto para consegir un 10 en su asignatura..
le dije que las pizarras digitales eran una mierda, y encima caras... y el me dijo que ni que fuera ingeniero...
y le dije que aun no siendo ingeniero podia acer algo mejor XDD y me dijo lo del 10.. iva bastante en serio.. aunke no save ke puedo programar ni nada... :smt003
ya tenia una idea preparada en la cabeza...
consiste en apuntar una cam acia una pared blanca o negra a ser posible.. y acer un codigo en autoit que buscara el color rojo, y depende de donde estuviera ese punto rojo colocar el puntero en un sitio u otro..
pienso usar las siguientes funciones como principales.. _WebcamOpen() y pixelsearch()
e estado investigando con estas funciones y tambien pixelgetcolor y e hecho una prueva para fragmentar la imagen que entra por la cam en menos pixeles... divido lo que entra por la cam en una matriz de 11x11 cuadrados(tiene el mismo tamaño que la imagen de la cam) y los coloreo del color del pixel que hay en medio de cada uno ed estos cuadrados. formando asi una imagen mas simple.
el problema... esque no se si es por que las coordenadas de los pixels no son las mismas que las de los programas... que me salen todos esos cuadrados en negro y de vez en cuando sale alguno verde o azul.
codigo:

Código: Seleccionar todo

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Webcam.au3>
AutoItSetOption("PixelCoordMode",0)
#Region ### START Koda GUI section ### Form=
$sHwnd = GUICreate("Form1", 462, 462, 228, 139)
$cam = _WebcamOpen($sHwnd, 0, 0, 462, 462)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

$v2 = GUICreate("Form2", 462, 462, -1, -1)

GUISetState(@SW_SHOW)
$ypos = 0
$xpos = 0
Global $botn[122]
While 1

	For $i = 1 To 121 Step +1
		If $xpos >= 462 Then
			$ypos += 42
			$xpos = 0
		EndIf

		$color = PixelGetColor($xpos,$ypos,$cam)

		$botn[$i] = GUICtrlCreateLabel("",$xpos,$ypos,42,42)
		GUICtrlSetBkColor(-1,Hex($color))
		$xpos += 42
	Next
	$ypos = 0
	$xpos = 0
	MsgBox(0,"HI","")

	For $ii = 1 To $i-1
		GUICtrlDelete($botn[$ii])
	Next

	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
WEnd

- 0 error(s), 0 warning(s) :smt098 FUCK YEA!
http://xapus.blogspot.com/
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: jelp!

Mensaje por Ximorro »

Creo que el problema es coger un sólo pixel, piensa en los matices de color en una imagen real, en el ruido de la cámara, en la compresión mpeg...
Puedes coger unos cuantos pixeles y hacer una media (descomponiendo por separado RGB, hacer la media de cada uno, y recomponer).

En vez de pixelizar la imagen lo que puedes hacer es buscar directamente ese color rojo. Usa PixelSearch, pero no te olvides del "parámetro de variación" (shade-variation, lo llama en la ayuda en inglés) para que coja diferentes matices de rojo. Coge un puntero que sea un rojo bastante puro ¡y que no haya más rojo en la imagen o lo despistarás! Así que nada de ir vestido de Papá Noel para hacer la demostración. :smt003

Respecto al GUI ¡¡no crees los Label dentro del bucle!! Puedes reutilizarlos todas las veces que quieras (el GUICtrlSetBkColor). ¡Pero créalos sólo una vez antes del bucle! Y no hace falta que los destruyas, ya se cierran con el GUI al acabar el programa. No es necesario pero si quieres al final puedes poner un GUIDelete, no es tan crítico como no cerrar archivos o Dll pero tampoco hace daño.
¡Suerte con el proyecto!
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
xapu
Hacker del Foro
Mensajes: 82
Registrado: 12 Dic 2009, 15:42

Re: jelp!

Mensaje por xapu »

Ximorro escribió:Creo que el problema es coger un sólo pixel, piensa en los matices de color en una imagen real, en el ruido de la cámara, en la compresión mpeg...
Puedes coger unos cuantos pixeles y hacer una media (descomponiendo por separado RGB, hacer la media de cada uno, y recomponer).

En vez de pixelizar la imagen lo que puedes hacer es buscar directamente ese color rojo. Usa PixelSearch, pero no te olvides del "parámetro de variación" (shade-variation, lo llama en la ayuda en inglés) para que coja diferentes matices de rojo. Coge un puntero que sea un rojo bastante puro ¡y que no haya más rojo en la imagen o lo despistarás! Así que nada de ir vestido de Papá Noel para hacer la demostración. :smt003

Respecto al GUI ¡¡no crees los Label dentro del bucle!! Puedes reutilizarlos todas las veces que quieras (el GUICtrlSetBkColor). ¡Pero créalos sólo una vez antes del bucle! Y no hace falta que los destruyas, ya se cierran con el GUI al acabar el programa. No es necesario pero si quieres al final puedes poner un GUIDelete, no es tan crítico como no cerrar archivos o Dll pero tampoco hace daño.
¡Suerte con el proyecto!
muchas gracias ximorro!
lo ke me preguntaba es si hay alguna funciona que en vez de leer un pixel lea un grupo de pixeles?i para lo de la media de colores una cosa, eske no estoi seguro pero.. por lo menos en html creo k los codigos de colores ivan divididos en r/g/b 000/000/000 puede ser XD?
x cierto e usado la funcion pixel search con un folio al que le e pintado un punto rojo fuerte y lo e iluminado y cuando activo el programa que busca la coordenada del rojo,lo detecta pero meten muchos suvidones y bajones las coords.
voy a segir investigando!y si no puedo arreglar esto puede que lo aga con openCV.
- 0 error(s), 0 warning(s) :smt098 FUCK YEA!
http://xapus.blogspot.com/
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: jelp!

Mensaje por Ximorro »

Claro, RGB, igual, 1 byte para cada uno (y el byte más alto a cero, a veces con GDI ese se usa para transparencia pero en las funciones Pixel no se usa). Si lo pasas a hexadecimal son dos letras/números para cada uno (tal como se codifica en html)

En la udf color.au3 tienes funciones para descomponer un color: _ColorGetGreen, _ColorGetRed, _ColorGetBlue.
Para componerlos no hay función, pero se puede hacer por ejemplo así:
Rojo*65536 + Azul*256 + Verde

De todas maneras creo que lo mejor será seguir por lo del PixelSearch. No sé muy bien qué quieres decir con lo de los saltos en las coordenadas, si el punto es muy gordo o se mueve mucho es normal, o si has puesto mucho rango en shade-variation igual te está cogiendo cualquier reflejo algo rojizo.
Pon el código a ver...
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
joana
Aprendiz de Mago
Mensajes: 39
Registrado: 09 Jul 2012, 13:33

Re: jelp!

Mensaje por joana »

Xapu, estoy intrigada con la historia del profesor!

¿Como acaba la historia? ¡No nos dejes así!
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2083
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: jelp!

Mensaje por BasicOs »

Eso.
Conseguiste hacer el buscador de pixeles para el profe?
Salu22:)
Responder