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

时间:2015-10-06 09:23:41

标签: opencv

#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;
}

当我运行此代码时,我在Changed image窗口中看到黑屏。如果我写CV_8UC3而不是CV_16UC3,则不会发生任何问题。

我的目的是将8位图像转换为16位图像,我该怎么办?

1 个答案:

答案 0 :(得分:0)

这种行为是正确的。

img_chn已正确初始化,您无法看到它,因为imshow会将CV_16U图像除以256,因此您的图片将显示为黑色(因为img_chn中的所有值是<= 255)。

如果您将图片转换为CV_16U,将值从[0,255]范围缩放到[0,255 * 256]:

img.convertTo(img_chn,CV_16UC3, 256);

您将正确看到图片。