2017-08-07 74 views
0

這是我的代碼,當我嘗試,如果我我的代碼更改爲imshow OpenCV的好好嘗試一下顯示的圖像

cv::Mat src(height, width, CV_32F); 
for (int i = 0; i < width* height; ++i) 
{ 
    src.at<float>(i) = input_image[i]/1023; 
} 

enter image description here

使用imshow圖像爲黑色,

cv::Mat src(height, width, CV_16U); 
    for (int i = 0; i < width* height; ++i) 
    { 
     src.at<unsigned short>(i) = input_image[i]/1023; 
    } 
    cv::Mat temp; 
    cv::resize(src, temp, cv::Size(), 0.3, 0.3, cv::INTER_LINEAR); 
    cv::imshow("image1", temp); 
    cv::waitKey(0); 

    cv::Mat imageData; 
    cv::cvtColor(src, imageData, cv::COLOR_BayerGR2RGB); 

    cv::resize(imageData, temp, cv::Size(), 0.3, 0.3, cv::INTER_LINEAR); 
    cv::imshow("image1", temp); 
    cv::waitKey(0); 

你能解釋如何顯示圖像嗎?

+2

我*猜*因爲'input_image [I]/1023'產生0和1之間的值時強制轉換爲無符號短會轉換爲0。這是什麼的類型和範圍'input_image'中的值? – beaker

+0

這是一個雙倍達到1024 – Gilad

回答

1

由於您的input_image0..1023範圍內,除以1023得到的值介於0和1之間。當您將其轉換爲無符號整數類型時,圖像全爲零。 (這可能圓他們有的爲1,但是這不是真的要可見反正)

要獲得數以使用全套的unsigned short,你需要65535乘:

src.at<unsigned short>(i) = input_image[i]/1024*65536; 

src.at<unsigned short>(i) = input_image[i]*64; 
+0

工作就像一個魅力謝謝 – Gilad

相關問題