OpenCV: обнаружение кошки определенного цвета. Тривиально?

У меня есть проблема с тем, что над моей кошкой издевается бродячая кошка до такой степени, что кошка входит в наш дом летом, ест нашу кошачью еду и спит в нашей мебели.

Моя кошка серая, а проблемная кошка коричневая.

Я хотел бы создать систему оповещения, используя экшн-камеру WiFi и обнаружение OpenCV на компьютере с Linux, но я больше не занимаюсь кодированием.

Итак, мой вопрос. Это тривиальная задача с использованием стандартных модулей OpenCV?

Или это потребует большого количества исходного кода?

Я знаю, что есть каскадный классификатор OpenCV, но никогда им не пользовался.

С уважением

Джейкоб


person Dacobi    schedule 11.05.2016    source источник
comment
Голосую за, потому что ты заставил меня улыбнуться   -  person Antonio    schedule 11.05.2016
comment
Мне нравится идея, если вы серьезно. если вы предоставите дополнительную информацию о вашем проекте, я постараюсь сделать несколько предложений.   -  person sturkmen    schedule 11.05.2016
comment
@sturkmen Я не знаю, что еще сказать. План состоит в том, чтобы установить над моей входной дверью стационарную камеру, которая отправляет потоковое видео в реальном времени на компьютер с Linux, а затем этот модуль определяет конкретного кота на основе общего цвета или любого кота, который не принадлежит мне.   -  person Dacobi    schedule 11.05.2016
comment
@user3866319 user3866319 я постараюсь улучшить свой ответ в соответствии с вашими отзывами. Я надеюсь, что это будет полезно.   -  person sturkmen    schedule 12.05.2016
comment
@sturkmen Мне удалось скомпилировать ваш пример и обнаружил, что, хотя это занимает очень много времени, он обнаруживает знаковые изображения кошек, но когда я когда-либо использую изображение с большим количеством разных объектов и более сложными позициями кошек, я не получаю зеленые прямоугольники, или выпрямляет повсюду. Как обучить классификатор?   -  person Dacobi    schedule 12.05.2016
comment
Я бы начал с гораздо более простого метода, чем обучение каскада классификаторов. Обучение каскада классификаторов является сложной и трудоемкой задачей. Он также очень чувствителен к точке зрения. Вместо этого я бы попытался сначала использовать вычитание фона для обнаружения движения, а затем определение цвета HSV.   -  person Catree    schedule 13.05.2016


Ответы (1)


это очень начальный ответ, просто чтобы показать способ начать свой проект.

можно попробовать найти обученных классификаторов для кошек. например, я нашел это и протестировал некоторые изображения кошек с кодом ниже.

#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;
}

некоторые изображения результатов, которые я получаю

введите здесь описание изображения введите здесь описание изображения введите здесь описание изображения

когда вы найдете удовлетворительный классификатор, вы можете использовать его с видеокадрами и выполнять фильтрацию обнаруженных кошек по их цветам.

также вы можете ознакомиться с

обнаружение кошек с использованием скрытого SVM в opencv< /а>

Детектор черной кошки (не знаю, работает ли он)

person sturkmen    schedule 11.05.2016