gpt4 book ai didi

c++ - 为什么 cv::Mat::data 总是指向一个 uchar?

转载 作者:太空狗 更新时间:2023-10-29 21:38:37 24 4
gpt4 key购买 nike

我尝试使用 LibRaw 读取 NEF 文件,然后将其放入 cv::Mat 中。 NEF 文件将数据存储为 12 位,这意味着我需要 16 位,所以我应该像这样使用 CV_16UC4:

Mat img1(height, width, CV_16UC4);

Libraw 将数据存储为 ushort*[4],所以我认为这应该可行:

for (i = 0; i < iwidth*height; i++) {       
img1.data[4*i+1] = Processor.imgdata.image[i][0];
img1.data[4*i+2] = Processor.imgdata.image[i][1];
img1.data[4*i+3] = Processor.imgdata.image[i][2];
img1.data[4*i+4] = Processor.imgdata.image[i][3];
}

我还收到一个构建错误,提示数据可能会丢失,因为将要进行 ushort 到 uchar 的转换,这是有道理的,但是,如何将大于 uchar 的数据放入数据中?

最佳答案

如果您需要指向特定类型原始数据的指针,最好使用 cv::Mat::ptr():

ushort* ptr = img1.ptr<ushort>();
for (i = 0; i < iwidth*height; i++) {
ptr[4*i+1] = Processor.imgdata.image[i][0];
ptr[4*i+2] = Processor.imgdata.image[i][1];
ptr[4*i+3] = Processor.imgdata.image[i][2];
ptr[4*i+4] = Processor.imgdata.image[i][3];
}

请参阅documentation .

关于c++ - 为什么 cv::Mat::data 总是指向一个 uchar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34763098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com