#! /usr/bin/env octave
addpath("/home/x/opencv2/interfaces/swig/octave");
source("/home/x/opencv2/interfaces/swig/octave/PKG_ADD_template");
debug_on_error(true);
debug_on_warning(true);
crash_dumps_octave_core (0)
cv;
highgui;

laplace = [];
colorlaplace = [];
planes = { [], [], [] };
capture = [];

if (size(argv, 2)==0)
  capture = cvCreateCameraCapture( -1 );
elseif (size(argv, 2)==1 && all(isdigit(argv(){1})))
  capture = cvCreateCameraCapture( int32(argv(){1}) );
elseif (size(argv, 2)==1)
  capture = cvCreateFileCapture( argv(){1} );
endif

if (!swig_this(capture))
  printf("Could not initialize capturing...\n");
  exit(-1)
endif

cvNamedWindow( "Laplacian", 1 );

while (true),
  frame = cvQueryFrame( capture );
  if (!swig_this(frame))
    break
  endif

  if (!swig_this(laplace))
    for i=1:size(planes,2),
      planes{i} = cvCreateImage( \
				cvSize(frame.width,frame.height), \
				8, 1 );
    endfor
    laplace = cvCreateImage( cvSize(frame.width,frame.height), IPL_DEPTH_16S, 1 );
    colorlaplace = cvCreateImage( \
				 cvSize(frame.width,frame.height), \
				 8, 3 );
  endif

  cvSplit( frame, planes{1}, planes{2}, planes{3}, [] );
  for plane = planes,
    plane = plane{1};
    cvLaplace( plane, laplace, 3 );
    cvConvertScaleAbs( laplace, plane, 1, 0 );
  endfor

  cvMerge( planes{1}, planes{2}, planes{3}, [], colorlaplace );
#  colorlaplace.origin = frame.origin;

  cvShowImage("Laplacian", colorlaplace );

  if (cvWaitKey(10) == 27)
    break;
  endif
endwhile

cvDestroyWindow("Laplacian");