RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package rlpark.plugin.opencv; 00002 00003 import zephyr.plugin.core.api.monitoring.annotations.IgnoreMonitor; 00004 import zephyr.plugin.core.api.monitoring.annotations.Monitor; 00005 00006 import com.googlecode.javacv.cpp.opencv_core; 00007 import com.googlecode.javacv.cpp.opencv_core.CvScalar; 00008 import com.googlecode.javacv.cpp.opencv_core.IplImage; 00009 00010 @Monitor 00011 public class MotionMeasure { 00012 private final ImageTrace trace; 00013 private final ImageBuffer difference; 00014 @IgnoreMonitor 00015 private final double area; 00016 private double measure; 00017 00018 public MotionMeasure(double lambda, int width, int height, int depth, int channels) { 00019 trace = new ImageTrace(lambda, width, height, depth, channels); 00020 difference = new ImageBuffer(width, height, depth, channels); 00021 area = width * height; 00022 } 00023 00024 public double update(IplImage currentFrame) { 00025 trace.update(currentFrame); 00026 opencv_core.cvAbsDiff(trace.im(), currentFrame, difference.im()); 00027 measure = toValue(opencv_core.cvSum(difference.im())); 00028 return measure; 00029 } 00030 00031 private double toValue(CvScalar scalar) { 00032 return (scalar.red() + scalar.green() + scalar.blue()) / area; 00033 } 00034 00035 public void dispose() { 00036 trace.dispose(); 00037 difference.dispose(); 00038 } 00039 00040 public int channels() { 00041 return trace.im().nChannels(); 00042 } 00043 00044 public ImageTrace trace() { 00045 return trace; 00046 } 00047 }