在OpenCV中访问复杂Mat的元素

问题描述:

我需要访问包含std::complex<double>cv::Mat的实数部分特定元素。在OpenCV中访问复杂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>但你请求一个double当你写B.at<double>(0, 0);返回类型是double,它没有.real()方法。相反,你需要返回复杂的类型,你的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)

+0

哇亚历山大,这正是我一直在寻找。谢谢你,朋友! – Josh