使用js获取图像的像素矩阵

新建一个h5文件,首先定义画布和图像标签,如下:

<canvas id="myCanvas" width="448" height="448">
    <img src="./test/dog1.jpg" id="img" alt=""/>
</canvas>

然后使用js获取图像数据:

<script>
    // 通过js获取图像数据
    var canvas_obj = document.getElementById("myCanvas");   // 获取canvas标签对象
    var ctx = canvas_obj.getContext("2d");                  // 设置在画布上绘图的环境
    var img_obj = document.getElementById("img");           // 获取img标签对象
    ctx.drawImage(img_obj, 0, 0);                           // 将图片绘制到画布上
    var imgData_obj = ctx.getImageData(0,0,canvas_obj.width,canvas_obj.height);    // 获取画布上的图像像素矩阵
    var imgData = imgData_obj.data;     // 获取到的数据为一维数组,包含图像的RGBA四个通道数据
    // console.log(imgData.length);

    // 将获取到的图像数据去除A通道
    var imgArr = [];
    for(var i=0; i<imgData.length; i += 4){
        imgArr.push(imgData[i], imgData[i+1], imgData[i+2])
    }
    // console.log(imgArr)
    
</script>

通过以上js得到图像的RGB数据,但是得到的数据是一维数组,形式为[R,G,B,R,G,B……R,G,B]

完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>TinyYOLO</title>
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"> </script>
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-converter"></script>
</head>
<body>
<canvas id="myCanvas" width="448" height="448">
    <img src="./test/dog1.jpg" id="img" alt=""/>
</canvas>

<script>
    // 通过js获取图像数据
    var canvas_obj = document.getElementById("myCanvas");   // 获取canvas标签对象
    var ctx = canvas_obj.getContext("2d");                  // 设置在画布上绘图的环境
    var img_obj = document.getElementById("img");           // 获取img标签对象
    ctx.drawImage(img_obj, 0, 0);                           // 将图片绘制到画布上
    var imgData_obj = ctx.getImageData(0,0,canvas_obj.width,canvas_obj.height);    // 获取画布上的图像像素矩阵
    var imgData = imgData_obj.data;     // 获取到的数据为一维数组,包含图像的RGBA四个通道数据
    // console.log(imgData.length);

    // 将获取到的图像数据去除A通道
    var imgArr = [];
    for(var i=0; i<imgData.length; i += 4){
        imgArr.push(imgData[i], imgData[i+1], imgData[i+2])
    }
    // console.log(imgArr)

    // 将js数组转化为tensor数据,并reshape
    var imgMat = tf.tensor(imgArr);
    var img = imgMat.reshape([1,448, 448, 3]);

    const MODEL_URL = './web_model/model.json';             // 模型文件名
    async function fun(){	                                // 预测函数
        const model = await tf.loadGraphModel(MODEL_URL);	// 加载图模型
        var predictData = model.predict(img);               // 预测
        console.log(predictData.shape);
        predictData.print()
        }

    fun()	//调用函数

</script>
</body>
</html>

注:此代码为使用tensorflowjs调用python训练的TinyYOLO模型

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值