MFT 自定义图像过滤器

Posted

技术标签:

【中文标题】MFT 自定义图像过滤器【英文标题】:MFT Custom image Filters 【发布时间】:2012-07-31 16:56:53 【问题描述】:

我目前正在开发一个 Metro Style 应用程序,它使用 MFT(媒体基础转换)将网络摄像头的视频流过滤成灰度,如 this 示例所示。

但是,现在我想应用其他类型的滤镜,例如曝光、色调、亮度、纹理、vignette 等。This 回答说我应该修改 TransformChroma 方法来实现这一点。不幸的是,我不知道如何获取 Y 值,我只能获取 U 和 V。如何获取 NV12、YUY2 和 UYVY 格式的 Y 值? p>

非常感谢所有帮助,我总是接受答案!

【问题讨论】:

【参考方案1】:

您需要更改方法的签名(一个 poto 采用另一个参数并修改 TransformImage_UYVY、TransformImage_YUY2 和 TransformImage_NV12 方法以将该参数传递给更新的方法。您需要弄清楚如何自己提取该值不过。例如查看下面的这段代码,您可以看到如何提取 U 和 V 值,并且 Y 值被分成两个字节 - 您需要做一些位逻辑来连接这些。您可以找到描述这些格式在线,例如here。

// Byte order is U0 Y0 V0 Y1
// Each WORD is a byte pair (U/V, Y)
// Windows is little-endian so the order appears reversed.
BYTE u = pSrc_Pixel[x] & 0x00FF;
BYTE v = pSrc_Pixel[x+1] & 0x00FF;

TransformChroma(mat, &u, &v);

【讨论】:

这行得通,还是倒退? BYTE py = LO_NIBBLE(*pu) + (LO_NIBBLE(*pv) << 4); *pu = (HI_NIBBLE(*pu) << 4); *pv = (HI_NIBBLE(*pv) << 4); 我不确定,但我认为您正在尝试从 U 和 V 值中提取 Y 值,但它不是其中的一部分。它更像是 WORD y = (pSrc_Pixel[x] & 0xFF00) | (pSrc_Pixel[x+1] >> 8); // 或者交换 x 和 x+1。 但是我如何更新图像以反映编辑后 y 变量的变化? 将TransformChroma(mat, &u, &v)改为TransformChroma(mat, &y, &u, &v),然后修改TransformChroma来修改像素。现在,UV 被转换为向量并对其应用了矩阵变换。您可以使用更大的矩阵或单独更新 YUV 值。 有没有办法获得每个像素的 RGB 值,而不必为每个像素转换为/从 YUV 转换?

以上是关于MFT 自定义图像过滤器的主要内容,如果未能解决你的问题,请参考以下文章

UITableview 单元格保留自定义图像视图过滤器

角度的FabricJS自定义过滤器

如何将三个或多个参数传递给自定义模板标签过滤器 django?

如何在android中将自定义过滤器应用于相机流?

媒体基础自定义拓扑 E_FAIL

自定义 logback 日志过滤器