Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing YUY2进程映像故障_Image Processing_Yuv - Fatal编程技术网

Image processing YUY2进程映像故障

Image processing YUY2进程映像故障,image-processing,yuv,Image Processing,Yuv,我正在尝试处理YUY2图像(Y、Cb、Cr)。我需要过滤图像,并消除除红色以外的所有颜色。我使用图像处理实验室查找元素Y、Cb、Cr的值。我找到了这些值(您可以通过过滤查看图像): 编辑:试图找出图像不显示的原因-无论如何,图像有一些YUY元素的值要根据请求进行过滤 我用这个值写了一个从带过滤器的相机读取视频的代码,但它过滤不好。 这是已过滤图像的图像: 已编辑:图像中的部分蓝色经过过滤,而图片的其余部分没有变化(有白色、蓝色、灰色)-第一幅图像过滤了除红色以外的所有颜色 这是我的代码: #d

我正在尝试处理YUY2图像(Y、Cb、Cr)。我需要过滤图像,并消除除红色以外的所有颜色。我使用图像处理实验室查找元素Y、Cb、Cr的值。我找到了这些值(您可以通过过滤查看图像):

编辑:试图找出图像不显示的原因-无论如何,图像有一些YUY元素的值要根据请求进行过滤

我用这个值写了一个从带过滤器的相机读取视频的代码,但它过滤不好。 这是已过滤图像的图像:

已编辑:图像中的部分蓝色经过过滤,而图片的其余部分没有变化(有白色、蓝色、灰色)-第一幅图像过滤了除红色以外的所有颜色

这是我的代码:

#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为红色成分
我看你没有正确地索引上面的镀铬平面

c(和SDL)中的此循环将所有Cb像素设置为值0x80:

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查看器感兴趣@。如果您错误地切换了颜色平面,那么这是一个很好的工具:-)