根據用於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中的部分或全部值。
此外,作爲一般規則,堆棧溢出效果最好,如果你只需要在你的問題一個問題。當有多個問題時,你會得到多個有效的答案,但你只能接受其中的一個。
確保你投入'waitKey'通話imshow'後'。省略'waitKey'將是什麼都沒有出現的原因之一。 – SSteve
我確實使用了waitKey,窗口在那裏但空白。 – LeOpArD
你可能不應該說「沒有出現在屏幕上」。這不同於「屏幕上出現空白窗口」。問題中的細節越好,獲得有用答案的機會就越大。 – SSteve