如何用相同的矩阵分别乘以每个通道

How to multiply each channel separately with same matrix?

本文关键字:通道 何用相      更新时间:2023-10-16

我有一个相同大小的1通道和3通道Mat s,称它们为aimg。我想用a乘以img的每个通道。我还会做很多次,性能是个问题。

是否有一种方法使用multiply()操作或乘法运算符重载从OpenCV的优化中受益?出于性能原因,我尽量避免编写自己的循环,使用操作符也会导致更干净的代码。

由于性能问题,我不想将a重复三次,将merge()重复到单个3通道的Mat中。

是否有一种方法使用乘法()操作或乘法运算符重载从OpenCV的优化中受益?

OpenCV3推送使用cv::UMat类来代替cv::Mat。这将在可能的情况下给你一点GPU加速。

出于性能原因,我尽量避免编写自己的循环,使用操作符也会导致更干净的代码。

我不同意,performance reasons可能是错误的,因为你将依赖于用于构建库的任何编译。如果库没有AVX2,您将失去性能。此外,您将被限制在OpenCV的原语,这大大增加了内存访问。具体来说,每次执行cv::add(A,B,C)cv::sqrt(C,C)之类的操作时,都会额外占用内存一段时间,从而导致显著的性能下降。

它也绝对不是更干净的代码,更像是为旧的波兰符号计算器编写脚本。

总之,如果你有性能问题抓住.data()指针,检查它是否矢量化,并在c++/CUDA/OCL中做你的工作。