Image processing YUY2进程映像故障
我正在尝试处理YUY2图像(Y、Cb、Cr)。我需要过滤图像,并消除除红色以外的所有颜色。我使用图像处理实验室查找元素Y、Cb、Cr的值。我找到了这些值(您可以通过过滤查看图像): 编辑:试图找出图像不显示的原因-无论如何,图像有一些YUY元素的值要根据请求进行过滤 我用这个值写了一个从带过滤器的相机读取视频的代码,但它过滤不好。 这是已过滤图像的图像: 已编辑:图像中的部分蓝色经过过滤,而图片的其余部分没有变化(有白色、蓝色、灰色)-第一幅图像过滤了除红色以外的所有颜色 这是我的代码:Image processing YUY2进程映像故障,image-processing,yuv,Image Processing,Yuv,我正在尝试处理YUY2图像(Y、Cb、Cr)。我需要过滤图像,并消除除红色以外的所有颜色。我使用图像处理实验室查找元素Y、Cb、Cr的值。我找到了这些值(您可以通过过滤查看图像): 编辑:试图找出图像不显示的原因-无论如何,图像有一些YUY元素的值要根据请求进行过滤 我用这个值写了一个从带过滤器的相机读取视频的代码,但它过滤不好。 这是已过滤图像的图像: 已编辑:图像中的部分蓝色经过过滤,而图片的其余部分没有变化(有白色、蓝色、灰色)-第一幅图像过滤了除红色以外的所有颜色 这是我的代码: #d
#define _WIDTH 640
#define _HEIGHT 480
#define _MinY .173
#define _MaxY .737
#define _MinB -.189
#define _MaxB .106
#define _MinR .084
#define _MaxR .324
typedef struct YUY2_struct
{
UINT8 y0, b, y1, r;
}YUY2;
HRESULT SampleGrabberCallback::LineDetection(YUY2 *pD ,float arr[])
{
int LineCount = 0;
int LineSum = 0;
YUY2 *tempLocation = pD;
UINT8 MinY = (UINT8)(255 * _MinY);
UINT8 MaxY = (UINT8)(255 * _MaxY);
UINT8 MinR = (UINT8)((_MinR + 0.5) * 255);
UINT8 MaxR = (UINT8)((_MaxR + 0.5) * 255);
UINT8 MinB = (UINT8)((_MinB + 0.5) * 255);
UINT8 MaxB = (UINT8)((_MaxB + 0.5) * 255);
for (int i = 0; i < _WIDTH * _HEIGHT / 2; ++i)
{
if ((tempLocation->b > MinB) && (tempLocation->b < MaxB) && (tempLocation->r > MinR) && (tempLocation->r < MaxR))
{
//for 1st pixel
if ((tempLocation->y0 < MaxY) && (tempLocation->y0 > MinY))
{
tempLocation->b = 128;
tempLocation->r = 128;
tempLocation->y0 = 0;
}
//for 2nd pixel
if ((tempLocation->y1 < MaxY) && (tempLocation->y1 > MinY))
{
tempLocation->b = 128;
tempLocation->r = 128;
tempLocation->y1 = 0;
}
}
tempLocation += 1;
}
return NOERROR;
}
定义宽度640
#定义_高度480
#定义_MinY.173
#定义_MaxY.737
#定义_MinB-.189
#定义_MaxB.106
#定义_MinR.084
#定义_MaxR.324
typedef结构yuy2u结构
{
UINT8 y0,b,y1,r;
}YUY2;
HRESULT SampleGrabberCallback::LineDetection(YUY2*pD,浮点arr[])
{
int LineCount=0;
int LineSum=0;
YUY2*模板位置=pD;
UINT8 MinY=(UINT8)(255*u MinY);
UINT8最大值=(UINT8)(255*最大值);
UINT8 MinR=(UINT8)((u MinR+0.5)*255);
UINT8最大值=(UINT8)((u最大值+0.5)*255);
UINT8 MinB=(UINT8)((u MinB+0.5)*255);
UINT8最大值=(UINT8)((u最大值+0.5)*255);
对于(整数i=0;i<\u宽度*\u高度/2;++i)
{
如果((模板定位->b>MinB)和&(模板定位->br>MinR)和&(模板定位->ry0y0>MinY))
{
模板定位->b=128;
模板定位->r=128;
模板定位->y0=0;
}
//第二像素
if((模板定位->y1y1>MinY))
{
模板定位->b=128;
模板定位->r=128;
模板定位->y1=0;
}
}
模板位置+=1;
}
返回无错误;
}
任何提示为什么它不将图像作为图像处理实验室中的图像过滤给我?太长,无法添加评论 YUY2就是这样包装的
- 我是卢玛
- Cb或U是蓝色组件
- Cr或V为红色成分
for (Uint32 i = 1; i < W * H * 2; i += 4) {
*(my_overlay->pixels[0] + i) = 0x80;
}
(Uint32 i=1;i{
*(我的覆盖->像素[0]+i)=0x80;
}
像素值的允许范围是整数0-255
(实际上要复杂得多)。上面的程序似乎使用了0-1
之间的标准化值。您是如何执行规范化的
希望这有帮助,如果没有,请给我留言。我用4个Uint8元素定义了YUY2结构(有一个错误。我用Cr切换了Cb,但它也不起作用)。使用此结构,我读取每个元素的值。在“for”循环之前,我写了6行这样的代码:“UINT8 MinY=(UINT8)(255*_MinY)”到“unnormalized”,值为0-255。现在这段代码运行良好。问题是我错误地在Cr和Cb之间切换。很高兴你解决了你的问题!您可能对我编写的YCbCr查看器感兴趣@。如果您错误地切换了颜色平面,那么这是一个很好的工具:-)