[Jderobot] Duda cameraview
Oscar Garcia
oscar.robotica en linaresdigital.com
Mie Mar 12 21:14:43 CET 2014
El 12/03/14 20:31, Edgar Barrero Mateo escribió:
> Quizá es una duda tonta la que planteo pero bueno. ¿que devuelve en cada
> petición Ice cameraview? Es un array de pixeles RGB?¿que formato
> exactamente tiene esa imagen?
Todo depende del componente que envíe la imagen. En mi caso yo envío
desde Android imágenes en formato NV21.
> ¿Otra pregunta en el mismo sentido es qué devuelve exactamente
> pclRGBDServer?
A esto no te voy a responder, pero te animo que consultes el código de
la interfaz:
http://svn.jderobot.org/jderobot/trunk/src/stable/interfaces/slice/jderobot/
> Y por último y para no tener que volver a hacer preguntas tan simples,
> ¿Hay algún sitio donde encontrar algun manual o explicación de cada
> componente?
Lo mejor es consultar directamente el código. Comprobarás que están muy
documentados y casi todo el código es autoexplicativo.
Ejemplo:
http://svn.jderobot.org/jderobot/trunk/src/stable/interfaces/slice/jderobot/image.ice
/**
* A single image served as a sequence of bytes
*/
class ImageData
{
Time timeStamp; /**< TimeStamp of Data */
ImageDescription description; /**< ImageDescription of Data, for convienence purposes */
ByteSeq pixelData; /**< The image data itself. The structure of this byte sequence
depends on the image format and compression. */
};
Tal y como puedes ver la imagen en sí es una secuencia de bytes sin
ningún formato en particular. El formato en el que se envía esa
secuencia de bytes está definido en:
/**
* Static description of the image source.
*/
class ImageDescription
{
int width; /**< %Image width [pixels] */
int height;/**< %Image height [pixels] */
int size;/**< %Image size [bytes] */
string format; /**< %Image format string */
};
Es decir, en la descripción de la imagen (y no en los datos de la
imagen) se indica en qué formato están los datos.
Yo implementé en colorspaces un conversor de NV21 (el formato nativo de
Android) a RGB:
http://svn.jderobot.org/jderobot/tags/Jderobot-5.2.0/src/libs/colorspaces/imagecv.cpp
const Image::FormatPtr ImageNV21::FORMAT_NV21 = Image::Format::createFormat("NV21",CV_8UC2,&ImageNV21::createInstance,&ImageNV21::imageCvt);
Ahora se usan otros métodos para convertir esa secuencia de bytes (sea
cual sea el formato) a RGB (8 bits por canal y 3 canales). Si miras el
código de introrob:
http://svn.jderobot.org/jderobot/trunk/src/stable/components/introrob/control.cpp
void Control::createImage(Api *api) {
cvReleaseImage(&image);
this->image = cvCreateImage(cvSize(api->imageData1->description->width, api->imageData1->description->height), 8, 3);
memcpy((unsigned char *) image->imageData, &(api->imageData1->pixelData[0]), image->width * image->height * 3);
/*
colorspaces::Image::FormatPtr fmt = colorspaces::Image::Format::searchFormat(api->imageData1->description->format);
if (!fmt)
throw "Format not supported";
*/
api->imgBuff =
Gdk::Pixbuf::create_from_data((const guint8*) this->image->imageData,
Gdk::COLORSPACE_RGB,
false,
this->image->depth,
this->image->width,
this->image->height,
this->image->widthStep);
}
Si usas introrob como base obtendrás la imagen en formato RGB preparada
para ser analizada. Mira este ejemplo:
http://svn.jderobot.org/jderobot/trunk/src/stable/components/introrob/MyAlgorithms.cpp
imageCameras2openCV(); //Esta función es necesario llamarla ANTES de trabajar con las imágenes de las cámaras.
IplImage src = *this->imageCameraLeft; //Imagen de la cámara izquierda
for (i = 0; i < src.width; i++) {
for (j = 0; j < src.height; j++) {
if (((int) (unsigned char) src.imageData[(j * src.width + i) * src.nChannels] > 120) &&
((int) (unsigned char) src.imageData[(j * src.width + i) * src.nChannels + 1] < 70) &&
((int) (unsigned char) src.imageData[(j * src.width + i) * src.nChannels + 2] < 70)) {
cont++;
src.imageData[(j * src.width + i) * src.nChannels] = 255; //R
src.imageData[(j * src.width + i) * src.nChannels + 1] = 255; //G
src.imageData[(j * src.width + i) * src.nChannels + 2] = 0; //B
}
}
}
Espero que te haya servido de guía (más que ayuda).
Un saludo.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://gsyc.escet.urjc.es/pipermail/jde-developers/attachments/20140312/5d5d7147/attachment.htm
More information about the Jde-developers
mailing list