tf.browser.fromPixels仅返回零

时间:2019-03-09 17:05:48

标签: tensorflow.js

这里tf.browser.fromPixels返回只有零的张量。 image.data包含预期的值(不仅是零)。使用脚本标记加载tfjs。 tfjs 1.0.0,但更改发行版无济于事。

有什么问题?可能有些愚蠢。我是Tensorflow.js的新手...

<canvas id="canvas" width="100" height="100" style="border:1px solid #FF0000;"></canvas>
....
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');   
var image = ctx.getImageData(0, 0, canvas.height, canvas.width);
var x = tf.browser.fromPixels(image);

2 个答案:

答案 0 :(得分:1)

创建后,画布的所有像素值均设置为0。

var canvas = document.getElementById('canvas');

canvas是只有0个值的imageData。所创建的张量的值为0也就不足为奇了,因为用于创建它的画布除了0值之外没有任何图像数据。

CSS样式不会更改画布的基础值。结果,即使边框颜色设置为红色,也不会反映在imageData上。

var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var image = ctx.getImageData(0, 0, canvas.height, canvas.width);
var x = tf.browser.fromPixels(image);

console.log(x.shape) // height, width, 3
<html>
  <head>
    <!-- Load TensorFlow.js -->
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.0.0"> </script>
  </head>

  <body>
  <canvas id="canvas" width="100" height="100" style="border:1px solid #FF0000;"></canvas>
  </body>
</html>

答案 1 :(得分:0)

问题是我使用了ctx.strokeStyle ='#000000'(黑色)。但是画布已经充满了0(如edkeveked所说)。这意味着该图形不可见。我看到的数据可能是alpha通道,但是alpha通道已被fromPixels删除。

解决方案是使用'#000000'以外的其他strokeStyle和/或将ctx.fillRect与fillStyle =“ #FFFFFF”(白色)一起使用。

所以fromPixels还可以...