19

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

怎么做?

我在 Visual Studio 2010 中使用 openCV 2.1。

4

3 回答 3

21

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

 mat.at<uchar>(row, column, channel) = val;
于 2012-08-03T12:30:58.297 回答
6

事实上,如OpenCV 教程中所述,有 4 种方法可以获取/设置 cv::Mat 对象中的像素值。

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

根据教程的实验,它还列出了所有 4 种方法的性能差异。

  • 高效方式 79.4717 毫秒
  • 迭代器 83.7201 毫秒
  • On-The-Fly RA 93.7878 毫秒
  • LUT 函数 32.5759 毫秒
于 2014-09-06T05:06:14.910 回答
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;
}
于 2017-05-26T02:34:00.720 回答