插值算法将摄像头采集RAW数据保存位RGB24
2017-10-31 11:19
176 查看
插值算法,需要填补缺失的2个色彩,我们使用的是线性插值补偿算法R 和B通过线性
就是RB分别不变,一个像素点的RGB 三个分量,通过固定其中的一个点的值,取临域的
的颜色分量的平均值,作为这个像素点的颜色分量值,因为绿色颜色分量数量在GRB模式的时候最多,所以对于G颜色分量的时候需要做两次的运算
R如果固定的是红色分量的时候即R在中间,为第三张图,固定R的颜色分量,上下左右的G相加除以4,还有临近的B相加除以4,代码实现是:
这边是一格格的寻找插值,只是我们的算法对边缘没有做处理,所以需要-1
For(i=0;i<width-1;i++)
{
For(j=0;j<height-1;j++)
{
Int seq=j*width+i;//定义的绘出IMAGE区域用于指向首地址
If(1==i%2&&0==j%2)//因为R 的分量在GRGB的格式中只会出现在奇数的列和偶数的行所以这样判断
{
Pixel.red = *(inbuf+seq);
Pixel.greed=(*(inbuf+seq+1)+*(inbuf+seq-1)+*(inbuf+seq+width)+*(inbuf+seq-width))>>2;//取临近的绿色分量的平均值用于填充像素点
Pixel.blue=(*(inbuf+Seq+1+width)+*(inbuf+seq-width)+*(inbuf+seq+width+1)+*(inbuf+seq+width-1))>>2;//取临近的蓝色分量的临近值用于插值
}
//固定绿色分量,因为绿色分量只在偶数行偶数列或者奇数行技术列出现所以如下
//绿色是上下左右的红与绿相加除2
If(i%2==1&&j%2==1)
{
Pixel.green = *(inbuf+seq);
Pixel.red=(*(inbuf+Seq+width)+*(inbuf+seq-width))>>1;
Pixel.blue=(*(inbuf+seq+1)+*(inbuf+seq-1))>>1;
Bmp->pixels[i][j]=pixel;
}
//第二种情况
If(0==i%2&&0==j%2){
Pixel.green=*(inbuf+Seq);
Pixel.red=(*(inbuf+seq+1)+*(inbuf+seq-1))>>1;
Pixel.blue==(*(inbuf+Seq+width)+*(inbuf+seq-width))>>1;
Bmp->pixels[i][j]=pixles;
}
Else
{
Pixel.blue=(*(inBuf+seq-1-width)+*(inBuf+seq+1-width)+*(inBuf+seq-1+width)+*(inBuf+seq+1+width))>>2;
Pixel.green= (*(inbuf+seq+width)+*(inbuf+seq-width)+*(inbuf+seq+1)+*(inbuf+seq-1))>>2;
Pixel.red=
}
bmp->pixels[i][j]= pixel;
}
}
如上可以将原始的RAW数据在新的内存中将像素点颜色比例重新配置绘出彩图,就是颜色会有点偏绿
参考博客地址:http://www.cnblogs.com/qiqibaby/p/5267566.html
就是RB分别不变,一个像素点的RGB 三个分量,通过固定其中的一个点的值,取临域的
的颜色分量的平均值,作为这个像素点的颜色分量值,因为绿色颜色分量数量在GRB模式的时候最多,所以对于G颜色分量的时候需要做两次的运算
R如果固定的是红色分量的时候即R在中间,为第三张图,固定R的颜色分量,上下左右的G相加除以4,还有临近的B相加除以4,代码实现是:
这边是一格格的寻找插值,只是我们的算法对边缘没有做处理,所以需要-1
For(i=0;i<width-1;i++)
{
For(j=0;j<height-1;j++)
{
Int seq=j*width+i;//定义的绘出IMAGE区域用于指向首地址
If(1==i%2&&0==j%2)//因为R 的分量在GRGB的格式中只会出现在奇数的列和偶数的行所以这样判断
{
Pixel.red = *(inbuf+seq);
Pixel.greed=(*(inbuf+seq+1)+*(inbuf+seq-1)+*(inbuf+seq+width)+*(inbuf+seq-width))>>2;//取临近的绿色分量的平均值用于填充像素点
Pixel.blue=(*(inbuf+Seq+1+width)+*(inbuf+seq-width)+*(inbuf+seq+width+1)+*(inbuf+seq+width-1))>>2;//取临近的蓝色分量的临近值用于插值
}
//固定绿色分量,因为绿色分量只在偶数行偶数列或者奇数行技术列出现所以如下
//绿色是上下左右的红与绿相加除2
If(i%2==1&&j%2==1)
{
Pixel.green = *(inbuf+seq);
Pixel.red=(*(inbuf+Seq+width)+*(inbuf+seq-width))>>1;
Pixel.blue=(*(inbuf+seq+1)+*(inbuf+seq-1))>>1;
Bmp->pixels[i][j]=pixel;
}
//第二种情况
If(0==i%2&&0==j%2){
Pixel.green=*(inbuf+Seq);
Pixel.red=(*(inbuf+seq+1)+*(inbuf+seq-1))>>1;
Pixel.blue==(*(inbuf+Seq+width)+*(inbuf+seq-width))>>1;
Bmp->pixels[i][j]=pixles;
}
Else
{
Pixel.blue=(*(inBuf+seq-1-width)+*(inBuf+seq+1-width)+*(inBuf+seq-1+width)+*(inBuf+seq+1+width))>>2;
Pixel.green= (*(inbuf+seq+width)+*(inbuf+seq-width)+*(inbuf+seq+1)+*(inbuf+seq-1))>>2;
Pixel.red=
}
bmp->pixels[i][j]= pixel;
}
}
如上可以将原始的RAW数据在新的内存中将像素点颜色比例重新配置绘出彩图,就是颜色会有点偏绿
参考博客地址:http://www.cnblogs.com/qiqibaby/p/5267566.html
相关文章推荐
- USB视频采集系统 视频测试软件将正式发布(方便调试测试各自摄像头,RAW,RGB,YUV)
- opencv采集视频/摄像头数据并保存
- ffmpeg Windows下采集摄像头一帧数据,并保存为bmp图片
- [转载] ffmpeg Windows下采集摄像头一帧数据,并保存为bmp图片
- ffmpeg Windows下采集摄像头一帧数据,并保存为bmp图片
- ffmpeg Windows下采集摄像头一帧数据,并保存为bmp图片
- ffmpeg Windows下采集摄像头一帧数据,并保存为bmp图片
- ffmpeg Windows下采集摄像头一帧数据,并保存为bmp图片
- iOS 摄像头,进行音视频的数据采集
- Android中直播视频技术探究之---摄像头Camera视频源数据采集解析
- python 读取摄像头数据并保存
- scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
- QT保存摄像头采集图片参考
- OPENCV2.2无法显示摄像头采集到的数据的解决办法
- ndroid Camera2采集摄像头原始数据并手动预览
- 为raw数据添加图像头,并保存为bmp图像(改进)
- 基于USB摄像头视频数据采集和利用FFMPEG库函数进行视频数据压缩
- RAW图像数据到RGB
- Asp.net 数据采集基类(远程抓取,分解,保存,匹配)
- 如何将RGB图像数据保存成tiff,可以保存曝光,增益,白平衡参数