Ask Your Question

Revision history [back]

C++ Detection of White Particles

Hi there! I am trying to do detection of particles using OpenCV: image description

So far, I have been able to threshold the image (video) based on intensity. However, currently I am trying to use kmean to detect the oval shape particles, but to no avail. I need some help with the coding for the kmeans; I have scoured through OpenCV help pages, but yet to no avail. Will greatly appreciate help! Thank you very much


// Step 1: Obtain Ultrasound image // Step 2: Convert to black and white image // Step 3: Threshold video based on B&W intensity // Step 4: Use plusstring algorithm to find centroids of clusters // e.g. K-mean plus string algorithm // Step 5: Appoint center to each cluster // Step 6: Tracking algorithm: Kalman filter // Step 7: Output: Draw circle around particle

include "stdafx.h"

include<opencv cvaux.h="">

include<opencv highgui.h="">

include<opencv cxcore.h="">

//#include "opencv/cv.h" //#include "opencv/highgui.h" //#include "opencv/cxcore.h"

include "opencv2/highgui/highgui.hpp"

include <iostream>

include<stdio.h>

include<stdlib.h>

define THRESHOLDING

using namespace cv;
using namespace std;

int main(int argc, char* argv[])
{
    VideoCapture cap("C:\\BubbleCut.avi"); // open the video file for reading

    if (!cap.isOpened())  // if not success, exit program
    {
        cout << "Cannot open the video file" << endl;
        return -1;
    }



    //Step: Declare all Mat
    Mat frame;
    Mat frame_grey;
    Mat frame_thresholded; //to give binary image 0-255
    Mat frame_houghtrans; //Canny edge gives a binary image too
    Mat labels;
    Mat data, centers;

    vector<Vec3f> circles;

    //cap.set(CV_CAP_PROP_POS_MSEC, 300); //start the video at 300ms

    double fps = cap.get(CV_CAP_PROP_FPS); //get the frames per seconds of the video

    cout << "Frame per seconds : " << fps << endl;

    //namedWindow("MyVideo", CV_WINDOW_AUTOSIZE); create a window called "MyVideo" can be omitted

    while (1)
    {
        cap >> frame; //replace lines: receive frame from cap and store into Mat object aka frame

        if (frame.empty())
        {
            cout << "End of file" << endl << endl;
            cap.release(); //not necessary
            break;
        }


        //Step _ : Convert ultrasound raw video into greyscale video 
        cvtColor(frame, frame_grey, COLOR_RGB2GRAY);
        //plusstring algorithm, blob detection or hough transform

        #ifdef THRESHOLDING
        adaptiveThreshold(frame_grey, frame_thresholded, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 45, 0);
        #endif 

        // Step 4: Use plusstring algorithm to find centroids of clusters
        //         e.g. K-mean plus string algorithm, find parameter of circle


        **//kmeans(frame_thresholded, 8, labels, TermCriteria(CV_TERMCRIT_ITER, 10, 1.0), 3, KMEANS_PP_CENTERS, centers);**

        // Step 7: Display: Videos
        imshow("Raw video", frame); //show the frame in "MyVideo" window
        imshow("Thresholded", frame_thresholded);

        if (waitKey(30) == 27) //wait for 'esc' key press for 30 ms. If 'esc' key is pressed, break loop
        {
            cout << "esc key is pressed by user" << endl;
            break;
        }
    }

    return 0;

}
click to hide/show revision 2
No.2 Revision

C++ Detection of White Particles

Hi there! I am trying to do detection of particles using OpenCV: image description

So far, I have been able to threshold the image (video) based on intensity. However, currently I am trying to use kmean to detect the oval shape particles, but to no avail. I need some help with the coding for the kmeans; I have scoured through OpenCV help pages, but yet to no avail. Will greatly appreciate help! Thank you very much


// Step 1: Obtain Ultrasound image // Step 2: Convert to black and white image // Step 3: Threshold video based on B&W intensity // Step 4: Use plusstring algorithm to find centroids of clusters // e.g. K-mean plus string algorithm // Step 5: Appoint center to each cluster // Step 6: Tracking algorithm: Kalman filter // Step 7: Output: Draw circle around particle

include "stdafx.h"

include<opencv cvaux.h="">

include<opencv highgui.h="">

include<opencv cxcore.h="">

#include "stdafx.h"
#include<opencv/cvaux.h>
#include<opencv/highgui.h>
#include<opencv/cxcore.h>
//#include "opencv/cv.h"
//#include "opencv/highgui.h"
//#include "opencv/cxcore.h"

include "opencv2/highgui/highgui.hpp"

include <iostream>

include<stdio.h>

include<stdlib.h>

define THRESHOLDING

"opencv/cxcore.h"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
#include<stdio.h>
#include<stdlib.h>

#define THRESHOLDING
    using namespace cv;
 using namespace std;

 int main(int argc, char* argv[])
 {
     VideoCapture cap("C:\\BubbleCut.avi"); // open the video file for reading

     if (!cap.isOpened())  // if not success, exit program
     {
         cout << "Cannot open the video file" << endl;
         return -1;
     }



     //Step: Declare all Mat
     Mat frame;
     Mat frame_grey;
     Mat frame_thresholded; //to give binary image 0-255
     Mat frame_houghtrans; //Canny edge gives a binary image too
     Mat labels;
     Mat data, centers;

     vector<Vec3f> circles;

     //cap.set(CV_CAP_PROP_POS_MSEC, 300); //start the video at 300ms

     double fps = cap.get(CV_CAP_PROP_FPS); //get the frames per seconds of the video

     cout << "Frame per seconds : " << fps << endl;

     //namedWindow("MyVideo", CV_WINDOW_AUTOSIZE); create a window called "MyVideo" can be omitted

     while (1)
     {
         cap >> frame; //replace lines: receive frame from cap and store into Mat object aka frame

         if (frame.empty())
         {
             cout << "End of file" << endl << endl;
             cap.release(); //not necessary
             break;
         }


         //Step _ : Convert ultrasound raw video into greyscale video 
         cvtColor(frame, frame_grey, COLOR_RGB2GRAY);
         //plusstring algorithm, blob detection or hough transform

         #ifdef THRESHOLDING
         adaptiveThreshold(frame_grey, frame_thresholded, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 45, 0);
         #endif 

         // Step 4: Use plusstring algorithm to find centroids of clusters
         //         e.g. K-mean plus string algorithm, find parameter of circle


         **//kmeans(frame_thresholded, 8, labels, TermCriteria(CV_TERMCRIT_ITER, 10, 1.0), 3, KMEANS_PP_CENTERS, centers);**

         // Step 7: Display: Videos
         imshow("Raw video", frame); //show the frame in "MyVideo" window
         imshow("Thresholded", frame_thresholded);

         if (waitKey(30) == 27) //wait for 'esc' key press for 30 ms. If 'esc' key is pressed, break loop
         {
             cout << "esc key is pressed by user" << endl;
             break;
         }
     }

     return 0;

 }
click to hide/show revision 3
No.3 Revision

C++ Detection of White Particles

Hi there! I am trying to do detection of particles using OpenCV: image descriptionimage description

So far, I have been able to threshold the image (video) based on intensity. However, currently I am trying to use kmean to detect the oval shape particles, but to no avail. I need some help with the coding for the kmeans; I have scoured through OpenCV help pages, but yet to no avail. Will greatly appreciate help! Thank you very much


// Step 1: Obtain Ultrasound image // Step 2: Convert to black and white image // Step 3: Threshold video based on B&W intensity // Step 4: Use plusstring algorithm to find centroids of clusters // e.g. K-mean plus string algorithm // Step 5: Appoint center to each cluster // Step 6: Tracking algorithm: Kalman filter // Step 7: Output: Draw circle around particle

#include "stdafx.h"
#include<opencv/cvaux.h>
#include<opencv/highgui.h>
#include<opencv/cxcore.h>
//#include "opencv/cv.h"
//#include "opencv/highgui.h"
//#include "opencv/cxcore.h"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
#include<stdio.h>
#include<stdlib.h>

#define THRESHOLDING
    using namespace cv;
    using namespace std;

    int main(int argc, char* argv[])
    {
        VideoCapture cap("C:\\BubbleCut.avi"); // open the video file for reading

        if (!cap.isOpened())  // if not success, exit program
        {
            cout << "Cannot open the video file" << endl;
            return -1;
        }



        //Step: Declare all Mat
        Mat frame;
        Mat frame_grey;
        Mat frame_thresholded; //to give binary image 0-255
        Mat frame_houghtrans; //Canny edge gives a binary image too
        Mat labels;
        Mat data, centers;

        vector<Vec3f> circles;

        //cap.set(CV_CAP_PROP_POS_MSEC, 300); //start the video at 300ms

        double fps = cap.get(CV_CAP_PROP_FPS); //get the frames per seconds of the video

        cout << "Frame per seconds : " << fps << endl;

        //namedWindow("MyVideo", CV_WINDOW_AUTOSIZE); create a window called "MyVideo" can be omitted

        while (1)
        {
            cap >> frame; //replace lines: receive frame from cap and store into Mat object aka frame

            if (frame.empty())
            {
                cout << "End of file" << endl << endl;
                cap.release(); //not necessary
                break;
            }


            //Step _ : Convert ultrasound raw video into greyscale video 
            cvtColor(frame, frame_grey, COLOR_RGB2GRAY);
            //plusstring algorithm, blob detection or hough transform

            #ifdef THRESHOLDING
            adaptiveThreshold(frame_grey, frame_thresholded, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 45, 0);
            #endif 

            // Step 4: Use plusstring algorithm to find centroids of clusters
            //         e.g. K-mean plus string algorithm, find parameter of circle


            **//kmeans(frame_thresholded, 8, labels, TermCriteria(CV_TERMCRIT_ITER, 10, 1.0), 3, KMEANS_PP_CENTERS, centers);**

            // Step 7: Display: Videos
            imshow("Raw video", frame); //show the frame in "MyVideo" window
            imshow("Thresholded", frame_thresholded);

            if (waitKey(30) == 27) //wait for 'esc' key press for 30 ms. If 'esc' key is pressed, break loop
            {
                cout << "esc key is pressed by user" << endl;
                break;
            }
        }

        return 0;

    }