#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位图像,我该怎么办?
答案 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);
您将正确看到图片。