2012-08-02 7 views
15

Necesito establecer un solo píxel en el objeto Mat para un cierto valor.¿Cómo establecer un píxel a un valor en un objeto cv :: Mat?

¿Cómo hacerlo?

estoy usando OpenCV 2.1 con Visual Studio 2010.

+0

posible duplicado de [OpenCV obtener información de píxeles de la imagen Mat] (http://stackoverflow.com/questions/7899108/opencv-get-pixel-information-from-mat-image) – Sam

+0

Hay muchas otras publicaciones que explican exactamente el mismo problema – Sam

+0

Por no hablar de la documentación real de OpenCV, cuyos primeros párrafos en 'cv :: Mat' deberían cubrir esto. –

Respuesta

16

Si se trata de un UCHAR (CV_8U) Matriz:

mat.at<uchar>(row, column, channel) = val; 
5

De hecho, hay 4 tipos de métodos para obtener/set un valor de píxel en un objeto cv :: Mat como se describe en the OpenCV tutorial.

El único @ Régis mencionado se llama On-The-Fly RA en el tutorial de OpenCV. Es el más conveniente, pero también consume mucho tiempo.

Según el tutorial's experiment, también enumera las diferencias de rendimiento en los 4 métodos.

  • eficientes Camino 79.4717 milisegundos
  • Iterator 83.7201 milisegundos
  • On-The-Fly RA 93.7878 milisegundos
  • función LUT 32.5759 milisegundos
2

He aquí un ejemplo:

vector<cv::Point3f> xyzBuffer; 
cv::Mat xyzBuffMat = cv::Mat(307200, 1, CV_32FC3); 
for (int i = 0; i < xyzBuffer.size(); i++) { 
    xyzBuffMat.at<cv::Vec3f>(i, 1, 0) = xyzBuffer[i].x; 
    xyzBuffMat.at<cv::Vec3f>(i, 1, 1) = xyzBuffer[i].y; 
    xyzBuffMat.at<cv::Vec3f>(i, 1, 2) = xyzBuffer[i].z; 
} 
Cuestiones relacionadas