Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 316

Emgu cv выбор разрешения камеры и создание фото

24.10.2019, 14:01. Показов 3665. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. По примерам собрал приложение, которое пишет видео и делает фото. Также можно выбрать вебкамеру, с которой будет вестись запись. Однако застрял на вопросе с выбором разрешения камеры и получением списка всех возможных разрешений, с которыми может работать камера. Возможно ли получить такой список в данной библиотеке? (В библиотеке Aforge это было возможно). Также сделал возможность сохранения фото, но полученное фото имеет большой вес, как можно автоматически ужать его? Или имеется другой способ получения фото.

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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
    public partial class Form1 : Form
    {
 
        Video_Device[] WebCams; //List containing all the camera available
        private Capture _capture = null; //Camera
 
        double FrameRate = 0;
 
        VideoWriter VW;
        Stopwatch SW;
 
        int Frame_width;
        int Frame_Height;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button_write_Click(object sender, EventArgs e)
        {
            if (Camera_Selection.Items.Count != 0)
            {
                string FileVideo = String.Format("333.avi"); 
 
                try
                {
                    //set up new capture
                    _capture = new Capture(Camera_Selection.SelectedIndex); //Use the default device 
                    _capture.ImageGrabbed += ProcessFrame_Video; //attach event call to process frames
 
                    //get/set the capture video information
 
                    Frame_width = 640;
                    Frame_Height = 480;
 
                    Size videoSize = new Size(Frame_width, Frame_Height);
 
                    FrameRate = 25; //Set the framerate manually as a camera would retun 0 if we use GetCaptureProperty()
 
                    //int Codec = CvInvoke.CV_FOURCC('D', 'I', 'V', '4');
 
                    VW = new VideoWriter(FileVideo, VideoWriter.Fourcc('X', '2', '6', '4'), (int)FrameRate, videoSize, true);
 
                    SW = new Stopwatch();
                    SW.Start();
 
                    _capture.Start();
                }
                catch (NullReferenceException excpt)
                {
                    MessageBox.Show(excpt.Message);
                }
            }
            else
            {
                MessageBox.Show("Подключите камеру!!!");
            }
            
        }
 
        private void button_stop_Click(object sender, EventArgs e)
        {
            //check to see if we have disposed of the video before
            SW.Stop();
            if (VW.Ptr == IntPtr.Zero)
            {
                //explain to the user what's happening
                MessageBox.Show("VideoWriter has been finilised, please re-initalise a video file");
                //lets re-call the recordVideoToolStripMenuItem_Click to save on programing
            }
            _capture.Stop(); //Stop urrent capture if running 
            _capture.Dispose();//dispose of current capture
            VW.Dispose();
            imageBox1.Image = null;
        }
 
        private void ProcessFrame_Video(object sender, EventArgs arg)
        {
            Mat frameVideo = new Mat();
            _capture.Retrieve(frameVideo, 0);
 
            if (VW.Ptr != IntPtr.Zero)
            {
                try
                {
                    VW.Write(frameVideo); //If we are recording and videowriter is avaliable add the image to the videowriter 
                    UpdateTextBox("Time: " + TimeSpan.FromMilliseconds(SW.ElapsedMilliseconds).ToString(), label_time);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
 
                imageBox1.Image = frameVideo;
            }
        }
 
        private delegate void UpdateTextBoxDelegate(String Text, Label Control);
        private void UpdateTextBox(String Text, Label Control)
        {
            if (Control.InvokeRequired)
            {
                try
                {
                    UpdateTextBoxDelegate UT = new UpdateTextBoxDelegate(UpdateTextBox);
                    this.BeginInvoke(UT, new object[] { Text, Control });
                }
                catch (Exception ex)
                {
                }
            }
            else
            {
                Control.Text = Text;
                this.Refresh();
            }
        }
 
 
        private void Form1_Load(object sender, EventArgs e)
        {
            DsDevice[] _SystemCamereas = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
            WebCams = new Video_Device[_SystemCamereas.Length];
            for (int i = 0; i < _SystemCamereas.Length; i++)
            {
                WebCams[i] = new Video_Device(i, _SystemCamereas[i].Name, _SystemCamereas[i].ClassID); //fill web cam array
                Camera_Selection.Items.Add(WebCams[i].ToString());
            }
            if (Camera_Selection.Items.Count > 0)
            {
                Camera_Selection.SelectedIndex = 0; //Set the selected device the default
            }
        }
 
        private void button_savePhoto_Click(object sender, EventArgs e)
        {
            Bitmap bmp1 = new Bitmap(imageBox1.Image.Bitmap);
            bmp1.Save("123.jpeg");
        }
    }
 
    struct Video_Device
    {
        public string Device_Name;
        public int Device_ID;
        public Guid Identifier;
 
        public Video_Device(int ID, string Name, Guid Identity = new Guid())
        {
            Device_ID = ID;
            Device_Name = Name;
            Identifier = Identity;
        }
 
        public override string ToString()
        {
            return String.Format("[{0}] {1}: {2}", Device_ID, Device_Name, Identifier);
        }
    }
Добавлено через 1 час 2 минуты
С фото разобрался
Теперь бы понять как с разрешением разобраться, возможно кто-нибудь сталкивался с этим?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.10.2019, 14:01
Ответы с готовыми решениями:

Нет разрешения на открытие фото
На ПК была windows xp, на флешку скинул фотки, систему переустановил на windows 10, на флешке фотки не открываются, пишет следущее: ...

Печать фото на листе A4, независимо от его разрешения
У кого нибудь есть положительный опыт печати фото? (навроде печати изображений Windows)

Фото с камеры (Android)
Не могу сделать фото, Осипов утверждает, что просто cameracomponent.Active:=true и после того как юзер сделает фото, отловить событие. Но...

1
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 316
28.10.2019, 15:09  [ТС]
Весь интернет обыскал, но так и не нашел метода, чтобы получить список всех возможных разрешений в библиотеке emgu cv
Так полагаю, можно выкрутиться, если получить список камер с помощью одной библиотеки, а ее разрешения другой библиотекой. Однако, если использовать две веб-камеры, то в разных библиотеках они определяются разным списком.

Добавлено через 4 часа 29 минут
Я немного ошибся, список камер я получаю, используя библиотеку DirectShowLib-2005.dll. Значит из нее и можно получить список камер. Нашел в инете пример. Но не знаю как вызвать эту функцию и вывести полученные разрешения в combobox. Подскажите, пожалуйста.
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
private List<string> GetAllAvailableResolution(DsDevice vidDev)
{
   try
   {
     int hr, bitCount = 0;
 
     IBaseFilter sourceFilter = null;
 
     var m_FilterGraph2 = new FilterGraph() as IFilterGraph2;
     hr = m_FilterGraph2.AddSourceFilterForMoniker(vidDev.Mon, null, vidDev.Name, out sourceFilter);
     var pRaw2 = DsFindPin.ByCategory(sourceFilter, PinCategory.Capture, 0);
     var AvailableResolutions = new List<string>();
 
     VideoInfoHeader v = new VideoInfoHeader();
     IEnumMediaTypes mediaTypeEnum;
     hr = pRaw2.EnumMediaTypes(out mediaTypeEnum);
 
     AMMediaType[] mediaTypes = new AMMediaType[1];
     IntPtr fetched = IntPtr.Zero;
     hr = mediaTypeEnum.Next(1, mediaTypes, fetched);
 
     while (fetched != null && mediaTypes[0] != null)
     {
       Marshal.PtrToStructure(mediaTypes[0].formatPtr, v);
       if (v.BmiHeader.Size != 0 && v.BmiHeader.BitCount != 0)
       {
         if (v.BmiHeader.BitCount > bitCount)
         {
           AvailableResolutions.Clear();
           bitCount = v.BmiHeader.BitCount;
         }
         AvailableResolutions.Add(v.BmiHeader.Width +"x"+ v.BmiHeader.Height);
       }
       hr = mediaTypeEnum.Next(1, mediaTypes, fetched);
     }
     return AvailableResolutions;
   }
   catch (Exception ex)
   {
     MessageBox.Show(ex.Message);
     return new List<string>();
   }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.10.2019, 15:09
Помогаю со студенческими работами здесь

Некорректный размер фото с камеры
доброго времени всем. возникла у меня проблемка, делаю я фото с камеры но оно получается очень маленького размера в камере стоит параметр...

Наложение на фото с камеры png маски
Всем привет, есть программка, делает фото с ip камеры onvif, как сделать чтобы в настройках можно было выбрать файл png и использовать как...

Добавить фото в TImage с камеры телефона
Добрый вечер. Пытаюсь добавить фото с камеры в TImage но не чего не выходит - и ошибок нет и картинки тоже... Подскажите тчо не так делаю. ...

Как сделать фото с встроенной веб-камеры?
Здравствуйте! Недавно появилась задача сделать программу (на ассемблере), которая бы подключалась к веб-камере, делала фото с неё,...

Указать путь сохранения фото с веб камеры
char filename; void SaveImage() { // сохраняем кадр в файл sprintf(filename, &quot;Image%d.bmp&quot;, counter); printf(&quot; Сделан...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru