para necesarios libreria library elementos dibujar crear c++ image-processing opencv computer-vision

c++ - necesarios - La forma más rápida de extraer datos de píxeles individuales?



elementos necesarios para dibujar un pixel en c# (2)

for (int row=0;row<image.height;row++) { unsigned char *data = image.ptr(row); for (int col=0;col<image.width;col++) { // then use *data for the pixel value, assuming you know the order, RGB etc // Note ''rgb'' is actually stored B,G,R blue= *data++; green = *data++; red = *data++; } }

Necesita obtener el puntero de datos en cada fila nueva porque opencv rellenará los datos con un límite de 32 bits al comienzo de cada fila

Tengo que obtener información sobre el valor escalar de muchos píxeles en una imagen en escala de grises usando OpenCV. Estará atravesando cientos de miles de píxeles, así que necesito el método más rápido posible. Cada otra fuente que he encontrado en línea ha sido muy críptica y difícil de entender. ¿Hay una línea simple de código que simplemente debe entregar un valor entero simple que represente el valor escalar del primer canal (brillo) de la imagen?


Con respecto a la publicación de Martin, en realidad se puede verificar si la memoria se asigna continuamente utilizando el método isContinuous () en el objeto Mat de OpenCV. La siguiente es una expresión común para asegurar que el bucle externo solo se repita una vez si es posible:

#include <opencv2/core/core.hpp> using namespace cv; int main(void) { Mat img = imread("test.jpg"); int rows = img.rows; int cols = img.cols; if (img.isContinuous()) { cols = rows * cols; // Loop over all pixels as 1D array. rows = 1; } for (int i = 0; i < rows; i++) { Vec3b *ptr = img.ptr<Vec3b>(i); for (int j = 0; j < cols; j++) { Vec3b pixel = ptr[j]; } } return 0; }