Я решил рассчитать общие элементы на нескольких масках. Так я могу избавиться от шума и ненужных движений при приближении
public class CleanFrame
{
private Queue<Mat> frames = new Queue<Mat>();
private int limitOfFrame;
public CleanFrame(int limitOfFrame = 25)
{
this.limitOfFrame = limitOfFrame;
}
/// <summary>
/// put a frame mask in the queue for processing
/// </summary>
/// <param name="frame">frame mask</param>
/// <returns>common elements on all frame masks</returns>
public Mat PushFrame(Mat frame)
{
if (frames.Count == limitOfFrame)
{
frames.Dequeue();
}
frames.Enqueue(frame);
return GetCommonElements();
}
/// <summary>
/// processes masks and returns common elements
/// </summary>
/// <returns></returns>
private Mat GetCommonElements()
{
Mat result = frames.Peek();
foreach (var frame in frames)
{
Cv2.BitwiseAnd(result,frame,result);
Cv2.ImShow("result", result);
}
return result;
}
}
но могло быть и лучше