如何将像素设置为cv :: Mat对象中的值?

时间:2012-08-02 10:59:19

标签: c++ opencv

我需要将Mat对象中的单个像素设置为某个值。

怎么做?

我在visual studio 2010中使用openCV 2.1。

3 个答案:

答案 0 :(得分:17)

如果您正在处理uchar(CV_8U)矩阵:

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

答案 1 :(得分:5)

实际上,如the OpenCV tutorial中所述,有4种方法可以在cv :: Mat对象中获取/设置像素值。

在OpenCV教程中提到的@Régis被称为 On-The-Fly RA 。这是最方便但也很耗时的。

基于tutorial's experiment,它还列出了所有4种方法的性能差异。

  • 高效方式79.4717毫秒
  • Iterator 83.7201毫秒
  • On-The-Fly RA 93.7878毫秒
  • LUT功能32.5759毫秒

答案 2 :(得分:2)

以下是一个例子:

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