原始JS打开摄像头 获取RGB进行二值化处理

原始JS打开摄像头 获取RGB进行二值化处理


先看一下效果
效果
过程中使用到的标签
canvas 绘制图像
navigator 连接媒体输入的设备
video

创建HTML 标签

 <video id="video" src=""></video>
 <canvas id="canvas"></canvas>

获取 绘制图形 和 video

var video = document.getElementById('video')
var canvas = document.getElementById('canvas')`

创建媒体对象

// 媒体对象
    navigator.getMedia = navigator.getUserMedia || //获取媒体对象
                         navagator.webkitGetUserMedia ||
                         navigator.mozGetUserMedia ||
                         navigator.msGetUserMedia;
    vendorUrl = window.URL || window.webkitURL; //创建地址OBJ
    navigator.getMedia({ //获取摄像头参数
        video: true, //使用摄像头对象
        audio: false, //不适用音频
         video: {
                width: 400,
                height: 300
            }
    }, function(strem){//打开
    video.src = vendorUrl.createObjectURL(strem)//创建并实力化
    video.play();
    }, function(error) {//失败
        //error.code
        console.log(error);
    });  
     
         setInterval(function(){
          var co =   context.drawImage(video,0,0);//剪切图像
           img = context.getImageData(0, 0, 400, 300)//获取图片信息
           data = img.data//获取图片信息
           for (var i = 0, len = data.length; i < len; i += 4) {
         var  vas  =   data[i] 
           if (vas<data[i+1] ) {
           vas = data[i+1] 
           };
            if (vas<data[i+2] ) {
           vas = data[i+2] 
           };
            
            if (vas<=127) {
              data[i]=0
              data[i+1]=0
              data[i+2]=0
            }else{
              data[i]=255
              data[i+1]=255
              data[i+2]=255
            } 
      
        }
        context.putImageData(img,0,0)
         }, 100)

在运行时候发现这个方法兼容性不是很好,摄像头打开但图像没有拿到
然后找了一下问题优化了一下,完美

<script>
      //媒体对象
      var video = document.getElementById('video')
      var canvas = document.getElementById('canvas')
         canvas.width = 400;
         canvas.height = 300;
    // navigator.getMedia = navigator.getUserMedia || //获取媒体对象
    //                      navagator.webkitGetUserMedia ||
    //                      navigator.mozGetUserMedia ||
    //                      navigator.msGetUserMedia;
    // vendorUrl = window.URL || window.webkitURL; //创建地址OBJ
    // navigator.getMedia({ //获取摄像头参数
    //     video: true, //使用摄像头对象
    //     audio: false, //不适用音频
    //      video: {
    //             width: 400,
    //             height: 300
    //         }
    // }, function(strem){//打开
    // video.src = vendorUrl.createObjectURL(strem)//创建并实力化
    // video.play();
    // }, function(error) {//失败
    //     //error.code
    //     console.log(error);
    // });  
    //在此codelab上,您将只播放视频(视频:true)。
const mediaStreamConstraints = {
  video: true, 
   video: {
              width: 400,
            height: 300
       }
};
function gotLocalMediaStream(mediaStream) {
  video.srcObject =  mediaStream//创建并实力化
    video.play();
}

navigator.mediaDevices.getUserMedia(mediaStreamConstraints).then(gotLocalMediaStream).catch();
       var context = canvas.getContext("2d"); //c创建对象
        
         setInterval(function(){
          var co =   context.drawImage(video,0,0);//剪切图像
           img = context.getImageData(0, 0, 400, 300)//获取图片信息
           data = img.data//获取图片信息
           for (var i = 0, len = data.length; i < len; i += 4) {
         var  vas  =   data[i] 
           if (vas<data[i+1] ) {
           vas = data[i+1] 
           };
            if (vas<data[i+2] ) {
           vas = data[i+2] 
           };
            
            if (vas<=127) {
              data[i]=0
              data[i+1]=0
              data[i+2]=0
            }else{
              data[i]=255
              data[i+1]=255
              data[i+2]=255
            } 
      
        }
        context.putImageData(img,0,0)
         }, 100)


</script>

整体代码

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>自由网 -FD</title>
</head>
<body>
 
 

  <video id="video" src=""></video>
  <canvas id="canvas"></canvas>
</body>
</html>
<script>
      //媒体对象
      var video = document.getElementById('video')
      var canvas = document.getElementById('canvas')
         canvas.width = 400;
         canvas.height = 300;
    // navigator.getMedia = navigator.getUserMedia || //获取媒体对象
    //                      navagator.webkitGetUserMedia ||
    //                      navigator.mozGetUserMedia ||
    //                      navigator.msGetUserMedia;
    // vendorUrl = window.URL || window.webkitURL; //创建地址OBJ
    // navigator.getMedia({ //获取摄像头参数
    //     video: true, //使用摄像头对象
    //     audio: false, //不适用音频
    //      video: {
    //             width: 400,
    //             height: 300
    //         }
    // }, function(strem){//打开
    // video.src = vendorUrl.createObjectURL(strem)//创建并实力化
    // video.play();
    // }, function(error) {//失败
    //     //error.code
    //     console.log(error);
    // });  
    //在此codelab上,您将只播放视频(视频:true)。
const mediaStreamConstraints = {
  video: true, 
   video: {
              width: 400,
            height: 300
       }
};
function gotLocalMediaStream(mediaStream) {
  video.srcObject =  mediaStream//创建并实力化
    video.play();
}

navigator.mediaDevices.getUserMedia(mediaStreamConstraints).then(gotLocalMediaStream).catch();
       var context = canvas.getContext("2d"); //c创建对象
        
         setInterval(function(){
          var co =   context.drawImage(video,0,0);//剪切图像
           img = context.getImageData(0, 0, 400, 300)//获取图片信息
           data = img.data//获取图片信息
           for (var i = 0, len = data.length; i < len; i += 4) {
         var  vas  =   data[i] 
           if (vas<data[i+1] ) {
           vas = data[i+1] 
           };
            if (vas<data[i+2] ) {
           vas = data[i+2] 
           };
            
            if (vas<=127) {
              data[i]=0
              data[i+1]=0
              data[i+2]=0
            }else{
              data[i]=255
              data[i+1]=255
              data[i+2]=255
            } 
      
        }
        context.putImageData(img,0,0)
         }, 100)


</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值