c++ - para - cómo mostrar una estera en Opencv
opencv examples (1)
Para el tapete que almacena imágenes, es fácil mostrarlo usando imshow
Pero si el tipo de datos de Mat es CV_32FC1, ¿cómo puedo mostrar este tapete?
Intenté imshow, pero la figura de la pantalla es totalmente blanca y cuando hago zoom int, todavía está totalmente en blanco, y no puedo ver los números de flotación en mat.
¿Hay alguien que sepa mostrar toda la matriz de tapete?
pd: gracias por responder. Publicaré algunos códigos y figuras para mostrar más detalles: códigos:
Mat mat1;
mat1 = Mat::ones(3,4,CV_32FC1);
mat1 = mat1 * 200;
imshow("test", mat1);
waitKey(0);
Mat dst;
normalize(mat1, dst, 0, 1, NORM_MINMAX);
imshow("test1", dst);
waitKey(0);
mat1.convertTo(dst, CV_8UC1);
imshow("test2", dst);
waitKey(0);
return 0;
salida:
después de acercar un 150%:
Luego, después de hacer un acercamiento del 150%, podemos ver que ''test'' es totalmente blanco y no podemos ver los valores de sus elementos. ''test1'' es totalmente negro y todavía no podemos ver los valores de sus elementos. Pero para ''test2'', es gris y podemos ver el valor de su elemento que es 200.
¿Este experimento significa que imshow()
solo puede mostrar CV_8UC1
y no podemos mostrar ninguna otra datatyes?
Si la image
es una estera tipo CV_32F, si la imagen es de punto flotante de 32 bits, imshow () multiplica los valores de píxel por 255, es decir, el rango de valores [0,1] se asigna a [0,255]. Por lo tanto, su imagen de coma flotante debe tener un rango de 0 ... 1.
Esto mostrará una imagen CV32F, sin importar el rango:
cv::Mat dst
cv::normalize(image, dst, 0, 1, cv::NORM_MINMAX);
cv::imshow("test", dst);
cv::waitKey(0);