raw格式图片读取与显示C++,opencv

转载请注明出处。
文章地址:https://blog.csdn.net/duiwangxiaomi/article/details/105847284?spm=1001.2014.3001.5501

      Bayer是相机内部的原始图片, 一般后缀名为.raw。很多软件都可以查看, 比如PS.Bayer 模式被广泛应用于 CCD 和 CMOS 摄像头,它允许从一个单独平面中得到彩色图像。我们相机拍照下来存储在存储卡上的.jpeg或其它格式的图片, 都是从.raw格式转化而来。

      接下来实现raw格式图片的读取与显示,程序如下:

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main()
{
	char *rawFileName = "img.raw";
	FILE *fp = NULL;
	int ret = 0, width = 1600, height = 280;
	unsigned char *pRawData = (unsigned char *)malloc(width*height*sizeof(unsigned char));

	if (NULL == pRawData)
	{
		printf("Fail to calloc buf\r\n");
		return -1;
	}

	if (NULL == (fp = fopen(rawFileName, "rb")))
	{
		printf("Fail to read %s.\r\n", rawFileName);
		return -2;
	}

	ret = fread(pRawData, sizeof(unsigned char)*width*height, 1, fp);
	if (ret != 1)
	{
		printf("Fail to read raw data\r\n");
		return -3;
	}
	Mat img(Size(width, height), CV_8UC1, pRawData);
	Mat img2(Size(width, height), CV_8UC3, Scalar(0));
	cvtColor(img,img2,CV_BayerGB2BGR);
	cvNamedWindow("img", 1);
	imshow("img", img);
	cvWaitKey(0);
	cvDestroyWindow("img");
	return 0;
}

      opencv实现了Bayer=>RGB的转换,描述如下:
Bayer=>RGB (CV_BayerBG2BGR, CV_BayerGB2BGR, CV_BayerRG2BGR, CV_BayerGR2BGR, CV_BayerBG2RGB, CV_BayerRG2BGR, CV_BayerGB2RGB, CV_BayerGR2BGR, CV_BayerRG2RGB, CV_BayerBG2BGR, CV_BayerGR2RGB, CV_BayerGB2BGR)

Bayer 模式被广泛应用于 CCD 和 CMOS 摄像头. 它允许从一个单独平面中得到彩色图像,该平面中的 R/G/B 象素点被安排如下:
在这里插入图片描述
对像素输出的RGB份量由该像素的1、2或者4邻域中具有相同颜色的点插值得到。以上的模式可以通过向左或者向上平移一个像素点来作一些修改。转换常量CV_BayerC1C22{RGB|RGB}中的两个字母C1和C2表示特定的模式类型:颜色份量分别来自于第二行,第二和第三列。比如说,上述的模式具有很流行的"BG"类型。
参考网址1
参考网址2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值