Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo obtener el valor de escala de grises de una imagen usando opencv (lenguaje C)?

¿Cómo obtener el valor de escala de grises de una imagen usando opencv (lenguaje C)?

1. Puede convertirse en una imagen en escala de grises o permanecer sin cambios. Esto supone que todas sus imágenes son del tipo IPL_DEPTH_8U.

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

}

}