Ejemplo n.º 1
0
 /// <summary>
 /// 保存多目校准的系数
 /// </summary>
 /// <param name="noCamera_e">相机序号</param>
 /// <param name="index">算子序号,不是拍照位置</param>
 /// <param name="calib"></param>
 /// <returns></returns>
 public static bool SaveCalibMultCo(NoCamera_enum noCamera_e, int index, double[] calib)
 {
     try
     {
         BaseParComprehensive par = GetParComphensive(noCamera_e);
         //index 获取对应算子的所有单元格名称
         List <string> nameCell_L = par.GetAllNameCellByType("多目校准");
         if (nameCell_L.Count < index)
         {
             return(false);
         }
         string       nameCell     = nameCell_L[index - 1];
         ParCalibMult parCalibMult = par.GetCellParCalibrate(nameCell) as ParCalibMult;
         for (int i = 0; i < calib.Length; i++)
         {
             parCalibMult.CoCalib[i] = calib[i];
         }
         bool blSave = par.WriteXmlDoc(nameCell);
         if (blSave)
         {
             ShowState(string.Format("将多目校准{0}参数保存到本地成功", nameCell));
         }
         else
         {
             ShowAlarm(string.Format("将多目校准{0}参数保存到本地失败", nameCell));
             return(false);
         }
         return(true);
     }
     catch (Exception ex)
     {
         Log.L_I.WriteError("BaseDealComprehensiveResult", ex);
         return(false);
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// 计算相机的映射系数
        /// </summary>
        /// <param name="par1">基准相机参数</param>
        /// <param name="index1">算子索引号</param>
        /// <param name="par2"></param>
        /// <param name="index2">算子索引号</param>
        /// <returns></returns>
        bool CalibMult_Co(BaseParComprehensive par1, int index1, BaseParComprehensive par2, int index2)
        {
            try
            {
                //第一个相机
                List <string> name1_L = par1.GetAllNameCellByType("多目校准");
                if (name1_L.Count < index1)
                {
                    WinMsgBox.ShowMsgBox("算子个数小于序号!");
                    return(false);
                }
                string       name1         = name1_L[index1 - 1];
                ParCalibMult parCalibMult1 = par1.GetCellParCalibrate(name1) as ParCalibMult;

                //第二个相机
                List <string> name2_L = par2.GetAllNameCellByType("多目校准");
                if (name2_L.Count < index1)
                {
                    WinMsgBox.ShowMsgBox("算子个数小于序号!");
                    return(false);
                }
                string       name2         = name2_L[index1 - 1];
                ParCalibMult parCalibMult2 = par2.GetCellParCalibrate(name2) as ParCalibMult;

                //计算系数
                FunCalibMult fun = new FunCalibMult();
                fun.CalCalibMult(parCalibMult1, parCalibMult2);

                //保存此单元格
                bool blSave = par1.WriteXmlDoc(par1.NameCell);
                if (blSave)
                {
                    ShowState(string.Format("将相机{0}参数{1}保存到本地成功", par1.NoCamera.ToString(), par1.NameCell));
                }
                else
                {
                    ShowAlarm(string.Format("将相机{0}参数{1}保存到本地失败", par1.NoCamera.ToString(), par1.NameCell));
                    return(false);
                }

                blSave = par2.WriteXmlDoc(par2.NameCell);
                if (blSave)
                {
                    ShowState(string.Format("将相机{0}参数{1}保存到本地成功", par2.NoCamera.ToString(), par2.NameCell));
                }
                else
                {
                    ShowAlarm(string.Format("将相机{0}参数{1}保存到本地失败", par2.NoCamera.ToString(), par2.NameCell));
                    return(false);
                }
                return(true);
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
                return(false);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 多目校准,获取坐标
        /// </summary>
        /// <param name="pos">算子的序号,并非拍照位置</param>
        /// <param name="index">拍照次序</param>
        /// <param name="htResult">哈希表结果</param>
        /// <returns></returns>
        bool CalibMult_GetPoint(int pos, int index, out Hashtable htResult)
        {
            htResult = null;
            Stopwatch sw = new Stopwatch();

            sw.Restart();
            try
            {
                List <string> nameCell_L = g_BaseParComprehensive.GetAllNameCellByType("多目校准");
                if (nameCell_L.Count < pos)
                {
                    WinMsgBox.ShowMsgBox("算子个数小于序号!");
                    return(false);
                }
                string       nameCell = nameCell_L[pos - 1];
                ParCalibMult par      = g_BaseParComprehensive.GetCellParCalibrate(nameCell) as ParCalibMult;

                int indexCell = int.Parse(nameCell.Replace("C", ""));//单元格索引

                //关联算法,用来获取角点
                ParCellExeReference  parCellExeReference  = par.g_ParCellExecuteReference;
                ParGetResultFromCell parGetResultFromCell = par.g_ParGetResultFromCell;

                //第一次获取坐标的时候,清空历史记录,不能Clear,只能赋值0
                if (index == 1)
                {
                    for (int i = 0; i < parGetResultFromCell.ResultforCalib_L.Count; i++)
                    {
                        parGetResultFromCell.ResultforCalib_L[i].XResult = 0;
                        parGetResultFromCell.ResultforCalib_L[i].YResult = 0;
                    }
                }

                //调用执行
                g_UCDisplayCamera.GrabImageAndShow();
                g_BaseDealComprehensive.DealComprehensivePosCell_ForTestRun(g_UCDisplayCamera, parCellExeReference, par.g_ParCellExecuteReference.g_CellExecute_L, out htResult);//执行算法且显示

                //比对对应的单元格名称,判断结果是否正确
                string cellError = "";
                if (!GetErrorCell(htResult, par.g_ParCellExecuteReference.NameCellExecute_L, out cellError))
                {
                    WinMsgBox.ShowMsgBox(string.Format("相机{0}位置{1},单元格{2}校准计算错误", g_NoCamera.ToString(), pos.ToString(), par.NameCell));
                    return(false);
                }

                FunCellDataReferenc fun = new FunCellDataReferenc();
                fun.GetResultValue(htResult, parGetResultFromCell, index - 1);

                string info = string.Format("相机{0}位置{1},单元格{2}相机多目校准触发拍照", g_NoCamera.ToString(), pos.ToString(), par.NameCell);
                ShowState(info);

                //保存基准图片
                SaveStdImage(par, "多目校准");

                //保存此单元格
                bool blSave = g_BaseParComprehensive.WriteXmlDoc(par.NameCell);

                if (blSave)
                {
                    ShowState(string.Format("将相机{0}参数{1}保存到本地成功", g_NoCamera.ToString(), par.NameCell));
                }
                else
                {
                    ShowAlarm(string.Format("将相机{0}参数{1}保存到本地失败", g_NoCamera.ToString(), par.NameCell));
                    return(false);
                }
                return(true);
            }
            catch (Exception ex)
            {
                WinMsgBox.ShowMsgBox(string.Format("相机{0}多目校准计算进入Catch", g_NoCamera.ToString()));
                ShowAlarm("相机校准计算进入Catch");
                Log.L_I.WriteError(NameClass, ex);
                return(false);
            }
        }