non vorrei lavorare

昔はおもにプログラミングやガジェット系、今は?

Node.jsでOpenCV.jsを使うためにimreadを自前で実装するには

この記事は@kjunichiの2017年パーソナルアドベントカレンダーの9日目の記事です 。

背景

OpenCV.jsをブラウザで使う分には、imreadやimwriteがDOM要素をしている実装に なっているので、便利に使えるが、node.jsでサーバサイドやCLIとして使うと、 jsdom+node-canvasでいけるかと思いきや、セグフォしたり、WindowsだとJPEGが 使えるnode-canvasだとjsdomに認識されず辛い状況。

imreadを自前で実装

昔、OpenCVのMatはBGRの順で並んでいた気がしたが、それは WebCamの入力結果がそういう順番なだけなのかも、とりあえず、 RGBの順番で行けた。

const src = new cv.Mat(128,128,cv.CV_8UC3);
  
  for(let j = 0; j < 128; j++){ 
    for(let i = 0; i < 32; i++) {
      src.data[j * src.cols * src.channels() + i * src.channels()]=j*2;
      src.data[j * src.cols * src.channels() + i * src.channels()+1]=i*64;
      src.data[j * src.cols * src.channels() + i * src.channels()+2]=i*32;
    }
  }

関連記事

3年前の記事

1年前の記事