Как установить пиксель в значение в объекте 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; }
Ответ 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; }