2017-09-03 2 views
-1

J'ai un réseau de flotteursimshow() dans OpenCV ne fonctionne pas pour cv :: Mat type CV_32F?

float* data; // stores pixel gray color 
cv::Mat img(h,w,CV_32F,data); 
cv::namedWindow("Display window"); 
cv::imshow("Display window", img); 

Alors ce que je reçois est:

enter image description here

j'ai cherché beaucoup de ressources, mais ne pourrais pas trouver dehors. Je doute que ce soit le problème du type mais j'ai comparé avec la définition et je pense que c'est ok.

Quelqu'un peut-il me dire la raison?

+0

qu'est-ce que vous vous attendez à ressembler? De quelle couleur est 3.40282347E + 38? Ou -3.40282347E + 38 d'ailleurs. Essayez de convertir la plage de flotteurs qui vous intéresse en 8 mais –

+0

Si le type est flottant, les valeurs doivent être comprises entre 0 et 1 pour être affichées correctement ... n'avez-vous pas lu le document? – Miki

+0

pixel <= 0 est rendu noir, pixel> = 1 rendu blanc 0 Micka

Répondre

0

Si votre image est un canal unique, alors vous le convertir en CV_8U par:

float* data; // stores pixel gray color 

cv::Mat img(h,w,CV_32F,data), 8u_image; 

img.convertTo(8u_image,CV_8U); 

cv::namedWindow("Display window"); 

cv::imshow("Display window", 8u_image); 
+0

Mais ma question est CV_32F est également un seul canal, pourquoi il ne peut pas montrer l'image? – Billadsf

+0

tout pixel au-dessus d'une valeur de 255 sera affiché en blanc. D'où vous avez un écran blanc. –