opengl gpuimage 对yuv数据模糊处理
void main()
{
vec4 textureColor;
vec4 outColor;
vec4 U;
vec4 V;
if(PixFormat == 1000.0f)
{
//RGB32
textureColor = vec4(texture2D(textureUniformRGBA,textureCoordinate));
textureColor.a = textureColor.a*RGB_Alpha;
}
else
{
//YUV420 TO RGB32
textureColor = vec4((texture2D(textureUniformY, textureCoordinate).r - 16./255.) * 1.164);
U = vec4(texture2D(textureUniformU, textureCoordinate).r - 128./255.);
V = vec4(texture2D(textureUniformV, textureCoordinate).r - 128./255.);
textureColor += V * vec4(1.596, -0.813, 0, 0);
textureColor += U * vec4(0, -0.392, 2.017, 0);
textureColor.a = RGB_Alpha;
}
if(1 == dark)
{
float brightness = 0.45f;
//模糊
vec2 firstOffset = vec2(1.3846153846 * texelWidthOffset, 1.3846153846 * texelHeightOffset) * blurSize;
vec2 secondOffset = vec2(3.2307692308 * texelWidthOffset, 3.2307692308 * texelHeightOffset) * blurSize;
centerTextureCoordinate = textureCoordinate;
oneStepLeftTextureCoordinate = textureCoordinate - firstOffset;
twoStepsLeftTextureCoordinate = textureCoordinate - secondOffset;
oneStepRightTextureCoordinate = textureCoordinate + firstOffset;
twoStepsRightTextureCoordinate = textureCoordinate + secondOffset;
vec4 fragmentColor = texture2D(textureUniformRGBA, centerTextureCoordinate) * 0.2270270270;
fragmentColor += texture2D(textureUniformRGBA, oneStepLeftTextureCoordinate) * 0.3162162162;
fragmentColor += texture2D(textureUniformRGBA, oneStepRightTextureCoordinate) * 0.3162162162;
fragmentColor += texture2D(textureUniformRGBA, twoStepsLeftTextureCoordinate) * 0.0702702703;/
fragmentColor += texture2D(textureUniformRGBA, twoStepsRightTextureCoordinate) * 0.0702702703;
//加暗
textureColor = vec4((fragmentColor.rgb * vec3(brightness)), fragmentColor.a);
//最后画面
gl_FragColor = textureColor;
}目前的问题就是:如果输入数据是rgb32的话,使用这个脚本正常,如果输入数据是yuv的话,没办法使用这个脚本做模糊处理,主要是不知道yuv转换后的textureColor ,怎么做模糊的那部分处理,能直接在这个脚本上修改吗?
我现在的做法的:如果输入数据是yuv,我先转为rgb32后,在作为参数传入到shader脚本,如果是1080P的视频,我每帧画面都需要先转换为rgb32后在使用opengl 绘制,效率低了点。
...全文
相关推荐
Android程序研发源码Android 图像过滤器.rar
例如,可以使用高斯滤波器进行模糊处理,使用Sobel算子进行边缘检测,使用中值滤波器去除噪声。4. **颜色空间转换**:Android图像处理常涉及RGB到HSV、YUV等颜色空间的转换。
PLDroidDemo,Yuv-->H264,Yuv-->RGB,GL模糊,GPuimage.zip
**YUV到H264转换**: YUV是一种常见的视频色彩空间,广泛用于数字视频编码。H264(也称为AVC)是高效视频编码标准,用于压缩和传输视频数据。
Android-GpuImage
GLSL是一种面向GPU的编程语言,允许开发者编写运行在GPU上的程序,用于处理图形和图像数据。GpuImage库提供了丰富的预定义滤镜,包括但不限于:1.
YUVRender:该项目使用GPU将YUV转换为RGB,以便在Android平台上进行渲染
`YUVRender`项目正是针对这一需求而设计的,它利用GPU的强大计算能力,将YUV格式的图像数据高效地转换成RGB格式,以便于在Android设备上进行渲染和显示。
在android上用opengl 处理camera ,通过frag shader增加各种滤镜
无论选择哪种,都需要配置预览层并获取相机帧数据,通常是YUV格式。2. **数据转换**:由于OpenGL ES期望RGB或RGBA格式的数据,所以捕获的YUV数据需要转换。


多媒体/流媒体开发
