Página 1 de 1

jelp!

Publicado: 14 Dic 2010, 16:48
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


Re: jelp!

Publicado: 15 Dic 2010, 09:09
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!

Re: jelp!

Publicado: 15 Dic 2010, 18:43
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.

Re: jelp!

Publicado: 16 Dic 2010, 09:34
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...

Re: jelp!

Publicado: 13 Jul 2012, 12:31
por joana
Xapu, estoy intrigada con la historia del profesor!

¿Como acaba la historia? ¡No nos dejes así!

Re: jelp!

Publicado: 13 Jul 2012, 19:00
por BasicOs
Eso.
Conseguiste hacer el buscador de pixeles para el profe?
Salu22:)