linuxopencvcascade-classifier

OpenCV: Detecting cat with specific color. Trivial?


I have a problem with my cat being bullied by a nabouring cat to the extent that the cat enters our house in the summer and eat our cats food and sleeps in our furniture.

My cat is gray and the problem cat is brown.

I would like to make an alert system using a WiFi action cam and OpenCV detection on a Linux box, but I don't do much coding anymore.

So my question is. Is this a trivial task using standard OpenCV modules?

Or would it require a large amount of original code?

I know that there is OpenCV Cascade Classifier, but have never used it.

Kind Regards

Jacob


Solution

  • it is very initial answer just to show a way to start your project.

    you can try to find trained classifiers for cats. for example i found this and tested some cat images with the code below.

    #include <iostream>
    
    #include "opencv2/highgui.hpp"
    #include "opencv2/objdetect.hpp"
    #include "opencv2/imgproc.hpp"
    
    using namespace std;
    using namespace cv;
    
    int main( int argc, const char** argv )
    {
        if (argc < 3)
        {
        cerr << "usage:\n" << argv[0] << " <image_file_name> <model_file_name>" << endl;
        return 0;
        }
    
        // Read in the input arguments
        string model = argv[2];
    
        CascadeClassifier detector(model);
        if(detector.empty())
        {
            cerr << "The model could not be loaded." << endl;
        }
    
        Mat current_image, grayscale;
    
        // Read in image and perform preprocessing
        current_image = imread(argv[1]);
        cvtColor(current_image, grayscale, CV_BGR2GRAY);
    
        vector<Rect> objects;
        detector.detectMultiScale(grayscale, objects, 1.05, 1);
    
        for(int i = 0; i < objects.size(); i++)
        {
            rectangle(current_image, objects[i], Scalar(0, 255, 0),2);
        }
    
        imshow("result",current_image);
        waitKey();
        return 0;
    }
    

    some result images i get

    enter image description here enter image description here enter image description here

    when you find a satisfactory classifier you can use it with video frames and you can do filtering on detected cats with their colors.

    also you can take a look at

    cat detection using latent SVM in opencv

    Black Cat Detector (no idea if it works)