のドキュメントによるとimshow
、画面に表示するために、16 ビットのグレースケールが 8 ビットに自動的にスケーリングされます。これを次のプログラムでテストしました。
#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;
}
期待どおりにグレースケール画像が表示されました。したがって、空白のウィンドウが表示される場合は、他のライブラリから cv::Mat への変換が正しく機能していないと推測されます。たとえば、最初に 8 ビットから 16 ビットに変換しようとしたとき、すべての 8 ビット値に 255 を掛けるのを忘れたため、真っ黒なイメージになりました。
デバッグの最初のステップとして、16 ビット グレースケール cv::Mat の値の一部またはすべてを表示してみます。
また、原則として、スタック オーバーフローは、質問に 1 つの質問しかない場合に最適に機能します。複数の質問がある場合、複数の有効な回答が得られますが、受け入れることができるのはそのうちの 1 つだけです。