none
如何讓兩支CCD攝影機 同時偵測不同畫面 C# RRS feed

  • 問題

  • private void myUI(string myStr, Control ctl)  //
                if (this.InvokeRequired)
                {
                    myUICallBack myUpdate = new myUICallBack(myUI);
                    this.Invoke(myUpdate, myStr, ctl);
                }
                else
                {
                    ctl.Text = myStr;
                }
            }
           // 
            private void pictureBox1_Paint(object sender, PaintEventArgs e)
            {
                Graphics objGraphic = e.Graphics;//畫圖用
                Pen pen = new Pen(Color.Red);

                objGraphic.DrawLine(pen, (pictureBox1.Width) / 2, 0, (pictureBox1.Width) / 2, pictureBox1.Height);
                objGraphic.DrawLine(pen, 0, (pictureBox1.Height) / 2, pictureBox1.Width, (pictureBox1.Height) / 2);
            }
            
            private void CaptureCamera()//啟動相機的執行續
            {
                _cameraThread = new Thread(new ThreadStart(CaptureCameraCallback));
                _cameraThread.Start();
            }
            private void CaptureCameraCallback() //從這看
            {

                CvCapture cap = CvCapture.FromCamera(1);//為何是1
                IplImage tpl = Cv.LoadImage("CaptureL.bmp", LoadMode.Color);//讀樣版圖檔案
                CvPoint minloc, maxloc;
                double minval, maxval;
                myUI("", minloc_X);//minloc_X寫為空白
                while (true)
                {

                    IplImage img = cap.QueryFrame();
                    IplImage res = Cv.CreateImage(Cv.Size(img.Width - tpl.Width + 1, img.Height - tpl.Height + 1), BitDepth.F32, 1);//MatchTemplate result的公式
                    Cv.MatchTemplate(img, tpl, res, MatchTemplateMethod.SqDiffNormed);//MatchTemplate(image, templ, result, method) 影像對比
                    Cv.MinMaxLoc(res, out minval, out maxval, out minloc, out maxloc, null);
                    //Cv.Rectangle(img, Cv.Point(minloc.X , minloc.Y), Cv.Point(minloc.X + tpl.Width, minloc.Y + tpl.Height), CvColor.Red, 1, 0, 0);
                    Bitmap bm = BitmapConverter.ToBitmap(img);//將img轉成BMP檔
                    bm.SetResolution(pictureBox1.Width, pictureBox1.Height);//設定BMP檔的分辨率為picturebox1的長寬
                    pictureBox1.Image = bm;
                   
                    myUI((minloc.X).ToString(), minloc_X);
                    myUI((minloc.Y ).ToString(), minloc_Y);
                    myUI((minloc.X + tpl.Width/2).ToString(), maxloc_X);//中心點
                    myUI((minloc.Y + tpl.Height/2).ToString(), maxloc_Y);//中心點
                    myUI((((pictureBox1.Width / 2) - (minloc.X + tpl.Width / 2))*3.72).ToString(), move_x);
                    myUI((((pictureBox1.Height / 2) - (minloc.Y + tpl.Height / 2))*-3.72).ToString(), move_y);
                   
                    
                    
                }
                
            }
            private void video_start_Click(object sender, EventArgs e)
            {
                CaptureCamera();
                flog = 1;
            }
    • 已編輯 XIEDADA 2016年6月20日 下午 03:02
    2016年6月20日 下午 03:01

解答

所有回覆