CamManager
//
/// IMG_BUFFER 用来管理内存图片的抓取队列
///
public class IMG_BUFFER
{
public List<Mat> list_imgs_acq;
private object mutex;
private int max_count = 3;
public IMG_BUFFER()
{
list_imgs_acq = new List<Mat>();
mutex = new object();
}
///
/// 图片入栈
///
///
///
public int Add(Mat himg_acq)
{
int nRet = 0;
if (list_imgs_acq.Count >= max_count) return -1;
lock(mutex)
{
list_imgs_acq.Add(himg_acq);
}
return nRet;
}
///
/// 获取一张图片
///
///
public Mat Pop_Front()
{
Mat tmp = new Mat();
if (list_imgs_acq.Count ==0) return tmp;
lock (mutex)
{
tmp = list_imgs_acq[0];
list_imgs_acq.RemoveAt(0);
}
return tmp;
}
}

在Cam0中放入3张图片

Open_Resources()中增加代码
// opencamCtx
int CamNO = 0;
ContextManager.get_camCtx().Open(CamNO);
ContextManager.get_camCtx().Grab(ref himg_tmp, CamNO);
bdDisplay_Runsets1.picture_cam.InitDisplay_Mat(ref himg_tmp);
if (n_trig0_cur > 0 && n_trig0_last == 0) //判断上升沿触发
{
//相机采集
int nRet = 0;
nRet = ContextManager.get_camCtx().Grab(ref himg_tmp, CamNO);
if(nRet==0)
{
// 图片入栈
imgs_buffer.Add(himg_tmp);
//AutoEvent set,通知ImgProcess
newImgEvent_thread.Set();
}
}
///
/// Display
///
///
public void Display( OpenCvSharp.Mat himg)
{
if (BD_OperateSet.MatNull(himg)) return;
this.Invoke(new Action(() => {
picture_cam.Display_Mat(ref himg);
}));
}
// 添加线程统计信息
Mat tmp = imgs_buffer.Pop_Front();
if(BD_OperateSet.MatisNotNull(tmp))
{
bdDisplay_Runsets1.Display(tmp);
}
else
{
status = false;
}