看板 C_Sharp 關於我們 聯絡資訊
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
starlion: 第二個device應該從Item[1]取得 09/06 20:13
Timid: 感謝 已修正,不過還是無法 09/08 14:21
KLoVeRs: 需要吳德清主任的幫助嗎? 09/08 15:49
dsin: 你該不會只是把Item[0]改成Item[1]這樣做吧? 09/15 08:25