OpenCv use exp with Mat
OpenCv use exp with Mat
我想根据以下公式在OpenCV中执行矩阵计算:
newMat = 1 / ( 1 + exp( scalar * ( otherScalar - Matrix ) ) )
有没有一种简单的方法可以在 OpenCV 中做到这一点,或者我必须在 for 循环中计算它?对我来说,主要问题是exp(矩阵)。
问候
Maecky 的答案非常好 - 对于 1 通道图像。
如果您的图片有多个频道,乐趣就开始了。出于某些原因,
float(scalar) - _3ChannelMat
仅在第一个通道上应用运算,而乘法
float(scalar2) * _3channelMat
在图像的所有通道上完成。很有趣,不是吗?
解决方案是使用 cv::Scalars:
newMat = cv::Scalar(0.4, 0.4, 0.4) * ( cv::Scalar(255, 255, 255) - _3channelMat);
我不久前已经就这种奇怪的行为提出了一个错误,但还没有答案。
好的,我自己找到了答案,如果有人有同样的问题,这里是代码:
newMat = float(scalar) * ( float(otherScalar) - newMat);
cv::exp( newMat, newMat );
newMat= 1.0f / ( 1.0f + newMat);
@Maecky你
很可能只是在答案中写了一个错误。
1+A
通常表示I+A
,1/A 表示反转(即 A^{-1}),其中 I
是单位矩阵——在 matlab 和 opencv 中称为眼。(此外 F/A === F*A^{-1})
在您的解决方案中,您将一个多一矩阵添加到newMat
(在 matlab 和 opencv 中称为矩阵),而不是眼睛。
正确(即计算(I + exp(scalar*(otherScalar*I-Matrix)))^{-1} ):
using namespace cv;
Size s = Matrix.size();
int t = Matrix.type();
Mat newMat;
Mat I = Mat::eye(s,t);
exp( scalar * ( otherScalar*I - Matrix ), newMat );
newMat = (I + newMat).inv();
相关文章:
- Difference in displaying cv2 Mat
- Problems with std::cin.fail()
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 将CHW格式的浮点向量转换为cv::Mat
- C++中的openCV Mat访问冲突
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- Boost.TEST with CLion: "Test framework quit unexpectedly"
- 避免碎片化的ClientHellos with OpenSSL (DTLS)
- Issues with Win32 ReadProcessMemory API
- Qt with WinAPI MouseProc
- [[maybe_unused]] with structured_binding?
- Issue with WriteProcessMemory
- OpenCV RTP-Stream with FFMPEG
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- OpenCV 和从 OutputArrays 或 (Mat) 读取数据
- std::adjacent_difference with std::chrono time_point
- Opencv Mat to opengl with OSVR
- OpenCv use exp with Mat
- error with gpumat and mat