javascript - 在 OpenCV.js 中更改像素值
问题描述
根据OpenCV.js文档修改像素值,您可以使用 3 种方法:
- 直接数据操作
at()
方法族ptr()
方法族
尽管文档中该部分的标题说“访问和修改像素值”,但它提供了用于检索值但不用于修改它们的示例。问题是,在 C++ 中,使用at
orptr
方法的代码可以工作:
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] 位置的像素值?
解决方案
我已经成功地使用 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
推荐阅读
- c# - 如何在 Gridview 的第 2 列的基础上添加自动增量号
- google-apps-script - Google 数据工作室连接器 - getFields() 获取配置数据
- html - 图像未正确浮动
- javascript - 我的 Select2 Matcher 功能有问题吗?
- java - Android WebView 不加载 HTML
- paypal - 尝试使用贝宝从网站取款时出现“一般错误”
- numpy - 是否无法在使用@njit 并行化的自定义 python 函数中调用内置函数,例如 svd?
- rest - Office 365 邮件安全 webhook API
- nginx - NGINX:如何连接两个具有相同地址和名称的服务器
- sql - 检测通过 SQL sendmail 和 SMTP 发送的未送达邮件