2017-08-25 2 views
0

J'ai besoin d'accéder à l'élément spécifique à la pièce d'un cv::Mat qui contient std::complex<double>. OpenCV fournit des codes sur la façon de créer un complexe cv::Mat_here (recherchez le mot-clé "complexe" dans la page et la première mention de ce mot est où est l'exemple).Accéder à l'élément du Mat complexe dans OpenCV

Voici ma tentative:

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() 

Répondre

1

Le Mat est rempli avec le type std::complex<double> mais vous demandez un double lorsque vous écrivez B.at<double>(0, 0); le type de retour est double, qui n'a pas de méthode .real(). Au lieu de cela, vous devez retourner le type complexe votre Mat détient:

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

B (0,0) = 0

Si vous souhaitez définir un nombre imaginaire, vous aurez besoin de passer en fait que dans la matrice, sinon il définit simplement la partie réelle:

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

Wow Alexander, qui est exactement ce que je cherchais. Merci, mon ami! – Josh