powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Захват видео с камеры и сохранение фото
7 сообщений из 7, страница 1 из 1
Захват видео с камеры и сохранение фото
    #39936742
erleug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь сделать захват видео с камеры с помощью EmguCv. Добавил в проект библиотеки, подключил все нужные директивы

Код: c#
1.
2.
3.
4.
5.
6.
using Emgu;
using Emgu.CV;
using Emgu.CV.Util;
using Emgu.CV.Structure;
using Emgu.Util;
using DirectShowLib;



Нужно чтобы приложение подключалось к камере, передавало поток видео в pictureBox и по нажатию на кнопку делало фото. Пробую делать таким методом:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
public partial class Form1 : Form
    {
        private VideoCapture capture = null;    // храним захватываемые данные с видеокамеры
        private DsDevice[] webCams = null;
        private int selectedCameraId = 0;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            webCams = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);    // получаем все доступные видеокамеры
            for(int i=0; i<webCams.Length; i++)
            {
                camerasCbx.Items.Add(webCams.Name);
            }
        }

        private void camerasCbx_SelectedIndexChanged(object sender, EventArgs e)
        {
            selectedCameraId = camerasCbx.SelectedIndex;
        }

        private void watchBtn_Click(object sender, EventArgs e)
        {
            try
            {
                if (webCams.Length == 0)
                {
                    throw new Exception("Нет доступных камер!");
                }
                else if (camerasCbx.SelectedItem == null)
                {
                    throw new Exception("необходимо выбрать камеру!");
                }
                else if (capture != null)   // если поставили видео на паузу
                {
                    capture.Start();    // продолжаем смотреть
                }
                else
                {
                    capture = new VideoCapture(selectedCameraId);
                    capture.ImageGrabbed += Capture_ImageGrabbed;
                    capture.Start();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void Capture_ImageGrabbed(object sender, EventArgs e)
        {
            try
            {
                Mat m = new Mat();  // обьект для хранения картинки
                capture.Retrieve(m);
                pictureBox1.Image = m.ToImage<Bgr, byte>().Flip(Emgu.CV.CvEnum.FlipType.Horizontal).Bitmap;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void pauseBtn_Click(object sender, EventArgs e)
        {
            try
            {
                if (capture != null)    // если идет видеопоток
                {
                    capture.Pause();    // ставим на паузу
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void stopBtn_Click(object sender, EventArgs e)
        {
            try
            {
                if (capture != null)    // если идет видеопоток
                {
                    capture.Pause();    // останавливаем
                    capture.Dispose();  // удаляем все ресурсы, которые использовали
                    capture = null;
                    pictureBox1.Image.Dispose();    // удаляем картинку
                    pictureBox1.Image = null;
                    selectedCameraId = 0; 
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void makeFotoBtn_Click(object sender, EventArgs e)
        {
            try
            {
                Mat m = new Mat();  
                capture.Retrieve(m);
                MakeFotoForm makeFoto = new MakeFotoForm(m.ToImage<Bgr, byte>().Flip(Emgu.CV.CvEnum.FlipType.Horizontal));
                makeFoto.Show();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void exitBtn_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }




и есть вторая форма для вывода фото и его сохранения


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
public partial class MakeFotoForm : Form
    {
        private Image<Bgr, byte> image = null;  // для передачи картинки
        private string fileName = string.Empty; // для сохранения картинки

        public MakeFotoForm(Image<Bgr,byte> image)
        {
            this.image = image;
            InitializeComponent();
        }

        private void MakeFotoForm_Load(object sender, EventArgs e)
        {
            fileName = $"webcam {DateTime.Now.Day} {DateTime.Now.Month} {DateTime.Now.Year} {DateTime.Now.Hour} {DateTime.Now.Minute} {DateTime.Now.Second}.jpg";
            pictureBox1.Image = image.Bitmap;
        }

        private void saveBtn_Click(object sender, EventArgs e)
        {
            try
            {
                pictureBox1.Image.Save(fileName, ImageFormat.Jpeg);
                if (File.Exists(fileName))
                {
                    Close();
                }
                else
                {
                    throw new Exception("Не удалось сохранить изображение!");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void closeNotSaveBtn_Click(object sender, EventArgs e)
        {
            Close();
        }
    }




у меня вылетает ошибка в строке [i]pictureBox1.Image = m.ToImage<Bgr, byte>().Flip(Emgu.CV.CvEnum.FlipType.Horizontal).Bitmap;
и pictureBox1.Image = image.Bitmap;
"Image" не содержит определения для "Bitmap", и не удалось найти доступный метод расширения "Bitmap", принимающий тип "Image" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).

В чем может быть проблема, вроде все библиотеки и директивы подключил
...
Рейтинг: 0 / 0
Захват видео с камеры и сохранение фото
    #39936788
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erleug, а с чего вы взяли что такой метод/свойство есть?
...
Рейтинг: 0 / 0
Захват видео с камеры и сохранение фото
    #39936792
erleug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
buser,

с урока, по которому делал данный пример
...
Рейтинг: 0 / 0
Захват видео с камеры и сохранение фото
    #39936809
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erleug, возможно, в используемой вами версии нет такого... может есть метод .ToBitmap()...
...
Рейтинг: 0 / 0
Захват видео с камеры и сохранение фото
    #39936980
erleug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
buser,

решилось путем отката Emgu на более старую версию, на новой что-то похожее так и не нашел, видимо там другая структура
...
Рейтинг: 0 / 0
Захват видео с камеры и сохранение фото
    #39936988
erleug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
только появилась другая проблема, фронтальная камера работает нормально на планшете, а основная не запускает поток. Не понятно в чем причина
...
Рейтинг: 0 / 0
Захват видео с камеры и сохранение фото
    #39937030
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erleug, вы бы всеж взяли пакетик посвежее... ну и разобрались бо что к чему...
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Захват видео с камеры и сохранение фото
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]