搜索
写经验 领红包

opecv插值方法

导语:openCV中使用拜耳插值

要想使用插值,第一步就是需要知道拜耳排布,首先拜尔滤色镜(英语:Bayer filter)是一种将RGB滤色器排列在光传感组件方格之上所形成的马赛克彩色滤色阵列。数码相机、录影器、扫描仪等使用的单片机数字图像传感器大多数用这种特定排列的滤色阵列来制作彩色影像。这种滤色器的排列有50%是绿色,25%是红色,另外25%是蓝色,因此也称做RGBG,GRGB,或者RGGB。

那如何获取拜耳排布,有2种方法,第一种就是使用libraw这个第三方库,打开文件后就可以获得cdesc的值了,打印输出为:拜尔模式: BGGR

LibRaw RawProcessor;ret = RawProcessor.open_file(argv[arg]);printf(&34;);putchar(P1.cdesc[RawProcessor.fcol(0, 0)]);putchar(P1.cdesc[RawProcessor.fcol(0, 1)]);putchar(P1.cdesc[RawProcessor.fcol(1, 0)]);putchar(P1.cdesc[RawProcessor.fcol(1, 1)]);putchar(&39;);

其次直接使用Adobe的dng sdk,参考ISO 12234-2 TIFF/EP标准了

可以得到下面的结果,也就是BGGR,可以看到不管是用linbraw和dng的sdk都能很方便的获取到Byaer排列

CFARepeatPatternDim: Rows = 2, Cols = 2CFAPattern:    Blue     Green    Green    Red
//小米手机走这个if (strncmp(cdesc, &34;, 4) == 0){cv::cvtColor(rawData, bgr, CV_BayerGR2BGR);}else if (strncmp(cdesc, &34;, 4) == 0){cv::cvtColor(rawData, bgr, CV_BayerRG2BGR);}else if (strncmp(cdesc, &34;, 4) == 0){cv::cvtColor(rawData, bgr, CV_BayerGB2BGR);}//苹果手机走这else if (strncmp(cdesc, &34;, 4) == 0){cv::cvtColor(rawData, bgr, CV_BayerBG2BGR);}

拿到排列就可以直接调用OpenCV函数进行转换了,这里注意,转换是MAT图像格式只支持8U和16U的格式

本文内容由小面整理编辑!