【问题标题】:Java equivalent of opencv c++ Mat->data[]Java 等效于 opencv c++ Mat->data[]
【发布时间】:2017-11-29 02:43:45
【问题描述】:

我遇到了这个在背景上叠加透明图像的功能。 https://gist.github.com/maximus5684/082f8939edb6aed7ba0a

它在 C++ 中工作得很好。但是在转换回java时。我找不到这个特定的等效 Java 调用。

double opacity = ((double)overlay->data[fY * overlay->step + fX * overlay->channels() + 3]) / 255;

我正在使用官方 Opencv Java 绑定版本 3.1 将其转换为 java。 谁能指导我正确的方向?

【问题讨论】:

  • 您使用的是官方的 Java 绑定吗?请在您的问题中说明这一点,以及 OpenCV 版本。
  • 能否也包含overlay矩阵的定义?预期的维度和值类型是什么?
  • 这只是在位置overlay 处获取(fX, fY) 的第4 个通道的值,将其转换为两倍并按1.0/255.0 缩放。
  • 在 Java OpenCV 绑定中,Mat 类提供了 getput,所以只需使用它们即可。至少阅读Mat documentation page 的前几段应该有助于了解该表达式的含义。

标签: java opencv opacity


【解决方案1】:

也不太推荐使用 OpenCV C++ API。您有模板 Mat::at 函数,它允许您通过引用检索矩阵的特定点的值:

double opacity = static_cast<double>(overlay->at<unsigned char>(fy, fx, 3));

由于 Java 没有指针运算,也没有对数组元素的纯引用,因此绑定提供了 getput 方法重载。如果我没记错的话,你应该试试这样的:

double opacity = overlay.get(fy, fx)[3] / 255.;
src.put(y, x, srcPx * (1. - opacity) + overlayPx * opacity);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 2021-08-20
  • 2011-06-03
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多