【问题标题】:Which function can I use in opencv as max() in matlab我可以在 opencv 中使用哪个函数作为 matlab 中的 max()
【发布时间】:2014-08-27 16:28:15
【问题描述】:

在 MATLAB 中:

max(image,0)

将负值设置为零。 OpenCV 中是否有任何可用的功能来做同样的事情?

【问题讨论】:

  • 可能不是,但它非常容易编码。只需迭代 Matrix 值,如果它们小于 0,则将它们设置为零。从字面上看,它的 4 行代码。在 Matlab 中,对矩阵使用内置函数比逐元素迭代更快,但在 C++ 中,迭代没有问题。
  • @AnderBiguri 不需要迭代,可以使用 Mat Expressions (MatExpr)。请参阅下面的答案;)

标签: c++ matlab opencv matrix max


【解决方案1】:

实际上完全相同的语法可以工作:

Mat im = cv::imread("...");
Mat im_capped = cv::max(im, 0);

或者如果你想给它一个相同大小的零矩阵:

Mat thresh(im.size(), im.type(), Scalar::all(0));
Mat im_capped = cv::max(im, thresh);

根据docs

【讨论】:

  • 这是正确的答案。我的是正确的,但这正是 OP 所要求的:D
  • hmmm.. 现在我在想.. 哪种方法更快?
  • 这里是Mat::setTo的源代码,这里是cv::max(实际上它调用了一个通用函数binary_op,它实现了许多类似的二元运算符)
  • 好的,im<0 部分将创建一种延迟矩阵表达式(请参阅matop.cpp),最终将在评估时调用cv::compare。这是拼图的最后一块:)
【解决方案2】:

你可以使用类似的东西:

Mat im = ReadSomeImage(...);
Mat masked = im.setTo(0,im<0); /// <<<

setTo(0,im&lt;0) 满足您的需求。

【讨论】:

猜你喜欢
  • 2021-08-20
  • 2018-10-03
  • 2021-02-26
  • 2015-11-11
  • 1970-01-01
  • 2018-03-12
  • 2019-10-18
  • 1970-01-01
  • 2015-10-02
相关资源
最近更新 更多