我有一个问题,我的猫被一只猫欺负,以至于猫在夏天进入我们的房子,吃我们的猫食并睡在我们的家具里。
我的猫是灰色的,问题猫是棕色的。
我想在 Linux 机器上使用 WiFi 动作摄像头和 OpenCV 检测来制作警报系统,但我不再做太多编码了。
所以我的问题是。这是使用标准 OpenCV 模块的简单任务吗?
还是需要大量的原始代码?
我知道有 OpenCV Cascade Classifier,但从未使用过。
亲切的问候
雅各布
我有一个问题,我的猫被一只猫欺负,以至于猫在夏天进入我们的房子,吃我们的猫食并睡在我们的家具里。
我的猫是灰色的,问题猫是棕色的。
我想在 Linux 机器上使用 WiFi 动作摄像头和 OpenCV 检测来制作警报系统,但我不再做太多编码了。
所以我的问题是。这是使用标准 OpenCV 模块的简单任务吗?
还是需要大量的原始代码?
我知道有 OpenCV Cascade Classifier,但从未使用过。
亲切的问候
雅各布
这是一个非常初步的答案,只是为了展示一种开始你的项目的方法。
您可以尝试为猫找到训练有素的分类器。例如,我发现了这个 并使用下面的代码测试了一些猫图像。
#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;
}
我得到的一些结果图像
当你找到一个令人满意的分类器时,你可以将它与视频帧一起使用,你可以用它们的颜色对检测到的猫进行过滤。
你也可以看看
黑猫探测器(不知道它是否有效)