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 の画像として画像をフィルタリングしないのはなぜですか?