首页 > 解决方案 > 在 OpenCV.js 中更改像素值

问题描述

根据OpenCV.js文档修改像素值,您可以使用 3 种方法:

  1. 直接数据操作
  2. at()方法族
  3. ptr()方法族

尽管文档中该部分的标题说“访问和修改像素值”,但它提供了用于检索值但不用于修改它们的示例。问题是,在 C++ 中,使用atorptr方法的代码可以工作:

mat.at<type>(row, col) = value;

javascript 中的等效项无效并给出Invalid left hand side in assignment expression

mat.floatAt(row, col)) = value;

我可以使用直接数据操作方法使其工作:

mat.data[row * this.cols * this.channels() + col * this.channels()] = value;

但是此方法不适用于像素值,而是在像素可能跨越多个数组索引的底层数组数据结构中运行,因此对我的用例无效。

如何使用 OpenCV.js 修改 CvMat 中 [row, col] 位置的像素值?

标签: javascriptopencv

解决方案


我已经成功地使用 ucharPtr 设置图像(或矩阵)的单个像素。

而不是这样设置:

img.ucharPtr(i, j) = 255

我这样设置:

img.ucharPtr(i, j)[0] = 255 

即使图像是黑白的并且只有一个通道

如果要设置所有 4 个像素值,可以这样做:

src.ucharPtr(i, j)[0] = 255
src.ucharPtr(i, j)[1] = 255 
src.ucharPtr(i, j)[2] = 255 
src.ucharPtr(i, j)[3] = 0 

推荐阅读