Я только начал использовать оптимизацию обработки изображений SS2, но для 3-канальных 24-битных цветных изображений понятия не имею. Мои пиксельные данные, организованные BGR BGR BGR ..., unsigned char 8-bi, поэтому, если я хочу реализовать Color2Gray с инструкцией C/C++ для SSE2/SSE3/SSE4, как бы мне это сделать? Нужно ли выровнять (4/8/16) для моих данных pix? Я прочитал статью: http://supercomputingblog.com/windows/image-processing-with-sse/ Но это ARGB 4-канальный 32-битный цвет, точно обрабатывает 4 цветных пиксельных данных каждый раз. Спасибо!Как обрабатывать 24-битное трехканальное цветное изображение с SSE2/SSE3/SSE4?
//Assume the original pixel:
unsigned char* pDataColor=(unsigned char*)malloc(src.width*src.height*3);//3
//init pDataColor every pix val
// The dst pixel:
unsigned char* pDataGray=(unsigned char*)malloc(src.width*src.height*1);//1
// RGB-> Серый: Y = 0,212671 * R + 0,715160 * G + 0,072169 * B
Да, спасибо. У меня есть полный цвет RGB ... RGB до RR ... BB ... GG, но когда я пытаюсь сделать: RGB-> Gray: Y = 0.212671 * R + 0.715160 * G + 0.072169 * B. Есть проблемы. поскольку SSE использует 128-битную команду, нет никакой инструкции по управлению SSE C/C++, которая может работать как: _mm_mul_xxx (a0, b0); r0 = a0 * b0, r1 = a1 * b0, ..., r15 = a15 * b0; (a0 - 16 типов, b0 - два двойных типа). ???? – user2163635
Для преобразования цветов обычно используется арифметика с фиксированной точкой вместо плавающей запятой. Распакуйте 8-битные значения в 16-битные значения (используя _mm_unpacklo_epi8/_mm_unpackhi_epi8), а затем используйте целочисленное умножение 16-битных значений. –