c++ - OpenCV-IplImage
(4)
¿Qué es IplImage
en OpenCV
? ¿Puedes explicar qué se entiende por tipo de letra? ¿Cuándo debemos usarlo?
Gracias.
Basado en la etiqueta ''c ++'' que tiene en su pregunta: No debe usarla, debe usar cv :: Mat. Cada IplImage es un cv :: Mat internamente.
IplImage solo se utiliza en la API de C. Es un tipo de CvMat y contiene datos de imagen. Su nombre proviene de las raíces de OpenCV (Intel IPL).
Ya no es relevante si utiliza la API de C ++ de OpenCV.
IplImage y cv :: Mat son diferentes tipos de encabezados para datos de matriz / imagen. Básicamente son compatibles entre sí, pero IplImage se usa en la API C de OpenCV, mientras que cv :: Mat se usa en la nueva API C ++.
Cuando decida utilizar la API C de OpenCV, usará principalmente IplImages. De lo contrario usará mayormente cv :: Mats.
Por supuesto, puedes convertir IplImages y cv :: Mats entre sí, por ejemplo
cv::Mat mat(myIplImage);
En este caso, comparten los mismos datos subyacentes, es decir, las modificaciones realizadas a través de cualquiera de los encabezados serán visibles sin importar qué encabezado esté usando para acceder a los datos.
La copia profunda (no solo el encabezado se "transforma" / copia, sino también los datos subyacentes) es posible con
cv::Mat mat(myIplImage, true)
Tenga en cuenta que múltiples IplImages también pueden apuntar a los mismos datos subyacentes, al igual que múltiples cv :: Mats.
Cuando se trabaja con OpenCV y bibliotecas similares, es importante tener en cuenta que cv :: Mats e IplImages son solo "encabezados" para los datos reales. Se podría decir que cv :: Mats e IplImages son básicamente punteros más metainformación importante como el número de filas, columnas, canales y el tipo de datos utilizado para celdas / píxeles individuales de la matriz / imagen. Y, al igual que los punteros reales, pueden hacer referencia / apuntar a los mismos datos reales .
Por ejemplo, mire la definición de IplImage: http://opencv.willowgarage.com/documentation/basic_structures.html#iplimage
El miembro más importante es char *imageData;
. Este puntero hace referencia a los datos de la imagen real . Sin embargo, la imagen IplImage en su conjunto también contiene metainformación sobre la imagen, como el número de filas y columnas.
La estructura IplImage se heredó de la Biblioteca de procesamiento de imágenes Intel, en la que el formato es nativo. OpenCV solo admite un subconjunto de posibles formatos IplImage, como se describe en la lista de parámetros anterior.
Si está utilizando C ++, no usa IplImage porque esto solo se usa en un programa C (IplImage está en C API). Además, si está usando C, necesita publicar Cv antes de los nombres de las variables: "CvMat *" "CvPoint " "IplImage ", etc. Es mejor usar el código C ++, no use Cv: "Mat * ", etc. pero no puede usar el tipo IplImage, en lugar de IplImage usa un tipo Mat, por ejemplo, en la función findchessboardcorner.