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 への変換が行われるため、データが失われる可能性があるというビルド エラーが発生します。