Java
processing
OpenCV

Processingで内臓カメラを表示するだけのコード

More than 1 year has passed since last update.

Processingというより、もはやただのjava

投稿してから気づいたが、Matの中身が負値になってしまうので、byteの配列ではなくintの配列を使うべきだった……
Mat.get()オーバーロードされてるじゃん……

import org.opencv.core.*;
import org.opencv.highgui.*;

VideoCapture capture;

void setup(){  
  System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
  capture = new VideoCapture(0);
  fullScreen();
}

void draw(){
  background(0);
   if (capture.isOpened()) {
      Mat video = new Mat();
      capture.read(video);

      byte [] b;
      b = new byte[(int)video.size().height * (int)video.size().width*3];

      video.get(0,0,b);
      PImage img = createImage((int)video.size().width,(int)video.size().height,ARGB);

      for(int i=0;i<(int)video.size().width;i++){
        for(int j=0;j<(int)video.size().height;j++){
          int p = (i+j*(int)video.size().width)*3;
          img.set(i,j,color(fix(b[p+2]),fix(b[p+1]),fix(b[p+0])));
        }
      }
      image(img, 0, 0, (int)video.size().width, (int)video.size().height);
    } 
}

int fix(int val){
  if(val>-1)return val;
  else{
    return 256+val;
  }
}

参考
cv::Matの基本処理
QiitaProcessingでOpenCVを使う(続き)