Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Como ya estoy de medio vacaciones, pero a la vez no tengo demasiados medios técnicos, me dedico a recopilar datos y a procesarlos como puedo en mi cabecilla, para poder hacer cosas en verano.
Como sabeis estoy con el tema del Bluetooth... a falta de hacer algunas pruebas con otro ordenador, el tema del TouchPad... necesito más medios que mi portatil... y... ahora viene el proyecto guapi guapi... Visión artificial con una simple webcam, entonces aqui vienen mis preguntas y aclaraciones:
·Sé que es posible, porque si no me equivoco Golfus Hispanicus lo emplea, asi como otros proyectos como los de esta chiquita tan maja: Mavis
·¿Cómo se empieza en este mundito?
·¿Qué librerías usais para obtener imágenes de la webcam?
·¿Qué librerías usais para procesar la imagen?
·¿Es imprescindible programar el sistema en C?
·¿Tenemos algun proyecto de ejemplo?
Yo estoy comenzando con la librería WebCam.dll, pero me temo que es muy incompleta, y además consume demasiados recursos comparándolo con el proyecto de Mavis. Aun así, tengo un programa hecho que lo único que tiene es un botón, con el que al pulsarlo, se copia la imágen de la webcam en un control PictureBox... me imagino que es un primer paso en este mundo, y que me quedan miles de caminos que recorrer, pero esta librería no sé si da mucho más de si, de modo que me gustaría que alguno que haya trabajado con esto me eche un cablecillo.
Seguiré informando. Muchas gracias por la ayuda.
Ángel
A mi me interesa mucho mas que nada por el como trabajar con un sistema de visión en campo abierto con las diferencias lumínicas tan gigantescas que puede haber de una zona a otra o de un momento a otro del dia.
Si tengo que usar OpenCV tampoco me voy a tirar de los pelos.... 😀
furri.
Una pista en cuanto a las diferencias de luz....
Todavía no tengo una gran cantidad de imágenes reales para corroborarlo, pero trabajar en espacio HSV simplifica enormemente las cosas, ten en cuenta que el canar H (hue) es el tono del color, es decir en ese canal no hay información sobre la intensidad lumínica, por lo que un rojo casi sin luz teóricamente debería tener el mismo valor para H que un rojo muy iluminado.
Otra cosa distinta es si en las imágenes reales se dan problemas de saturación, para esto es muy conveniente trabajar con una cámara con balance de blancos automático
Hola a todos, más o menos soy nuevo y me estoy metiendo en el mundillo de vision artificial por mi proyecto, estoy trabajando con VC++ , con Opencv y las IPL. Y en una interficie que he creado, tengo 2 PictureBox, en los que quiero mostrar las imagenes capturadas de una Camara , se mostrar las imagenes mediante CvNameWindow y cvShowimagen, pero mostrarlo en un pictureBox mediante CStatic, no me sale, no se si debo ponerlo en BMP, entonces tendria que pasar una imagen IPLimage a BMP.
He visto diferentes programas en este threads, que más o menos muetran lo que quiero hacer, como por ejemplo tener la imagen de entrada a la izquierda y la modificada a la derecha.
Si alguien me puede ayudar, o más o menos indicarme o pasarme algo de codigo.
Gracias por todo. Me vereis bastante por aquí 🙂
Debes transformar la imagen IplImage a Bitmap. Yo tengo hecho eso pero para OpenCVDotNet (C#) pues hay una instrucción que convierte a Bitmap facilmente,en Opencv lo muestro en pantallas independientes.
De todas formas, este código (no es mio) seguro que te puede ayudarpublic Bitmap convertCvImageToBitmap(CvImage Img)
{
if ((Img.Size.width != mBitmap.Size.Width) ||
(Img.Size.height != mBitmap.Size.Height))
{
mBitmap = new
Bitmap(Img.Size.width,Img.Size.height,PixelFormat.Format8bppIndexed);
mBitmap.Palette=BitmapPalette;
}
BitmapData bmData = mBitmap.LockBits(new Rectangle(0, 0,
mBitmap.Width, mBitmap.Height),
ImageLockMode.WriteOnly, mBitmap.PixelFormat);
int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0;
unsafe
{
byte * p = (byte *)(void *)Scan0;
int nOffset = stride - mBitmap.Width;
int nWidth = mBitmap.Width;
int nHeight = mBitmap.Height;
for(int y=0;y < nHeight;++y)
{
for(int x=0; x < nWidth; ++x, p++ )
{
p[0] = *( (byte*)Img.getPixelAddr(x,y,1));
}
p += nOffset;
}
}
mBitmap.UnlockBits(bmData);
return mBitmap;
}
Gracias amigo, lo probaré cuanto antes y os comento 😉