Zgodnie z dokumentacją dla imshow
, automatycznie przeskaluje 16-bitową skalę szarości do 8-bitowej, aby wyświetlić ją na ekranie. Testowałem to w następującym programie:
#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;
}
Wyświetlało obraz w skali szarości zgodnie z oczekiwaniami. Więc jeśli masz tylko puste okno, domyślam się, że konwersja z innej biblioteki na cv :: Mat nie działa poprawnie. Na przykład, kiedy po raz pierwszy próbowałam konwertować z 8-bitowego na 16-bitowy, otrzymałem cały czarny obraz, ponieważ zapomniałem pomnożyć wszystkie 8-bitowe wartości przez 255.
Jako pierwszy krok w debugowaniu spróbuj wyświetlić niektóre lub wszystkie wartości w 16-bitowej skali szarości cv :: Mat.
Co do zasady Stack Overflow działa najlepiej, jeśli masz tylko jedno pytanie w swoim pytaniu. W przypadku wielu pytań otrzymasz więcej niż jedną prawidłową odpowiedź, ale możesz zaakceptować tylko jedną z nich.
Upewnij się, że wywołałeś 'waitKey' po' imshow'. Pominięcie 'waitKey' będzie jednym z powodów, dla których nic się nie pojawi. – SSteve
Użyłem waitKey, a okno było puste. – LeOpArD
Prawdopodobnie nie powinieneś był mówić "nic nie pojawiło się na ekranie". To różni się od "pustego okna pojawiającego się na ekranie". Im lepsze dane w pytaniach, tym większa szansa na uzyskanie przydatnej odpowiedzi. – SSteve