首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >electron.desktopCapturer to cv.VideoCapture [电子,nodejs,opencv4nodejs]

electron.desktopCapturer to cv.VideoCapture [电子,nodejs,opencv4nodejs]
EN

Stack Overflow用户
提问于 2018-01-14 09:35:57
回答 1查看 538关注 0票数 1

我花了几个小时浏览互联网,寻找一些解决方案,如何捕获桌面(或窗口)并将其发送到OpenCv VideoCapture,以便我可以对其进行一些计算机视觉魔术。

在做完研究后,我能想到的唯一解决方案就是用desktopCapturer启动流,并将流传递给opencv库。

我有这样的代码:

代码语言:javascript
复制
const { desktopCapturer } = require('electron');
var cv = require('electron').remote.require('opencv4nodejs');

...some setup...

navigator.mediaDevices.getUserMedia({
  audio: false,
  video: {
    mandatory: {
      chromeMediaSource: 'desktop',
      chromeMediaSourceId: source.id,
      minWidth: 640,
      maxWidth: 640,
      minHeight: 320,
      maxHeight: 320,
    },
  },
})
.then((stream) => {
  console.log('stream ', stream);
  const videoUrl = URL.createObjectURL(stream);
  console.log('videoUrl', videoUrl);
  const capturedVideo = new cv.VideoCapture(videoUrl);
  console.log('captured video', capturedVideo);
})
.catch((error) => console.error(error));

但我得到以下错误:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-03 22:39:08

以下代码实际处理浏览器桌面捕获器与nodejs for opencv和其他库之间的转换:

代码语言:javascript
复制
}).then((stream) => {
  const video = document.createElement('video');
  video.srcObject = stream;
  video.onloadedmetadata = () => {
  video.play();
  setInterval(() => {
    const canvas = document.createElement('canvas');
    canvas.getContext('2d').drawImage(video, 0, 0, 800, 800);
    canvas.toBlob(blob => {
      toBuffer(blob, function (err, buffer) {
        if (err) throw err;
        // do some magic with buffer
      });
    });
  }, 40);
}; 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48245948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档