Skip to content

Commit 54626f6

Browse files
committed
Add speed_rgb2yuv_sse.cpp
1 parent 14c4ef3 commit 54626f6

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

speed_rgb2yuv_sse.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#include <stdio.h>
2+
#include <opencv2/opencv.hpp>
3+
using namespace std;
4+
using namespace cv;
5+
6+
void RGBToYUV(unsigned char *RGB, unsigned char *Y, unsigned char *U, unsigned char *V, int Width, int Height, int Stride)
7+
{
8+
const int Shift = 15;
9+
const int HalfV = 1 << (Shift - 1);
10+
const int Y_B_WT = 0.114f * (1 << Shift), Y_G_WT = 0.587f * (1 << Shift), Y_R_WT = (1 << Shift) - Y_B_WT - Y_G_WT;
11+
const int U_B_WT = 0.436f * (1 << Shift), U_G_WT = -0.28886f * (1 << Shift), U_R_WT = -(U_B_WT + U_G_WT);
12+
const int V_B_WT = -0.10001 * (1 << Shift), V_G_WT = -0.51499f * (1 << Shift), V_R_WT = -(V_B_WT + V_G_WT);
13+
for (int YY = 0; YY < Height; YY++)
14+
{
15+
unsigned char *LinePS = RGB + YY * Stride;
16+
unsigned char *LinePY = Y + YY * Width;
17+
unsigned char *LinePU = U + YY * Width;
18+
unsigned char *LinePV = V + YY * Width;
19+
for (int XX = 0; XX < Width; XX++, LinePS += 3)
20+
{
21+
int Blue = LinePS[0], Green = LinePS[1], Red = LinePS[2];
22+
LinePY[XX] = (Y_B_WT * Blue + Y_G_WT * Green + Y_R_WT * Red + HalfV) >> Shift;
23+
LinePU[XX] = ((U_B_WT * Blue + U_G_WT * Green + U_R_WT * Red + HalfV) >> Shift) + 128;
24+
LinePV[XX] = ((V_B_WT * Blue + V_G_WT * Green + V_R_WT * Red + HalfV) >> Shift) + 128;
25+
}
26+
}
27+
}
28+
29+
int main() {
30+
31+
}

0 commit comments

Comments
 (0)