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

作者: Timid (吞豚)   2016-09-06 15:02:58
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都只截取到同一隻的畫面
不知道是哪裡出了問題 想請教板上高手能否幫忙開釋一下
作者: starlion (不是0就是1)   2016-09-06 20:13:00
第二個device應該從Item[1]取得
作者: Timid (吞豚)   2016-09-08 14:21:00
感謝 已修正,不過還是無法
作者: KLoVeRs (ちぐさ あすは)   2016-09-08 15:49:00
需要吳德清主任的幫助嗎?
作者: dsin (dior)   2016-09-15 08:25:00
你該不會只是把Item[0]改成Item[1]這樣做吧?

Links booklink

Contact Us: admin [ a t ] ucptt.com