GPUImageHighlightShadowFilter 属于 GPUImage 颜色处理相关,用来处理图片阴影,shader 源码如下:
GPUImageCrosshatchFilter GPUImage 黑白网状效果,shader 源码如下:
阅读到上述源代码时,对于int luminance = row[x] & 0xFF;最初不是很理解。查询之后,发现原来Java中是没有unsigned byte type的。也就是说Java中所有的byte类型都是signed类型。只能表达(-128127).而此处的代码为了读取像素值,所需要的值是(0255),所以需要的是unsigned byte而不是signed byte。但是Java中所有的byte都是signed byte。那怎么处理呢?
1) 修复了浮点数往小整数转换的时候会导致Undefined behavior的问题(这是在未使用unsafe的时候导致的UB,官方团队称这种为unsound bug)
本篇文章主要描述如何使用OpenGL ES来渲染i420(YUV420P)和nv21(YUV420SP)
前面文章一文掌握 YUV 图像的基本处理介绍了 YUV 常用的基本格式,本文以实现 NV21/NV12 的渲染为例。
参考https://www.artstation.com/artwork/3omYwB做一个这样的视图, 用于Debug光照亮度:
GPUImageFalseColorFilter 属于 GPUImage 颜色处理相关,用来处理图片色彩替换,分别指定用什么颜色代替图像的暗部和亮色区域。默认值为(0.0,0.0,0.5)和(1.0,0.0,0.0),shader 源码如下:
GPUImageGrayscaleFilter 属于 GPUImage 颜色处理相关,用来处理图片灰色,shader 源码如下:
HDR技术 优点 缺点 Dolby VisionTM - 12-bit colors- Luminance up to 10000 nits (4000 nits current target) - future proof- Dynamic Metadata(per scene) - SMPTE ST 2094-10- Dual Layer DV: Backward compatibility with legacy SCR TVs and STB- Early Adoption by TV mannuf
我们在用纹理增加细节那篇文章中提到过,要将图片渲染在屏幕上,首先要拿到图片的像素数组数据,然后将像素数组数据通过纹理单元传递到片段着色器中,最后通过纹理采样函数将纹理中对应坐标的颜色值采样出来,然后给最终的片段赋予颜色值。现在换成了yuv视频,我们应该如何处理呢?因为最终的片段颜色值是RGBA格式的,而我们的视频是YUV格式的,所以我们需要做一个转化:即将YUV转化为RGBA。
GPUImageSaturationFilter 属于 GPUImage 颜色处理相关,用来处理图片饱和度,shader 源码如下:
GPUImageMonochromeFilter 属于 GPUImage 颜色处理相关,用来处理图片单色,shader 源码如下:
前文中,我们已经利用 FFmpeg + OpenGLES + OpenSLES 实现了一个多媒体播放器,本文将在视频渲染方面对播放器进行优化。
相机开发是 OpenGL ES 开发的重要应用,利用 OpenGL 可以很方便地实现相机美颜、滤镜、塑型以及一些动态特效,其性能显著优于对应功能的 CPU 实现。
OSINT 就是“公开资源情报”,常见于安全和黑客领域。这个 sn0int 是给 IT 安全专业人士和 bug 捕获者设计的 OSINT 框架及包管理器。它用于对给定的目标或你自己搜集情报,生成统一的格式,给后续的研究使用。
本文的分析基于《Adaptive and integrated neighborhood-dependent approach for nonlinear enhancement of color images》一文相关内容,但对其进行了深度的改良。
教程 这一篇教程是摄像头采集数据和渲染,包括了三部分内容,渲染部分-OpenGL ES,摄像头采集图像部分-AVFoundation和图像数据创建纹理部分-GPUImage。 核心思路 1、摄像头采集 AVFoundation的常用类介绍: AVCaptureDevice 输入设备,包括摄像头、麦克风。 AVCaptureInput 输入数据源 AVCaptureOutput 输出数据源 AVCaptureSession 会话,协调输入与输出之间的数据流 AVCaptureVideoPrevie
那天在朋友圈问了一下如何通过 OpenGL Shader 实现同样效果,没想到引来了大神的关注。
可以类比,10bit YUV 就是每个 Y、U、V 分量分别占用 10 个 bit ,但是实际处理中,我们是以字节为单位进行存储和处理的,所以最终处理的数据是以 2 个字节来存储 10bit 的有效数据。
计算机里通常使用RGB色彩模式,例如RGB565,就是用两个字节表示一个像素的颜色,其中红绿蓝分别用5、6、5个bit。还有一些RGB555、RGB666、ARGB4444之类的。而所谓的真彩色,使用4个字节表示一个像素,通常是RGB888,或者ARGB8888,其中A的全称是Alpha通道,指的是透明度
The progression toward true-to-life visuals has been on a rapid pace for many years. Although much of the focus has been on increasing pixel resolution and supporting faster refresh rates to achieve a more immersive experience, pixel quality improvements a
HDR high dynamic range. 很多程序朋友(包括我)都是从dxsdk上看到和学习这个概念,开始学习的更多的是一整套hdr sample的流程: 在float render target上去render scene 后面很多console上的游戏使用rgbm等编码方式来节省内存和bandwidth 通过down sample去计算亮度 treyarch是cook到场景数据里面,省了这个down sample的过程 根据亮度对场景做一个矫正(tone mapping)最后输出到一个rgb8的
因为OpenGLES需要用rgb来加载显示,这里就需要将yuv转rgb,这里放在OpenGL里面转换,OpenGL里面使用GPU,提高性能。
视频是由一幅幅图像或者说一帧帧 YUV 数据组成 表示图片、视频的色彩空间有几种:YUV、RGB、HSV等,FFmpeg解码后的视频数据是YUV数据,而OpenGL ES 渲染时要使用RGB数据,为此我们需要把YUV先转成RGB,对应的转换公式如下:
最近在不断学习、使用的过程中,有了更深刻的理解,特来写一篇源码解读的文章详细介绍下核心代码的具体实现。
自然界的各种色彩、人类所感知的色彩以及各种图像设备和计算机软件所使用的颜色可通过色彩空间(Color Space)来描述。
Palette即调色板这个功能其实很早就发布了,Jetpack同样将这个功能也纳入其中,想要使用这个功能,需要先依赖库
注:请点击“https://community.wolfram.com/groups/-/m/t/1599255”上Wolfram社区下载本文对应的笔记本文件。
在电脑图形中我们常会遇到RGB颜色。RGB中的红绿蓝直接分别对应了可见光的部分。 RGB值能建立一个精确的数字坐标系统,称作颜色空间(color space)。红色部分定义了坐标系中的一个轴。 其次是绿色和蓝色。如下图所示。所有有效的RGB值都在这个颜色空间里。
我们在讲 FFmpeg 系列的时候,有提到 YUV 的。其中包括YUV播放器、简单的YUV格式介绍。
定义颜色变化相关类ColorTransform,并且定义RGB和Hsl的相互转换逻辑方法:
、论文:Deep Hierarchies in the Primate Visual Cortex: What Can We Learn for Computer Vision? 主视觉大脑皮层的深度
对图像的颜色空间做了一个概念性的介绍,并通过代码的方式可视化了每种颜色空间的每个通道所表示的意义。
做过camera, 播放器,图片处理的对YUV都不会陌生,但是关于YUV有很多的格式YUV420, NV21, YUV420sp, YV12等等往往令人混乱
使用过 Springboot 的对上面这个图案肯定不会陌生,Springboot 启动的同时会打印上面的图案,并带有版本号。查看官方文档可以找到关于 banner 的描述
最近,有位读者大人在后台反馈:在参加一场面试的时候,面试官要求他用 shader 实现图像格式 RGB 转 YUV ,他听了之后一脸懵,然后悻悻地对面试官说,他只用 shader 做过 YUV 转 RGB,不知道 RGB 转 YUV 是个什么思路。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
(ps:由于博主关注的主要是神经网络方面的图像融合方法,对其他的不是很了解,这里只是提一下)
—\ntheme: smartblue\n—\n# 本文简介\n\n点赞 + 关注 + 收藏 = 学会了\n\n \n\n在学习 Canvas 的路上大概率会了解到 滤镜 ,这是个很有趣的东西。\n\n用 Canvas 开发滤镜需要对几何数学、颜色的理解等领域都有一定基础。\n\n但先别关掉文章,没基础也没关系,不是还可以复制粘贴吗?(像极了正则表达式)\n\n \n\n我在学习的过程中也尝试过写一些简单的滤镜,也收集过很多滤镜。但由于历史有点久远了,我找不到收集回来的滤镜出处了。如果有冒犯到原作者,请联系我进行整改~\n\n \n\n如果你对 Canvas 感兴趣,可以关注《一看就懂的 Canvas 专栏》\n\n \n\n本文使用到的猫咪图片素材来自 The Cat API。\n\n如果想要更多猫猫狗狗的API,可以查看 《前端需要的免费在线api接口》 。\n\n \n\n \n\n# 开发环境\n\n本文所列出的例子都是在 .html 文件里编写的,可以直接看看代码仓库。\n\n需要注意的是,本例使用到的方法虽然是 Canvas 原生操作像素的方法,但必须有个服务器才能运行起来,不然不会生效。\n\n \n\n可以搭建本地服务器运行本文案例,方法有很多种。\n\n比如你使用 Vue 或者 React 的脚手架搭建的项目,运行后就能跑起本文所有案例。\n\n又或者使用 http-server 启动本地服务。\n\n \n\n本文使用一个更简单的工具。我用 VS Code 开发,安装了 Live Server 插件,它可以启动一个本地服务,同时自带热更新功能。\n\n \n\n开发环境方面就讲这么多,不是本文重点。如果是在不懂怎么搭建环境可以在留言区提问~\n\n \n\n \n\n# 滤镜原理\n\n众所周知,位图是由像素组成,像素是位图最小的信息单元。 你可以把日常看到大多数图片理解成由一个个点组成的图像。\n\n滤镜的作用是通过具体规则,将图像中的像素点按照计算得出的公式修改一遍再重新渲染出来。\n\n\n
现在人像分割技术就像当初的人脸检测算法一样,称为广泛使用的基础算法。今天本文介绍的人像留色其实就是三年前某 AI 巨头利用 video 分割技术展示的应用场景:人体区域保留彩色,人体区域之外灰度化。所以人像留色的关键技术在于高精度高性能的分割算法。
其实最开始的时候,我主要是因为工作上的原因想要在Android版的Edge浏览器上实现首页图片沉浸式的功能。
一、光和颜色 1 光和颜色 可见光是波长在380 nm~780 nm 之间的电磁波,我们看到的大多数光不是 一种波长的光,而是由许多不同波长的光组合成的。如果光源由单波长组成,就 称为单色光源。该光源具有能量,也称强度。实际中,只有极少数光源是单色的, 大多数光源是由不同波长组成,每个波长的光具有自身的强度。这称为光源的光 谱分析。 颜色是视觉系统对可见光的感知结果。研究表明,人的视网膜有对红、绿、 蓝颜色敏感程度不同的三种锥体细胞。红、绿和蓝三种锥体细胞对不同频率的光 的感知程度不同,对不同亮度的感知程度也不同。 自然界中的任何一种颜色都可以由R,G,B 这3 种颜色值之和来确定,以这 三种颜色为基色构成一个RGB 颜色空间。
最近在做直播视频通话、自定义采集应用,恶补了YUV格式相关的问题,这篇文章就记录一下。
YCbCr或Y'CbCr有的时候会被写作:YCBCR或是Y'CBCR,是色彩空间的一种,通常会用于影片中的影像连续处理,或是数字摄影系统中。Y'为颜色的亮度(luma)成分、而CB和CR则为蓝色和红色的浓度偏移量成份。Y'和Y是不同的,而Y就是所谓的流明(luminance),表示光的浓度且为非线性,使用伽马修正(gamma correction)编码处理
YUV表示的含义 人们常用RGB表示三基色,而且RGB也可以表示出所有颜色。但视觉心理学研究表明,人眼主要是对光的感知,人的视觉系统对光的感知程度用亮度(luminance)和色度(chrominance)两个属性表示,也就是我们常说的YUV。Y就是亮度感知,而色度感知分为两个属性:色相(hue)和色饱和度(saturation)。色相也就是U,是由光波的峰值定义的,描述的是光的颜色;色饱和度V是光波的谱宽定义的,描述的是光的纯度。 采用YUV色度空间比采用RGB颜色空间更利于视频的压缩,也能更有效的表示彩色视频图像。 YUV和RGB的转换 YUV和GBD之间的转换关系是(ITU=T, 1995):
领取专属 10元无门槛券
手把手带您无忧上云