mfc 我想取一区块,然后读取各像素rgb点RGB值,再逐一比较,可运行很慢,

MFC中,大恒相机,函数ConvertBayer2Rgb
函数申明为
void&__stdcall&ConvertBayer2Rgb(BYTE&*pDest,BYTE&*pSrce,&int&nWid,int&nHei,HV_BAYER_CONVERT_TYPE&cvtype,BYTE*&pLutR,BYTE*&pLutG,&BYTE*&pLutB,bool&bFlip,HV_BAYER_LAYOUT&Layout);
\brief&&bayer图像转换成RGB图像函数
\param&&pDest&&&[out]数据输出buffer指针(24位RGB图像)
\param&&pSrce&&&[in]数据输入buffer指针(8位Raw图像)
\param&&nWid&&&&[in]图像宽
\param&&nHei&&&&[in]图像高
\param&&cvtype&&[in]插值算法类型
\param&&pLutR&&&[in]R分量数字增益查找表
\param&&pLutG&&&[in]G分量数字增益查找表
\param&&pLutB&&&[in]B分量数字增益查找表
\param&&bFlip&&&[in]图像翻转标记&true:翻转&false:不翻转
\param&&Layout&&[in]bayer类型
return&&void&&
//--------------------------------------------------
ConvertBayer2Rgb(m_pImageBuffer,m_pRawBuffer,Width,Height,ConvertType,
m_pLutR,m_pLutG,m_pLutB,true,m_Layout);
BYTE&m_pLutR[256]&;
BYTE&m_pLutG[256]&;
BYTE&m_pLutB[256]&;
for(int&i=0;i&256;i++)
m_pLutR[i]&=&i;
m_pLutG[i]&=&i;
m_pLutB[i]&=&i;
请问如何利用该函数分辨出图像某一区域偏于白色还是偏于蓝色,或者如何获得某一点的R值G值B值?m_pLutR,m_pLutG,m_pLutB这三个能转换成RGB数值吗
回复讨论(解决方案)
如果那个函数做不到区分颜色的话,这边有个Raw2Rgb.h的头文件,里面包含好几个函数,我不太了解,请问有哪个函数可以做到区分颜色或者获取到某一点的RGB值吗
void&__stdcall&Raw12PackedToRaw16(BYTE*&pInBuf,&BYTE*&pOutBuf,int&iWidth,&int&iHeight);
void&__stdcall&Raw10PackedToRaw16(BYTE*&pInBuf,&BYTE*&pOutBuf,int&iWidth,&int&iHeight);
void&__stdcall&ROIColorCorrection(&void&*pImg,&int&roi_left,&int&roi_top,&int&roi_wid,&int&roi_hei,&int&nImgWid,&int&nImgHei);HVSTATUS&__stdcall&HVRotate90CW8B(const&BYTE*&pInputBuffer,&int&nWidth,&int&nHeight,&BYTE*&pOutputBuffer);
HVSTATUS&__stdcall&HVRotate90CCW8B(const&BYTE*&pInputBuffer,&int&nWidth,&int&nHeight,&BYTE*&pOutputBuffer);
HVSTATUS&__stdcall&HVBrightness(BYTE*&pInputBuffer,int&nImagesize,&int&nFactor,BYTE*&pOutputBuffer);
HVSTATUS&__stdcall&HVContrast(BYTE*&pInputBuffer,int&nImagesize,&int&nFactor,BYTE*&pOutputBuffer);
HVSTATUS&__stdcall&HVSharpen24B(BYTE*&pInputBuffer,int&nWidth,int&nHeight,float&factor,BYTE*&pOutputBuffer);
HVSTATUS&__stdcall&HVSaturation(BYTE*&pInputBuffer,int&nImagesize,&int&nFactor,BYTE*&pOutputBuffer);
void&__stdcall&ConvertBayer2Rgb(BYTE&*pDest,BYTE&*pSrce,&int&nWid,int&nHei,HV_BAYER_CONVERT_TYPE&cvtype,BYTE*&pLutR,BYTE*&pLutG,&BYTE*&pLutB,bool&bFlip,HV_BAYER_LAYOUT&Layout);
void&__stdcall&GetWhiteBalanceRatio(BYTE&*pSrce,int&nWid,int&nHei,double*&dRatioR,double*&dRatioG,double*&dRatioB);
void&__stdcall&SetGammaLut(BYTE&pLutGamma[256],double&dGammaRatio);
void&__stdcall&DetectDeadPixel(BYTE&*&pRawImgBuf,BYTE&*&pBadPixelPosBuf,int&nImgWid,int&nImgHei);
void&__stdcall&EraseDeadPixel(BYTE&*&pRawImgBuf,BYTE&*&pBadPixelPosBuf,int&nXPos,int&nYPos,int&nImgWid,int&nImgHei,int&nBadPixelBufWid,int&nBadPixelBufHei);
HVSTATUS&__stdcall&HVDetectRawDeadPos(BYTE&*pRawImgBuf,BYTE&*pBadPixelPosBuf,int&nImgWid,int&nImgHei,int&nBitNum);
HVSTATUS&__stdcall&HVCorrectRawBadPos(BYTE&*pRawImgBuf,BYTE&*pBadPixelPosBuf,int&nImgWid,int&nImgHei,int&nBitNum);
HVSTATUS&__stdcall&HVAutoRawDefectivePixelCorrect(BYTE&*pRawImgBuf,int&nImgWid,int&nImgHei,int&nBitNum);
void&__stdcall&GetPatternNoise(BYTE&*&pRawImgBuf,int&*&pPatternBuf,int&nPatternWid,int&nPatternHei);
void&__stdcall&AvgPatternNoise(int&*&pPatternBuf,int&nPatternWid,int&nPatternHei,int&nAvgTimes);
void&__stdcall&FixPatternNoise(BYTE&*&pRawImgBuf,int&*&pPatternBuf,int&nXPos,int&nYPos,int&nImgWid,int&nImgHei,int&nPatternWid,int&nPatternHei);
void&__stdcall&SetBadPixelThreshold(int&BadPixelThreshold);
void&__stdcall&HVConvert(HV_CONVERT_CODE&ConvertCode,&void&*pContext,&int&*pLength);
求救啊,有什么方法能区分颜色啊
ConvertBayer2Rgb的作用是把相机传回来的RAB格式图像数据转换为RGB格式,然后按照RGB格式找像素就行了
楼主的问题在于希望能有一个函数完成这两个功能,很遗憾这是不可能的,这种思路是用户的思路,不是程序员的思路,用户喜欢傻瓜式操作不用动脑一次OK,程序员喜欢把一个大功能拆分成一个个小功能随意组合调整
楼主现在需要做的,是去了解RGB格式图像在内存中是如何存储的,而不是希望有一个函数能帮你做任何事情
*(首指针+行数*每行长度+列数*3+分量号),就这么简单
当中的m_pImageBuffer就是你的RGB数据啊,只不过这个是24位的,你需要隔3个字节取一次数据就是对应的R(或B或G)值。
我也在用大恒的相机,说实话我特别不喜欢这个ConvertBayer2Rgb函数,其实数据我已经取到了,只不过是raw数据,用这个函数只不过是转成RGB模式的。明明我是8位的,非得给我转成24位的,增加了我处理的时间,害的我还要再转成8位的。我要是弄清楚了你那个什么layer数据的格式,我不会用你这个垃圾函数!
当中的m_pImageBuffer就是你的RGB数据啊,只不过这个是24位的,你需要隔3个字节取一次数据就是对应的R(或B或G)值。
我也在用大恒的相机,说实话我特别不喜欢这个ConvertBayer2Rgb函数,其实数据我已经取到了,只不过是raw数据,用这个函数只不过是转成RGB模式的。明明我是8位的,非得给我转成24位的,增加了我处理的时间,害的我还要再转成8位的。我要是弄清楚了你那个什么layer数据的格式,我不会用你这个垃圾函数!
“明明我已经得到了很小的压缩文件,非得给我解压成很大的文件,增加了我处理的时间,害得我还要从中选一部分复制出来。我要是弄清楚了你那个什么压缩算法,我才不会用你这个垃圾压缩软件!”
Bayer数据格式非常简单,每个字节代表RGB之一,相邻字节代表不同颜色,转换成彩色图像就是各颜色分别插值而已。
ConvertBayer2Rgb函数也完全可以不用,这是开发人员为了不让用户浪费时间自己写代码而提供的函数,你非要自己写那也无所谓。不过最小运算量是相同的,就算你只想要8位灰度图像,自己写转换函数也不过就是节省点内存而已??可能还要增加运算时间,所谓以时间换空间么。当然,如果这个函数的内部实现效率太低,那自己写或许是个好主意,不过没有源代码也懒得反汇编,就不清楚内部实现如何了。
当中的m_pImageBuffer就是你的RGB数据啊,只不过这个是24位的,你需要隔3个字节取一次数据就是对应的R(或B或G)值。
我也在用大恒的相机,说实话我特别不喜欢这个ConvertBayer2Rgb函数,其实数据我已经取到了,只不过是raw数据,用这个函数只不过是转成RGB模式的。明明我是8位的,非得给我转成24位的,增加了我处理的时间,害的我还要再转成8位的。我要是弄清楚了你那个什么layer数据的格式,我不会用你这个垃圾函数!
那么比如说我现在有个宽10高10的图片,里面的像素点个数就是10&10=100个,每个点里面存了三个值分别是R值G值B值,是这个样子吗?这个m_pImageBuffer里面存的RGB数据要怎么拿出来用,比如我现在想要每个点的RGB值
for(int&i=0;i&10;i++)
&&for(int&j=0;j&10;j++)
&&&&&R[i][j]=?m_pImageBuffer?
&&&&&G[i][j]=??m_pImageBuffer??
&&&&&B[i][j]=???m_pImageBuffer???
可以这样取得每个点的RGB值吗?
楼主现在需要做的,是去了解RGB格式图像在内存中是如何存储的,而不是希望有一个函数能帮你做任何事情
*(首指针+行数*每行长度+列数*3+分量号),就这么简单
你说的那个*(首指针+行数*每行长度+列数*3+分量号)具体是什么意思,干嘛用的?
我程序中有一段代码不太明白是什么意思,不知道和你这个有没有关系
for(row=0;row&Rrow++)
&&&&for(column=0;column&Rcolumn++) //Rect=20
&&&temp=((Height-y-row)*Width+x+column)*3;
&&&if((*(m_pImageBuffer+temp)&=&100)&&&&(*(m_pImageBuffer+temp+1)&=&200)&&&&(*(m_pImageBuffer+temp+2)&=&200))
//Height(480)和Width(640)是图像的高和宽,x=FirstX&+&column&*&&y=FirstY&+&row&*&offetx
附上图片,代码应该是想检测图中白色亮点部分,*(m_pImageBuffer+temp)到底是什么意思?
。。。图片传不上来,就是有一张图,中间规则排列着N&N个白色大圆点,每个大圆点之间的上下距离用offsety表示,左右距离用offsetx表示,第一个点左上角作为FirstX,Y&,大圆点外面套了个正方形(相切),正方形边长为rect
当中的m_pImageBuffer就是你的RGB数据啊,只不过这个是24位的,你需要隔3个字节取一次数据就是对应的R(或B或G)值。
我也在用大恒的相机,说实话我特别不喜欢这个ConvertBayer2Rgb函数,其实数据我已经取到了,只不过是raw数据,用这个函数只不过是转成RGB模式的。明明我是8位的,非得给我转成24位的,增加了我处理的时间,害的我还要再转成8位的。我要是弄清楚了你那个什么layer数据的格式,我不会用你这个垃圾函数!
“明明我已经得到了很小的压缩文件,非得给我解压成很大的文件,增加了我处理的时间,害得我还要从中选一部分复制出来。我要是弄清楚了你那个什么压缩算法,我才不会用你这个垃圾压缩软件!”
Bayer数据格式非常简单,每个字节代表RGB之一,相邻字节代表不同颜色,转换成彩色图像就是各颜色分别插值而已。
ConvertBayer2Rgb函数也完全可以不用,这是开发人员为了不让用户浪费时间自己写代码而提供的函数,你非要自己写那也无所谓。不过最小运算量是相同的,就算你只想要8位灰度图像,自己写转换函数也不过就是节省点内存而已??可能还要增加运算时间,所谓以时间换空间么。当然,如果这个函数的内部实现效率太低,那自己写或许是个好主意,不过没有源代码也懒得反汇编,就不清楚内部实现如何了。
我现在想要的就是Bayer数据格式转换为8位灰度图像,请问怎么做?需要自己写代码吗,大恒有没有现成的函数?谢谢
请问楼主找到获取每点RGB值的方法了吗?
请问楼主找到获取每点RGB值的方法了吗?
没有,我已经放弃了...本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 像素rgb 的文章

 

随机推荐