[問題] 兩支CCD攝影機 同時顯示不同畫面

看板C_Sharp作者 (吞豚)時間7年前 (2016/09/06 15:03), 7年前編輯推噓1(103)
留言4則, 4人參與, 最新討論串1/1
private void pictureBox1_Paint(object sender, PaintEventArgs e) { Graphics objGraphic = e.Graphics; Pen pen = new Pen(Color.Blue); 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 pictureBox2_Paint(object sender, PaintEventArgs e)//20160523新增 { Graphics objGraphic = e.Graphics; Pen pen = new Pen(Color.Red); objGraphic.DrawLine(pen, (pictureBox2.Width) / 2, 0, (pictureBox2.Width) / 2, pictureBox2.Height); objGraphic.DrawLine(pen, 0, (pictureBox2.Height) / 2, pictureBox2.Width, (pictureBox2.Height) / 2); } private void UpdateDeviceList() { //清除設備列表 DeviceListView.Items.Clear(); //要求設備enumerator的設備列表 List<DeviceEnumerator.Device> list = DeviceEnumerator.EnumerateDevices(); //每個設備添加在列表中 foreach (DeviceEnumerator.Device device in list) { ListViewItem item = new ListViewItem(device.Name); item.Tag = device; //連結該設備的數據 DeviceListView.Items.Add(item); } } private void CaptureCamera()//啟動相機的執行續 { _cameraThread =new Thread(new ThreadStart(CaptureCameraCallback)); _cameraThread.Start(); } private void CaptureCameraCallback() { ListViewItem item = DeviceListView.Items[0]; //獲取連結設備的數據 DeviceEnumerator.Device device =(DeviceEnumerator.Device)item.Tag; CvCapture cap0 = CvCapture.FromCamera((int)(device.Index));//PO0 IplImage tpl = Cv.LoadImage("CaptureL.bmp", LoadMode.Color);//讀樣 版圖檔案 Thread.Sleep(1000); item = DeviceListView.Items[0]; //獲取連結設備的數據 device = (DeviceEnumerator.Device)item.Tag; CvCapture cap1 = CvCapture.FromCamera((int)(device.Index));//PO1 IplImage tpr = Cv.LoadImage("CaptureR.bmp", LoadMode.Color);//讀樣 版圖檔案 Thread.Sleep(1000); CvPoint minloc, maxloc; double minval, maxval; myUI("", minloc_X);//minloc_X寫為空白 while (true) { IplImage img0 = cap1.QueryFrame(); IplImage res0 = Cv.CreateImage(Cv.Size(img0.Width-tpr.Width+1, img0.Height-tpr.Height+1),BitDepth.F32,1); Cv.MatchTemplate(img0, tpr, res0,MatchTemplateMethod.SqDiffNormed); Cv.MinMaxLoc(res0, out minval, out maxval, out minloc, out maxloc, null); Bitmap bm0 = BitmapConverter.ToBitmap(img0);//將img轉成BMP檔 bm0.SetResolution(pictureBox2.Width,pictureBox2.Height);//設定BMP檔的分辨率 pictureBox2.Image = bm0; IplImage img1 = cap0.QueryFrame(); IplImage res1 = Cv.CreateImage(Cv.Size(img1.Width - tpl.Width + 1, img1.Height - tpl.Height + 1), BitDepth.F32, 1); Cv.MatchTemplate(img1, tpl, res1, MatchTemplateMethod.SqDiffNormed); Cv.MinMaxLoc(res1, out minval, out maxval, out minloc, out maxloc, null); Bitmap bm1 = BitmapConverter.ToBitmap(img1);//將img轉成BMP檔 bm1.SetResolution(pictureBox1.Width, pictureBox1.Height); pictureBox1.Image = bm1; } } private void video_start_Click(object sender, EventArgs e) { //CaptureCamera2(); CaptureCamera(); flog = 1; } 不管怎麼改都是兩個picture box顯示同一支攝影機的畫面 已嘗試過許多方法 也用測試程式試過兩支攝影機都正常 但是使用opencv capture都只截取到同一隻的畫面 不知道是哪裡出了問題 想請教板上高手能否幫忙開釋一下 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.125.20.99 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1473145383.A.53D.html ※ 編輯: Timid (140.125.20.99), 09/06/2016 16:02:21

09/06 20:13, , 1F
第二個device應該從Item[1]取得
09/06 20:13, 1F

09/08 14:21, , 2F
感謝 已修正,不過還是無法
09/08 14:21, 2F

09/08 15:49, , 3F
需要吳德清主任的幫助嗎?
09/08 15:49, 3F

09/15 08:25, , 4F
你該不會只是把Item[0]改成Item[1]這樣做吧?
09/15 08:25, 4F
文章代碼(AID): #1NpcedKz (C_Sharp)