0

YUY2 画像 (Y、Cb、Cr) を処理しようとしています。画像をフィルタリングし、赤色以外のすべての色を除去する必要があります。Image Processing Lab を使用して、要素 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;
}

Image Processing Lab の画像として画像をフィルタリングしないのはなぜですか?

4

1 に答える 1