我尝试使用 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 的数据放入数据中?