Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在opencv中计算复数的绝对值_Opencv_Matrix - Fatal编程技术网

如何在opencv中计算复数的绝对值

如何在opencv中计算复数的绝对值,opencv,matrix,Opencv,Matrix,有谁能帮我求一个复数矩阵的绝对值吗?这个矩阵在一个通道中包含实值,在另一个通道中包含虚值。请帮我 如果可能的话,给我举个例子 提前谢谢 Arangarajan假设有两个组件:X和Y,两个大小和类型相同的矩阵。在您的情况下,它可以是real/im值 // n rows, m cols, type float; we assume the following matrices are filled cv::Mat X(n,m,CV_32F); cv::Mat Y(n,m,CV_32F); 您可

有谁能帮我求一个复数矩阵的绝对值吗?这个矩阵在一个通道中包含实值,在另一个通道中包含虚值。请帮我 如果可能的话,给我举个例子

提前谢谢
Arangarajan

假设有两个组件:X和Y,两个大小和类型相同的矩阵。在您的情况下,它可以是real/im值

// n rows, m cols, type float; we assume the following matrices are filled 
cv::Mat X(n,m,CV_32F); 
cv::Mat Y(n,m,CV_32F);
您可以这样计算每个复数的绝对值:

// create a new matrix for storage
cv::Mat A(n,m,CV_32F,cv::Scalar(0.0));
for(int i=0;i<n;i++){
  // pointer to row(i) values
  const float* rowi_x = X.ptr<float>(i);
  const float* rowi_y = Y.ptr<float>(i); 
  float* rowi_a = A.ptr<float>(i); 
  for(int j=0;j<=m;j++){ 
     rowi_a[j] = sqrt(rowi_x[j]*rowi_x[j]+rowi_y[j]*rowi_y[j]);
  }
}
//创建新的存储矩阵
cv::Mat A(n,m,cv_32F,cv::Scalar(0.0));

对于(inti=0;i让我们假设你有两个分量:X和Y,两个大小和类型相同的矩阵。在你的例子中,它可以是实/im值

// n rows, m cols, type float; we assume the following matrices are filled 
cv::Mat X(n,m,CV_32F); 
cv::Mat Y(n,m,CV_32F);
您可以这样计算每个复数的绝对值:

// create a new matrix for storage
cv::Mat A(n,m,CV_32F,cv::Scalar(0.0));
for(int i=0;i<n;i++){
  // pointer to row(i) values
  const float* rowi_x = X.ptr<float>(i);
  const float* rowi_y = Y.ptr<float>(i); 
  float* rowi_a = A.ptr<float>(i); 
  for(int j=0;j<=m;j++){ 
     rowi_a[j] = sqrt(rowi_x[j]*rowi_x[j]+rowi_y[j]*rowi_y[j]);
  }
}
//创建新的存储矩阵
cv::Mat A(n,m,cv_32F,cv::Scalar(0.0));

对于(int i=0;i如果您查看OpenCV phasecorr.cpp模块,有一个名为magSpectrums的函数已经完成了这项工作,并且也将处理共轭对称压缩DFT结果。我认为它不会被头文件公开,但复制它很容易。如果您关心速度,请确保使用任何可用的SIMD选项进行编译n也是,因为它们可以对这个计算产生很大的影响。

如果你查看OpenCV phasecorr.cpp模块,有一个名为magSpectrums的函数,它已经完成了这项工作,并将处理共轭对称压缩DFT结果。我认为它不会被头文件公开,但复制它很容易。如果你关心速度,我会确保在编译时也打开了任何可用的SIMD选项,因为它们会对计算产生很大影响。

您是指绝对值还是幅值?您是指绝对值还是幅值?