MFC中,大恒彩色相机, 由Bayer格式转换为灰度图像,其中有个函数ConvertBayer2Rgb可以转换为24位真彩色

andong133 2014-05-07 10:26:25
我现在想要的就是Bayer数据格式转换为8位灰度图像,请问怎么做?需要自己写代码吗,大恒有没有现成的函数?谢谢
简而言之,就是用彩色相机获得灰度图像。
...全文
2120 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
oldhorse311 2014-12-09
  • 打赏
  • 举报
回复
在window下,存储格式是BGR,在linux下,存储格式是RGB,要看灰度图,直接采用各像素的RGB来计算亮度分量,计算方法很简单,采用BT601标准:Y = 0.299R + 0.587G + 0.114B,然后保存为8位灰度图,或者拷贝成3通道,保存为24位图像,但是是灰度的,都可以!
andong133 2014-05-07
  • 打赏
  • 举报
回复
引用 2 楼 fqzlala 的回复:
大恒的相机函数库用起来就是麻烦,你得自己好好看它的软件手册,找到类似下面的转换代码:

		//当数据格式为12位时,位数转换为4-11
		case GX_PIXEL_FORMAT_BAYER_GR12:
		case GX_PIXEL_FORMAT_BAYER_RG12:
		case GX_PIXEL_FORMAT_BAYER_GB12:
		case GX_PIXEL_FORMAT_BAYER_BG12:
			//将12位格式的图像转换为8位格式
			DxRaw16toRaw8(pCameraBuf, m_pImgRaw8Buf, (VxUint32)m_lImgWidth, (VxUint32)m_lImgHeight, DX_BIT_4_11);	
			//将Raw8图像转换为RGB图像以供显示
			DxRaw8toRGB24(m_pImgRaw8Buf,m_pImgRGBBuf,(VxUint32)m_lImgWidth, (VxUint32)m_lImgHeight,RAW2RGB_NEIGHBOUR,
				DX_PIXEL_COLOR_FILTER(m_lPixelColorFilter),TRUE);		        
			break;

		//当数据格式为12位时,位数转换为2-9
		case GX_PIXEL_FORMAT_BAYER_GR10:
		case GX_PIXEL_FORMAT_BAYER_RG10:
		case GX_PIXEL_FORMAT_BAYER_GB10:
		case GX_PIXEL_FORMAT_BAYER_BG10:
		////将12位格式的图像转换为8位格式,有效位数2-9
			DxRaw16toRaw8(pCameraBuf, m_pImgRaw8Buf, (VxUint32)m_lImgWidth, (VxUint32)m_lImgHeight, DX_BIT_2_9);
			//将Raw8图像转换为RGB图像以供显示
			DxRaw8toRGB24(m_pImgRaw8Buf,m_pImgRGBBuf, (VxUint32)m_lImgWidth, (VxUint32)m_lImgHeight,RAW2RGB_NEIGHBOUR,
				DX_PIXEL_COLOR_FILTER(m_lPixelColorFilter),TRUE);	
			break;

		case GX_PIXEL_FORMAT_BAYER_GR8:
		case GX_PIXEL_FORMAT_BAYER_RG8:
		case GX_PIXEL_FORMAT_BAYER_GB8:
		case GX_PIXEL_FORMAT_BAYER_BG8:
			//将Raw8图像转换为RGB图像以供显示
			DxRaw8toRGB24(pCameraBuf,m_pImgRGBBuf, (VxUint32)m_lImgWidth, (VxUint32)m_lImgHeight,RAW2RGB_NEIGHBOUR,
				DX_PIXEL_COLOR_FILTER(m_lPixelColorFilter),TRUE);	
			break;

	case GX_PIXEL_FORMAT_MONO12:
		//将12位格式的图像转换为8位格式
		DxRaw16toRaw8(pCameraBuf, m_pImgRaw8Buf, (VxUint32)m_lImgWidth, (VxUint32)m_lImgHeight, DX_BIT_4_11);	
		//将Raw8图像转换为RGB图像以供显示
		DxRaw8toRGB24(m_pImgRaw8Buf,m_pImgRGBBuf, (VxUint32)m_lImgWidth, (VxUint32)m_lImgHeight,RAW2RGB_NEIGHBOUR,
			DX_PIXEL_COLOR_FILTER(NONE),TRUE);		        
		break;

	case GX_PIXEL_FORMAT_MONO10:
		//将10位格式的图像转换为8位格式
		DxRaw16toRaw8(pCameraBuf, m_pImgRaw8Buf, (VxUint32)m_lImgWidth, (VxUint32)m_lImgHeight, DX_BIT_4_11);	
		//将Raw8图像转换为RGB图像以供显示
		DxRaw8toRGB24(m_pImgRaw8Buf,m_pImgRGBBuf, (VxUint32)m_lImgWidth, (VxUint32)m_lImgHeight,RAW2RGB_NEIGHBOUR,
			DX_PIXEL_COLOR_FILTER(NONE),TRUE);		        
		break;

	case GX_PIXEL_FORMAT_MONO8:
		//将Raw8图像转换为RGB图像以供显示
		DxRaw8toRGB24(pCameraBuf,m_pImgRGBBuf, (VxUint32)m_lImgWidth, (VxUint32)m_lImgHeight,RAW2RGB_NEIGHBOUR,
			DX_PIXEL_COLOR_FILTER(BAYERGR),TRUE);		        
		break;
我说的只是类似,你得找你的相机相关转换函数
好像只有Raw转RGB,没有转灰度的。敢问你知不知道转成RGB后的存储格式是怎样的?
andong133 2014-05-07
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
http://www.baidu.com/s?wd=%E5%BD%A9%E8%89%B2%E8%BD%AC%E7%81%B0%E5%BA%A6%E5%85%AC%E5%BC%8F&rsv_bp=0&ch=&tn=baidu&bar=&rsv_spt=3&ie=utf-8&rsv_sug3=4&rsv_sug4=30&rsv_sug1=3&inputT=10500
我的主要问题是不知道大恒转成RGB后存储格式是怎样的,不知道能不能用一般的彩色转灰度算法,来计算各个像素点的灰度值。
肆水東澤 2014-05-07
  • 打赏
  • 举报
回复
大恒的相机函数库用起来就是麻烦,你得自己好好看它的软件手册,找到类似下面的转换代码:

		//当数据格式为12位时,位数转换为4-11
		case GX_PIXEL_FORMAT_BAYER_GR12:
		case GX_PIXEL_FORMAT_BAYER_RG12:
		case GX_PIXEL_FORMAT_BAYER_GB12:
		case GX_PIXEL_FORMAT_BAYER_BG12:
			//将12位格式的图像转换为8位格式
			DxRaw16toRaw8(pCameraBuf, m_pImgRaw8Buf, (VxUint32)m_lImgWidth, (VxUint32)m_lImgHeight, DX_BIT_4_11);	
			//将Raw8图像转换为RGB图像以供显示
			DxRaw8toRGB24(m_pImgRaw8Buf,m_pImgRGBBuf,(VxUint32)m_lImgWidth, (VxUint32)m_lImgHeight,RAW2RGB_NEIGHBOUR,
				DX_PIXEL_COLOR_FILTER(m_lPixelColorFilter),TRUE);		        
			break;

		//当数据格式为12位时,位数转换为2-9
		case GX_PIXEL_FORMAT_BAYER_GR10:
		case GX_PIXEL_FORMAT_BAYER_RG10:
		case GX_PIXEL_FORMAT_BAYER_GB10:
		case GX_PIXEL_FORMAT_BAYER_BG10:
		////将12位格式的图像转换为8位格式,有效位数2-9
			DxRaw16toRaw8(pCameraBuf, m_pImgRaw8Buf, (VxUint32)m_lImgWidth, (VxUint32)m_lImgHeight, DX_BIT_2_9);
			//将Raw8图像转换为RGB图像以供显示
			DxRaw8toRGB24(m_pImgRaw8Buf,m_pImgRGBBuf, (VxUint32)m_lImgWidth, (VxUint32)m_lImgHeight,RAW2RGB_NEIGHBOUR,
				DX_PIXEL_COLOR_FILTER(m_lPixelColorFilter),TRUE);	
			break;

		case GX_PIXEL_FORMAT_BAYER_GR8:
		case GX_PIXEL_FORMAT_BAYER_RG8:
		case GX_PIXEL_FORMAT_BAYER_GB8:
		case GX_PIXEL_FORMAT_BAYER_BG8:
			//将Raw8图像转换为RGB图像以供显示
			DxRaw8toRGB24(pCameraBuf,m_pImgRGBBuf, (VxUint32)m_lImgWidth, (VxUint32)m_lImgHeight,RAW2RGB_NEIGHBOUR,
				DX_PIXEL_COLOR_FILTER(m_lPixelColorFilter),TRUE);	
			break;

	case GX_PIXEL_FORMAT_MONO12:
		//将12位格式的图像转换为8位格式
		DxRaw16toRaw8(pCameraBuf, m_pImgRaw8Buf, (VxUint32)m_lImgWidth, (VxUint32)m_lImgHeight, DX_BIT_4_11);	
		//将Raw8图像转换为RGB图像以供显示
		DxRaw8toRGB24(m_pImgRaw8Buf,m_pImgRGBBuf, (VxUint32)m_lImgWidth, (VxUint32)m_lImgHeight,RAW2RGB_NEIGHBOUR,
			DX_PIXEL_COLOR_FILTER(NONE),TRUE);		        
		break;

	case GX_PIXEL_FORMAT_MONO10:
		//将10位格式的图像转换为8位格式
		DxRaw16toRaw8(pCameraBuf, m_pImgRaw8Buf, (VxUint32)m_lImgWidth, (VxUint32)m_lImgHeight, DX_BIT_4_11);	
		//将Raw8图像转换为RGB图像以供显示
		DxRaw8toRGB24(m_pImgRaw8Buf,m_pImgRGBBuf, (VxUint32)m_lImgWidth, (VxUint32)m_lImgHeight,RAW2RGB_NEIGHBOUR,
			DX_PIXEL_COLOR_FILTER(NONE),TRUE);		        
		break;

	case GX_PIXEL_FORMAT_MONO8:
		//将Raw8图像转换为RGB图像以供显示
		DxRaw8toRGB24(pCameraBuf,m_pImgRGBBuf, (VxUint32)m_lImgWidth, (VxUint32)m_lImgHeight,RAW2RGB_NEIGHBOUR,
			DX_PIXEL_COLOR_FILTER(BAYERGR),TRUE);		        
		break;
我说的只是类似,你得找你的相机相关转换函数

19,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧