gpt4 book ai didi

c++ - 带有负元素的OpenCV Mat的战俘

转载 作者:行者123 更新时间:2023-12-02 09:57:45 24 4
gpt4 key购买 nike

我试图用MATLAB将一些代码从c++转换为OpenCV,但是我陷入了这一行:MATLAB代码:

t3 = real((ISimMatrix .* QSimMatrix) .^ 0.02)
我用以下代码在c++中重新实现了这一行:
cv::Mat t2, t3;
t2 = ISimMatrix.mul(QSimMatrix);
cv::pow(t2, lambda, t3);
ISimMatrixQSimMatrix均为二维双矩阵,可能包含负数,问题是当它们的倍数幂为0.02时, MATLAB结果为2D复数矩阵,但 OpenCV结果为 Mat_<double>巫婆,某些元素是nan,导致所有后续计算都进行错误。
如何实现支持负功率的pow功能?
谢谢。

最佳答案

当然可以选择使用其他库,但是在c++中对复数进行了一些搜索之后,我编写了简单的函数来解决问题:

inline cv::Mat cpow(cv::Mat m, double o) {
cv::Mat_<cv::Vec2f> out = cv::Mat_<cv::Vec2f>(m.rows, m.cols);
for (size_t i = 0; i < m.rows; i++)
{
for (size_t j = 0; j < m.cols; j++)
{
std::complex<double> b(m.at<double>(i, j), 0);
std::complex<double> p(o, 0);
std::complex<double> r = std::pow(b, p);
out.at<cv::Vec2f>(i, j) = cv::Vec2f(r.real(), r.imag());
}
}
return out;
}

关于c++ - 带有负元素的OpenCV Mat的战俘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64392239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com