¿Cómo obtener el valor de escala de grises de una imagen usando opencv (lenguaje C)?
2. Si se convierte a una imagen en escala de grises, es una imagen de un solo canal y lo que se obtiene es el valor de escala de grises de cada píxel.
IplImage* img = cvLoadImage("test.bmp", 0
for (int i = 0; i lt; img-gt; altura; i )
{
for (int j = 0; j lt; img-gt.width; j )
{
//Método 1: Utilice la función cvGet2D() para acceder indirectamente
CvScalar s = cvGet2D(img, i, j); //Donde i representa el eje y (fila i), es decir, la altura, y j representa el eje y (fila i), es decir, la altura. el eje x (fila i), altura, j representa el eje x (columna j), es decir, ancho,
printf("gray value=f\n", s.val[0 ]);
p>
//Método 2: Usar acceso directo
uchar val = ((uchar *)(img-gt; imageData i*img-gt; widthStep))[j]; //significado de i y j Igual que arriba
printf("gray value=d\n", val);
}
}
3. Si no se convierte a una imagen en escala de grises, entonces es una imagen de tres canales. Obtendrá el valor BGR de cada píxel y luego obtendrá el valor B, G. valor y valor R respectivamente.
IplImage* img = cvLoadImage("test.bmp", 1
for (int i = 0; i lt; img-gt; altura; i )
{
for (int j = 0; j lt; img-gt.width; j )
{
//Método 1: Utilice la función cvGet2D() para acceder indirectamente
CvScalar s=cvGet2D(img, i, j); //Donde i representa el eje y (fila i), es decir, la altura, y j representa el eje y (fila i), es decir, la altura. el eje x (fila i), es decir, la altura, y j representa el eje x (fila i), la altura, j representa el eje x (j-ésima columna), es decir, el ancho,
printf("B= f, G=f, R=f\n", s.val[0], s.val[1], s.val[2]); //tenga en cuenta que es el orden BGR
// método 2: usar acceso directo
int bVal = ((uchar *)(img-gt; imageData i*) img-gt; widthStep))[j*img-gt; 0]; // B
int gVal = ((uchar *)(img-gt; imageData i*img-gt; widthStep))[j*img-gt;
int rVal = ((uchar *)(img-gt; imageData i*img-gt; widthStep))[j*img-gt; > printf("B =d, G=d, R=d\n", bVal, gVal, rVal // Tenga en cuenta el orden BGR
}
} p>