我想从像这样的视频流中检测阀门的关闭/打开位置(只是一个例子):
我创建了两组数据集 open 和 close ,并且我选择了为每张图像计算直方图的梯度并将其提供给opencv的神经网络训练它识别视频流中的位置(打开/关闭)。 我有两个问题:
这是我用来计算HOG描述符的代码:
Mat img_raw = imread("C:\\testimg.png", 1); // load as color image
resize(img_raw, img_raw, Size(64,128) );
Mat img;
cvtColor(img_raw, img, CV_RGB2GRAY);
HOGDescriptor d;
// void HOGDescriptor::compute(const Mat& img, vector<float>& descriptors,
// Size winStride, Size padding,
// const vector<Point>& locations) const
vector<float> descriptorsValues;
vector<Point> locations;
d.compute( img, descriptorsValues, Size(0,0), Size(0,0), locations);
cout << "HOG descriptor size is " << d.getDescriptorSize() << endl;
cout << "img dimensions: " << img.cols << " width x " << img.rows << "height" << endl;
cout << "Found " << descriptorsValues.size() << " descriptor values" << endl;
cout << "Nr of locations specified : " << locations.size() << endl;
谢谢。
答案 0 :(得分:0)
据我了解,这种方法看起来不错(特别是如果您不得不使用机器学习的话),但可能会有点慢。我可能会考虑将瓣膜的分割(也可以在这里使用机器学习;尽管,如果这是唯一的动作,则可以通过背景减法提取出来)与the image moments的计算如果您想要可以快速工作的东西。
如果您使用的是opencv,则也可以使用contour properties作为功能。
机器学习可能只是您通过一系列这些功能而训练的简单分类器。