Как установить пиксель в значение в объекте cv:: Mat?

Мне нужно установить один пиксель в объекте Mat на определенное значение.

Как это сделать?

Я использую openCV 2.1 с visual studio 2010.

Ответы

Ответ 1

Если вы имеете дело с матрицей uchar (CV_8U):

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

Ответ 2

На самом деле существует 4 способа получения/установки значения пикселя в объекте cv:: Mat, как описано в учебнике OpenCV.

Один упоминаемый @Régis называется On-The-Fly RA в учебнике OpenCV. Это самое удобное, но и трудоемкое время.

Основываясь на учебном эксперименте, он также отображает различия в производительности во всех четырех методах.

  • Эффективный путь 79.4717 миллисекунд
  • Итератор 83.7201 миллисекунд
  • На лету RA 93.7878 миллисекунд
  • Функция LUT 32.5759 миллисекунд

Ответ 3

Вот пример:

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;
}