Secondo la documentazione per imshow
, ridimensionerà automaticamente una scala di grigi a 16 bit a 8 bit per visualizzarlo sullo schermo. Ho provato questo con il seguente programma:
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace std;
int main(int argc, char *argv[]) {
cv::Mat image;
image = cv::imread("pic2.jpg");
if (!image.data) {
std::cout << "Image file not found\n";
return 1;
}
cv::cvtColor(image, image, CV_BGR2GRAY);
cv::Mat pic16bit;
image.convertTo(pic16bit, CV_16U, 255); //convert to 16-bit by multiplying all values by 255
// create image window named "asdfasdf"
cv::namedWindow("asdfasdf");
// show the image on window
cv::imshow("asdfasdf", pic16bit);
// wait for key
cv::waitKey(0);
return 0;
}
E 'visualizzata l'immagine in scala di grigi come previsto. Quindi, se stai ottenendo una finestra vuota, suppongo che la conversione dall'altra libreria a cv :: Mat non funzioni correttamente. Ad esempio, quando ho provato a convertire da 8 bit a 16 bit ho ottenuto un'immagine tutto nero perché ho dimenticato di moltiplicare tutti i valori di 8 bit per 255.
Come primo passo nel debug prova a visualizzare alcuni o tutti i valori nella scala di grigi a 16 bit cv :: Mat.
Inoltre, come regola generale, Stack Overflow funziona meglio se nella domanda è presente una sola domanda. Quando ci sono più domande si finisce con più di una risposta valida, ma è possibile accettarne solo una.
Assicurati di mettere una chiamata a 'waitKey' dopo' imshow'. Omettere 'waitKey' sarebbe una delle ragioni per cui non dovrebbe comparire nulla. – SSteve
Ho usato waitKey e la finestra era lì, ma vuota. – LeOpArD
Probabilmente non avresti dovuto dire "niente è apparso sullo schermo". È diverso da "una schermata vuota è apparso sullo schermo". Migliori sono i dettagli delle tue domande, maggiori saranno le possibilità di ottenere una risposta utile. – SSteve