通过python有两种方式读取图像的像素数据:
创建分析图像的节点(比如,MinColor, CurveTool),执行,然后读取其结果的knob数值
sample方法可以直接抽样节点的像素。
使用CurveTool
创建CurveTool节点,执行后删除,并显示其分析结果:
noise = nuke.createNode('Noise')
noise['zoffset'].setExpression( 'frame*100 ' )
ct = nuke.createNode('CurveTool')
nuke.execute( ct, nuke.frame(), nuke.frame() )
dat = ct['intensitydata'].value()
nuke.delete(ct)
nuke.message( 'average luminance is %s' % dat )
使用sample方法
创建Noise节点,在x=500,y=600抽样红色通道,并输出:
noise = nuke.createNode('Noise')
print noise.sample('red', 500, 600)
下面代码结果一样:
print nuke.sample(noise, 'red', 500, 600)
例子
getMinMax
此工具可以抽取通道中的最大最小值。最近nuke的python api中没有现成的方法,一般利用MinColor的功能来实现。因此工作流中创建一
些临时节点,在当前帧上执行(为我们计算),然后删除。
刚开始,先创建一个测试方案:创建Ramp节点,将Grade节点挂到上面。确保Grade的black clamp knob禁止,然后可以用任意值来测试lift和gain knob。
创建MinColor节点,挂到Grade节点,MinColor的channels knob设置成默认rgba就行,调整其他knob。当目标knob被设置为0时,在当前
帧执行。输入节点的rgba层的delta knob保存了最小值。delta knob的值和你在Grade节点的lift knob的值很接近,但为负的。