如何在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);
,你会看到正确的图像。
谢谢,如果我想转换为32位什么必须写在这里? img.convertTo(img_chn,CV_16UC3,###); – Berkay
如果你的意思是浮点值CV_32F,你需要这些值在[0,1]中,所以'img.convertTo(img_chn,CV_32F,1.0/255.0)'; – Miki
实际上我想表示'CV_32SC3' ... – Berkay