如何在opencv中深入转换图像(CV_8UC3)?

如何在opencv中深入转换图像(CV_8UC3)?

问题描述:

#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位图像,我该怎么办?

此行为正确。

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