在 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)
我需要访问包含 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)