Я пытаюсь обработать изображение YUY2 (Y, Cb, Cr). Мне нужно отфильтровать изображение и устранить все цвета, кроме красной раскраски. Я использовал Image Processing Lab, чтобы найти значения элементов Y, Cb, Cr. Я нашел значения (вы можете увидеть изображение с фильтрацией): Ошибка изображения процесса YUY2
Отредактировано: пытается выяснить, почему изображения не отображаются - в любом случае изображение имеет некоторые значения элемента YUY для фильтрации по запросу.
Я написал код для чтения видео с камеры с фильтром, используя эти значения, но он не фильтрует хорошее. Это изображение фильтрованного изображения:
Edited: изображение некоторых из синего цвета в изображении фильтруется, в то время как остальная часть изображения не меняется (имеет белый, синий, серый цвета) - 1-е изображение отфильтровывало все цвета, но красным.
Это мой код:
#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?
Я определил структуру YUY2 с 4 элементами Uint8 (произошла ошибка. Я переключил Cb на Cr, но он тоже не работает). С помощью этой структуры я читаю значение каждого элемента. Перед циклом «for» я написал 6 строк: «UINT8 MinY = (UINT8) (255 * _MinY)» до «ненормированного» значения, которое должно быть 0 - 255. – user2004403
Теперь этот код работает нормально. Проблема заключалась в том, что я ошибочно переключился между Cr и Cb. – user2004403
Рад, что вы решили свою проблему! Возможно, вас заинтересует YCbCr-viewer, который я написал @ https://github.com/figgis/yuv-viewer. Отличный инструмент, чтобы узнать, поменяли ли вы цветные плоскости :-) –