Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2021, 10:06   #1
Andrey1702
 
Регистрация: 16.09.2021
Сообщений: 8
По умолчанию Как задать разрешение на видео сигнал с камеры?

Помогите пожалуйста, программа делает скриншоты, но разрешение камеры 1920*1080, а выходное разрешение на файле 640*480. Мне нужно чтобы на выходе было изображение с максимальным разрешением.

не смог найти адекватного решения в интернете

Код:
using DirectShowLib;
using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.CV.Util;
using Emgu.Util;
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
using Word = Microsoft.Office.Interop.Word;
using System.IO;

namespace Vision
{
    public partial class Form2 : Form
    {
        private VideoCapture capture = null;

        private DsDevice[] webCams = null;

        private int selectedCameraId;

        private readonly string TemplateFileName = @"D:\BASE\Shablon osmotra.docx";

        public Form2()
        {
            InitializeComponent();         
        }

        private void Form2_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();
        }

        //загрузка формы
        private void Form2_Load(object sender, EventArgs e)
        {
            webCams = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);

            for (int i = 0; i < webCams.Length; i++)
            {
                toolStripComboBox1.Items.Add(webCams[i].Name);
            }
        }        
        private void toolStripComboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            selectedCameraId = toolStripComboBox1.SelectedIndex;
        }    

        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.None).Bitmap;                
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void выходToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void btn_start_Click(object sender, EventArgs e)
        {
            try
            {
                if (webCams.Length == 0)
                {
                    throw new Exception("Нет доступных камер!");
                }
                else if (toolStripComboBox1.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 btn_scrennshot_Click(object sender, EventArgs e)
        {
            
            try
            {
                if (!Directory.Exists(@"D:\BASE\Images"))
                {
                    Directory.CreateDirectory(@"D:\BASE\Images");
                    MessageBox.Show("Папка для снимков создана");
                }
                else
                {
                    string path = @"D:\BASE\Images";
                    pictureBox1.Image.Save(path + @"\" + textBox_surename.Text + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second + ".jpeg", ImageFormat.Jpeg);

                }

                var panel = new TableLayoutPanel();

                panel.AutoSize = true;

                Mat m = new Mat();

                capture.Retrieve(m);

                //параметры скриншота

                var pb = new PictureBox();

                pb.Image = new Bitmap (m.ToImage<Bgr, byte>().Flip(Emgu.CV.CvEnum.FlipType.None).Bitmap);                

                pb.SizeMode = PictureBoxSizeMode.Zoom;

                pb.Name = $"SMV_{textBox_surename.Text + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second}";

                pb.Height = pb.Image.Height / 3;

                pb.Width = pb.Image.Width / 3;

                //имя

                var name = new Label();

                name.Text = $"SMV_{textBox_surename.Text + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second}";
Andrey1702 вне форума Ответить с цитированием
Старый 12.10.2021, 12:11   #2
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Код:
ret = cap.set(CV_CAP_PROP_FRAME_WIDTH, 1920);
ret = cap.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);
Учтите, что различные камеры по разному работают с разными бекэндами. Некоторым бекэндам для достижения опред. параметров их надо умножать на 3.
ForenLi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разрешение потокового видео s1ay700 Свободное общение 1 26.03.2016 20:27
улучшить видео/фото лица преступника с камеры видео наблюдения, срочно! Фандорин Помощь студентам 1 28.01.2014 10:28
Видео с камеры на поверхность DDraw Autumnus Мультимедиа в Delphi 3 31.08.2013 21:44
Запись видео с камеры на C# RIO Общие вопросы .NET 2 11.06.2010 20:50
Поток видео и аудио с камеры HarPy Мультимедиа в Delphi 0 04.03.2009 09:05