如何在OpenCV C ++中将16位图像转换为8位

时间:2018-07-27 01:35:08

标签: opencv

我坚持使用connectedComponents函数。

const uint16_t* depth_frame_data = (const uint16_t*)(rs2_get_frame_data(frame, &e));
Mat image(Size(WIDTH, HEIGHT), CV_16UC1, (void *)depth_frame_data, Mat::AUTO_STEP);
threshold(image, image_th, one_meter, 255, THRESH_BINARY_INV);

我认为这对connectedComponents就足够了,但是我刚刚意识到我应该输入二进制Matrix:

Mat image_bin(image_th, true);
image_bin.convertTo(image_bin, CV_8U, 0.00390625);

但是当我构建它时,

  

OpenCV(3.4.2)错误:声明失败...

对我有什么建议吗? 我正在使用英特尔GPU。

2 个答案:

答案 0 :(得分:2)

使用其他功能解决了该问题。

Mat image_grayscale = image.clone();
image_grayscale.convertTo(image_grayscale, CV_8U, 1 / 256.0);

猜测克隆存在问题

答案 1 :(得分:0)

要将8位图像转换为16位图像

<?xml version="1.0" encoding="utf-8"?>

适用于16位图像到8位图像

image_16bit = image_8bit * 257 ;

我希望这会有所帮助,谢谢。