Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

How can I identify each object?

Hi everyone! I use code like this. I want to identify each object that detect from video for tracking each object I want to know position(x,y) of each object. How can I do? Please help me. Thank a lot.

public class MotionDetection {

static int SENSITIVITY_VALUE = 30;
static int BLUR_SIZE = 5;
static int WIDTH = 640;
static int HEIGHT = 480;
static int count = 0;
static OpenCVWindow thresholdWindow;
static OpenCVWindow drawnWindow;
//static OpenCVWindow testWindow;

public static void main(String[] args) {
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

    thresholdWindow = new OpenCVWindow(WIDTH, HEIGHT);
    drawnWindow = new OpenCVWindow(WIDTH, HEIGHT);
    //testWindow = new OpenCVWindow(WIDTH, HEIGHT);
    readFromCamera();

}

static void readFromCamera() {
    while (true) {
        VideoCapture camera = new VideoCapture("D:\\Videos\\side.mp4");
        if (!camera.isOpened()) {
            System.out.println("Cannot open file");
        } else {
            Mat previousFrame = new Mat();
            Mat currentFrame = new Mat();
            Mat grayImage1 = new Mat();
            Mat grayImage2 = new Mat();
            Mat differenceImage = new Mat();
            Mat thresholdImage = new Mat();
            boolean frameSuccess;

            // THE INFINITE LOOP
            camera.read(previousFrame);

            Imgproc.resize(previousFrame, previousFrame, new Size(WIDTH, HEIGHT));
            Imgproc.cvtColor(previousFrame, grayImage1,
                    Imgproc.COLOR_BGR2GRAY);

            while (true) {

                frameSuccess = camera.read(currentFrame);
                if (frameSuccess == true) {
                    Imgproc.resize(currentFrame, currentFrame, new Size(WIDTH, HEIGHT));
                    Imgproc.cvtColor(currentFrame, grayImage2,
                            Imgproc.COLOR_BGR2GRAY);

                } else {
                    break;
                }

                // DIFFERENCE
                Core.absdiff(grayImage1, grayImage2, differenceImage);
                Imgproc.threshold(differenceImage, thresholdImage,
                        SENSITIVITY_VALUE, 255, Imgproc.THRESH_BINARY);
                Imgproc.blur(thresholdImage, thresholdImage, new Size(
                        BLUR_SIZE, BLUR_SIZE));
                //Imgproc.medianBlur(thresholdImage, thresholdImage,1);
                Imgproc.threshold(thresholdImage, thresholdImage,
                        SENSITIVITY_VALUE, 255, Imgproc.THRESH_BINARY);

                thresholdWindow.showImage(thresholdImage);

                searchForMovement(thresholdImage, currentFrame);

                //Previous frame is now this frame
                grayImage2.copyTo(grayImage1);
            }
            camera.release();
        }

    }
}

static void searchForMovement(Mat thresholdImage, Mat frame) {
    List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
    Mat hierarchy = new Mat();
    Imgproc.findContours(thresholdImage, contours, hierarchy,
            Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
    Rect objectBoundingRectangle = new Rect(0, 0, 0, 0);
    for (int i = 0; i < contours.size(); i++) {
        objectBoundingRectangle = Imgproc.boundingRect(contours.get(i));
        if (objectBoundingRectangle.area() > 25 & objectBoundingRectangle.area() < 100 ) {            
                        Core.rectangle(frame, objectBoundingRectangle.tl(), objectBoundingRectangle.br(), new Scalar(0,255,0));                            
        }
    }

    drawnWindow.showImage(frame);

}

In this code, I know a lot of position(x,y) of all object.

click to hide/show revision 2
No.2 Revision

How can I identify each object?

Hi everyone! I use code like this. I want to identify each object that detect from video for tracking each object I want to know position(x,y) of each object. How can I do? Please help me. Thank a lot.

public class MotionDetection
{

{
static int SENSITIVITY_VALUE = 30;
 static int BLUR_SIZE = 5;
 static int WIDTH = 640;
 static int HEIGHT = 480;
 static int count = 0;
 static OpenCVWindow thresholdWindow;
 static OpenCVWindow drawnWindow;
 //static OpenCVWindow testWindow;
 public static void main(String[] args) {
 System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
  thresholdWindow = new OpenCVWindow(WIDTH, HEIGHT);
 drawnWindow = new OpenCVWindow(WIDTH, HEIGHT);
 //testWindow = new OpenCVWindow(WIDTH, HEIGHT);
 readFromCamera();
 }
 static void readFromCamera() {
 while (true) {
 VideoCapture camera = new VideoCapture("D:\\Videos\\side.mp4");
  if (!camera.isOpened()) {
 System.out.println("Cannot open file");
 } else {
 Mat previousFrame = new Mat();
 Mat currentFrame = new Mat();
 Mat grayImage1 = new Mat();
 Mat grayImage2 = new Mat();
 Mat differenceImage = new Mat();
 Mat thresholdImage = new Mat();
 boolean frameSuccess;
  // THE INFINITE LOOP
 camera.read(previousFrame);
  Imgproc.resize(previousFrame, previousFrame, new Size(WIDTH, HEIGHT));
 Imgproc.cvtColor(previousFrame, grayImage1,
 Imgproc.COLOR_BGR2GRAY);
  while (true) {
 frameSuccess = camera.read(currentFrame);
  if (frameSuccess == true) {
 Imgproc.resize(currentFrame, currentFrame, new Size(WIDTH, HEIGHT));
 Imgproc.cvtColor(currentFrame, grayImage2,
 Imgproc.COLOR_BGR2GRAY);
  } else {
 break;
 }
  // DIFFERENCE
  Core.absdiff(grayImage1, grayImage2, differenceImage);
 Imgproc.threshold(differenceImage, thresholdImage,
  SENSITIVITY_VALUE, 255, Imgproc.THRESH_BINARY);
 Imgproc.blur(thresholdImage, thresholdImage, new Size(
 BLUR_SIZE, BLUR_SIZE));
 //Imgproc.medianBlur(thresholdImage, thresholdImage,1);
 Imgproc.threshold(thresholdImage, thresholdImage,
  SENSITIVITY_VALUE, 255, Imgproc.THRESH_BINARY);
 thresholdWindow.showImage(thresholdImage);
  searchForMovement(thresholdImage, currentFrame);
  //Previous frame is now this frame
 grayImage2.copyTo(grayImage1);
 }
 camera.release();
 }
 }
 }
 static void searchForMovement(Mat thresholdImage, Mat frame) {
 List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
 Mat hierarchy = new Mat();
  Imgproc.findContours(thresholdImage, contours, hierarchy,
 Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
  Rect objectBoundingRectangle = new Rect(0, 0, 0, 0);
  for (int i = 0; i < contours.size(); i++) {
 objectBoundingRectangle = Imgproc.boundingRect(contours.get(i));
  if (objectBoundingRectangle.area() > 25 & objectBoundingRectangle.area() < 100 ) {
 Core.rectangle(frame, objectBoundingRectangle.tl(), objectBoundingRectangle.br(), new Scalar(0,255,0));
 }
  }
drawnWindow.showImage(frame);
}

In this code, I know a lot of position(x,y) of all object.