在 OpenCV 中访问复杂 Mat 的元素

Accessing element of complex Mat in OpenCV

我需要访问包含 std::complex<double>cv::Mat 的实部特定元素。

OpenCV 提供了如何创建复杂的 cv::Mat_ here 的代码(在页面中搜索关键字 "complex" 并且该词的第一个提及是示例所在的位置)。

这是我的尝试:

Mat B = Mat_<std::complex<double> >(3, 3);
cout << B.depth() << ", " << B.channels() << endl;
B.at<double>(0, 0) = 0;
cout << "B(0,0) = " << B.at<double>(0, 0).real(); // Error due to .rea()

Mat 填充了 std::complex<double> 类型,但您在写 B.at<double>(0, 0) 时请求 double; return 类型是 double,它没有 .real() 方法。相反,您需要 return 您的 Mat 持有的复杂类型:

cout << "B(0,0) = " << B.at<std::complex<double> >(0, 0).real();

B(0,0) = 0

如果你想设置一个虚数,你需要将它实际传递到矩阵中,否则它只会设置实部:

B.at<double>(0, 0) = 2;
cout << "B(0,0) = " << B.at<std::complex<double> >(0, 0);

B(0,0) = (2,0)

B.at<std::complex<double> >(0, 0) = std::complex<double> (2, 1);
cout << "B(0,0) = " << B.at<std::complex<double> >(0, 0);

B(0,0) = (2,1)