2015-10-06 92 views
1
#include "stdafx.h" 
#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/imgproc/imgproc.hpp" 
#include <iostream> 

using namespace cv; 
using namespace std; 

int main(int argc, char** argv){ 

     Mat img = imread("Nature.jpg"); // Read image from file 
     Mat img_chn; 

     img.convertTo(img_chn,CV_16UC3); 

     imshow("Changed image", img_chn); //show the changed image 
     imshow("Original İmage", img); //show the original image 

     waitKey(0); // Wait until user press some key 
     return 0; 
} 

當我運行這段代碼時,我在變化的圖像窗口中看到黑屏。如果我寫CV_8UC3而不是CV_16UC3那麼沒有問題發生。如何在opencv中深入轉換圖像(CV_8UC3)?

我的目的是將8位圖像轉換爲16位圖像,我該怎麼辦?

回答

0

此行爲正確。

img_chn正確初始化,你就不能看到它,因爲imshow將256分CV_16U圖像,所以圖像會出現黑(因爲img_chn所有值都<= 255)。

如果將圖像轉換爲CV_16U從區間[0,255]擴大值[0,255 * 256]:

img.convertTo(img_chn,CV_16UC3, 256); 

,你會看到正確的圖像。

+0

謝謝,如果我想轉換爲32位什麼必須寫在這裏? img.convertTo(img_chn,CV_16UC3,###); – Berkay

+0

如果你的意思是浮點值CV_32F,你需要這些值在[0,1]中,所以'img.convertTo(img_chn,CV_32F,1.0/255.0)'; – Miki

+0

實際上我想表示'CV_32SC3' ... – Berkay