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つのみを受け入れることができます。
'imshow'の後に' waitKey'を呼び出すようにしてください。 'waitKey'を省略すると、何も表示されない理由の1つになります。 – SSteve
私はwaitKeyを使いましたが、ウィンドウは空白でした。 – LeOpArD
「画面に何も表示されていません」と言ってはいけません。それは「空白のウィンドウが画面に表示された」とは異なります。あなたの質問の詳細が良くなれば、役に立つ答えを得るチャンスが増えます。 – SSteve