2012-08-02 14 views
15

Potrzebuję ustawić pojedynczy piksel w obiekcie Mat na określoną wartość.Jak ustawić piksel na wartość w obiekcie cv :: Mat?

Jak to zrobić?

Używam OpenCV 2.1 z visual studio 2010.

+0

możliwych duplikatów [OpenCV pobierz informacje o pikselach z obrazu Mat] (http://stackoverflow.com/questions/7899108/opencv-get-pixel-information-from-mat-image) – Sam

+0

Istnieje wiele innych postów wyjaśniających dokładnie ten sam problem – Sam

+0

Nie mówiąc już o faktycznej dokumentacji OpenCV, której pierwsze kilka akapitów na 'cv :: Mat' powinno to omówić. –

Odpowiedz

16

Jeśli masz do czynienia z uchar (CV_8U) matryca:

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

W rzeczywistości istnieją 4 rodzaje metod get/set wartość piksela w obiekcie cv :: Mat, jak opisano w the OpenCV tutorial.

Wspomniany jeden @ Régis jest nazywany On-The-Fly RA w samouczku OpenCV. Jest to najwygodniejsze, ale również czasochłonne.

Na podstawie tutorial's experiment podaje również różnice wydajności we wszystkich 4 metodach.

  • efektywny sposób 79.4717 milisekund
  • Iterator 83.7201 milisekund
  • On-The-Fly RA 93,7878 milisekund
  • LUT funkcja 32.5759 milisekund
2

Oto przykład:

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; 
} 
Powiązane problemy