Opencv 将Libraw格式转换为cv::Mat

Opencv 将Libraw格式转换为cv::Mat,opencv,Opencv,我试图用libraw库加载原始格式(尤其是Nikon.NEF),然后将其转换为opencv格式cv::Mat 过去有人解决过这个问题吗?如何实现这一点?我有一种从libraw到QImage(Qt)的转换方法。然而,这演示了libraw的使用,并且应该很容易适应cv::Mat。 我的解决方案大致类似于此: 由于对原始问题的评论中存在开放性问题,进一步的评论是:您可以使用libraw控制白平衡、色度缩短、失真校正等功能: 将嵌入的原始缩略图从libraw转换为QImage: LibRaw处理器; Q

我试图用libraw库加载原始格式(尤其是Nikon.NEF),然后将其转换为opencv格式
cv::Mat


过去有人解决过这个问题吗?如何实现这一点?

我有一种从libraw到
QImage
(Qt)的转换方法。然而,这演示了libraw的使用,并且应该很容易适应
cv::Mat
。 我的解决方案大致类似于此:

由于对原始问题的评论中存在开放性问题,进一步的评论是:您可以使用libraw控制白平衡、色度缩短、失真校正等功能:

将嵌入的原始缩略图从libraw转换为
QImage

LibRaw处理器;
QImage缩略图;
if(LIBRAW_SUCCESS==RawProcessor.open_文件(文件名)){
if(LIBRAW\u SUCCESS==RawProcessor.unpack\u thumb()){
if(LIBRAW\u THUMBNAIL\u JPEG==RawProcessor.imgdata.THUMBNAIL.t格式){
thumbnail.loadFromData((uchar*)RawProcessor.imgdata.thumbnail.thumb,
RawProcessor.imgdata.thumbnail.t长度,
“JPEG”);
LibRawImagePerformFlip(RawProcessor.imgdata.size.flip,缩略图);
}else if(LIBRAW\u THUMBNAIL\u BITMAP==RawProcessor.imgdata.THUMBNAIL.tformat){
缩略图=库图像到图像(
(uchar*)RawProcessor.imgdata.thumbnail.thumb,
RawProcessor.imgdata.thumbnail.twidth,
RawProcessor.imgdata.thumbnail.theight,
RawProcessor.imgdata.thumboil.tcolors);
}//否则:无法读取
}
RawProcessor.recycle();
}
将完整原始图像从libraw转换为
QImage

LibRaw处理器;
图像;
RawProcessor.imgdata.params.gamm[0]=1.0;
RawProcessor.imgdata.params.gamm[1]=0.0;
RawProcessor.imgdata.params.user_qual=0;//最快插值(线性)
RawProcessor.imgdata.params.use_camera_wb=1;
if(LIBRAW\u SUCCESS==rawProcessor.open\u文件(文件名){
if(LIBRAW_SUCCESS==RawProcessor.unpack()){
如果(LIBRAW_SUCCESS==RawProcessor.dcraw_process()){
libraw_processed_image_t*output=RawProcessor.dcraw_make_mem_image();
if(LIBRAW\u IMAGE\u JPEG==输出->类型){
image.loadFromData((uchar*)输出->数据,
输出->数据大小,
“JPEG”);
LibRawImagePerformFlip(RawProcessor.imgdata.size.flip,image);
}else if(LIBRAW\u IMAGE\u BITMAP==输出->类型){
image=LibRawImageToQImage(
(uchar*)输出->数据,
输出->宽度,
输出->高度,
输出->颜色,
输出->位);
}//否则:无法读取
LibRaw::dcraw\u clear\u mem(输出);
}
RawProcessor.recycle();
}
}
使用两个辅助功能:

QImage MISCTOOLSLIBRAWIMAGETO QImage(常量uchar*数据,
常量整数宽度,
const int height,
常数int nCols,
常量(整数色位)
{
int colorSize=(colorBits%8)==0?colorBits/8:ceil(colorBits/8.0);
int numPixels=宽度*高度;
int pixelSize=nCols*colorSize;
uchar*像素=新的uchar[numPixels*3];
对于(int i=0;i
是的,请检查libraw library,它与.NEF和.CR2完美配合,我也这么认为,但我从未将其用于CR2……我也尝试过,但加载的图像似乎已在颜色空间中进行了某种规格化。