Создание программы, которая позволяет использовать камеру
Системное программирование на языке высокого уровня С#. Разработка спецификаций функций камеры. Выбор пути сохранения фотографий. Работа с веб-камерой на простейшем уровне. Сохранение текущей фотографии. Наложение фильтра, текстуры на изображение.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 25.03.2015 |
Размер файла | 2,2 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
ВВЕДЕНИЕ
В настоящее время домашний компьютер или ноутбук сложно представить без веб-камеры, ведь это не только средство развлечения, которое широко распространено среди молодежи, использующей устройство в социальных сетях. Веб-камера может также использоваться как охранное устройство, которое известит вас о проникновении злоумышленника, к примеру, в ваш гараж; веб-камера может использоваться для проведения важных совещаний крупной компании, филиалы которой расположены в различных странах.
Цель работы - создать программу, которая позволяет использовать камеру на самом простейшем уровне: сохранение фото.
1. Системное проектирование
Для разработки программы использовался язык высокого уровня программирования С#.
Для работы программы требуется PC совместимый компьютер и установленный .NET Framework версии 2.0 или выше и, конечно же, веб-камера с установленными драйверами последней версии. При использовании иного сочетания характеристик системы, на которой будет использоваться программа, возможны некоторые расхождения с результатами работы.
1.1 Разработка спецификаций функций
Для решения поставленных задач необходимо разработать следующие методы:
· private void start()
o Метод, запускающее выбранное видеоустройство;
· private void pause()
o Метод, приостанавливающий запущенное видеоустройство;
· private void stop()
o Метод, останавливающий запущенное видеоустройство, высвобождение занятых ресурсов;
· private void ApplyFilter(IFilter filter)
o Метод, применяемый выбранный фильтр на изображение;
· private void paramCam()
o Метод, вызывающий параметры выбранной веб-камеры;
· private void checked_changer()
o Метод, который снимает «галочки» со всех фильтров/текстур в меню.
Так как разрабатываемая программа состоит из подпрограмм, то реализация вышеописанных методов на языке С# представлена в Приложении.
2. ФУНКЦИОНАЛЬНОЕ ПРОЕКТИРОВАНИЕ
2.1 Разработка меню
Главное меню программы имеет следующую структуру:
Рис. 1 Структура главного меню программы
2.2 Результаты тестирования приложения, используемые тесты
Протестировать функционирование всего приложения по пунктам меню (Рис. 1).
Рис. 2 Главное окно программы
Для выбора пути сохраняемых фотографий используется еще одна форма (Form2), которая имеет вид, отображенный на рисунке 3.
Рис. 3 Окно выбора пути сохранения фотографий
Для демонстрации, применим к исходному изображению фильтр «Негатив» (Рис. 4) и текстуру «Облака» (Рис. 5).
Рис. 4 Наложение фильтра «Негатив»
Рис. 5 Наложение текстуры «Облака»
Для вызова параметров выбранного устройства используется кнопка «Параметры камеры» (Рис. 6).
Рис. 6 Окно «Параметры камеры»
3. ОПИСАНИЕ ПРИЛОЖЕНИЯ, ИНСТРУКЦИЯ ПО ЕГО ИСПОЛЬЗОВАНИЮ
Программа предназначена для работы с веб-камерой на простейшем уровне. Подробное описание работы с программой приведено в п.2.2. Для нормального функционирования необходимы установленные библиотеки .NET Framework версии 2.0 или выше, веб-камера с установленными драйверами последней версии.
При запуске программы камера сразу же запускается и начинает отображать полученное изображение в главном окне программы. Используемое по умолчанию устройство - первое устройство в списке всех установленных. Из списка, по желанию, можно выбрать другое устройство, изображение которого пользователь желает наблюдать.
Для того, чтобы сохранять фотографии необходимо сперва выбрать путь сохранения из главного меню программы (см. Рис. 3). После закрытия диалогового окна, в текстовой строке отображается выбранный пользователем путь. Если пользователь изъявит желание изменить путь, то он сможет спокойно сделать это в ходе работы с программой.
Для сохранения текущей фотографии (без применения фильтра/текстуры) пользователь должен нажать кнопку «Фото», после чего программа сохранит текущий кадр по выбранному заранее пути. Причем имя фотографии будет уникальным, что не позволит «затирать» старые фотографии. Минус лишь в том, что пользователь не должен удалять файлы из выбранного каталога, иначе «затирание» неизбежно, так как сохранение фотографий и придание файлу фотографии уникального имени основывается на подсчете количества файлов в выбранной директории.
Для наложения фильтра/текстуры на изображение пользователь сначала должен нажать на кнопку «Пауза», затем из главного меню выбрать необходимый фильтр/текстуру. Для сохранения изображения, на которое наложен фильтр/текстура также необходимо нажать кнопку «Фото».
ЗАКЛЮЧЕНИЕ
Мной разработана программа, позволяющая использовать веб-камеру в качестве фотоаппарата. При желании, можно дописать программу тем самым расширив функциональность. Программа позволяет:
· Накладывать фильтры на изображение;
· Накладывать текстуры на изображение;
· Сохранять фотографии с камеры в файл;
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Лабор, В.В. Создание приложений для Windows: учеб. пособие /В.В. Лабор. - Минск: Харвест, 2003. - 383 с.
2. Троелсен, Э. C# и платформа .NET. Библиотека программиста: научн. лит-ра /Э. Троелсен. - СПб: Питер, 2004. - 796 с.
ПРИЛОЖЕНИЕ
камера изображение программирование текстура
Листинг программы :
Form1.cs (Главное окно программы):
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Configuration;
using System.IO;
using AForge.Video.DirectShow;
using AForge.Imaging;
using AForge.Imaging.Filters;
using AForge.Controls;
using AForge.Imaging.Textures;
namespace WindowsFormsApplication10
{
public partial class Form1 : Form
{
Bitmap image_1;
Bitmap filtered_image;
FilterInfoCollection v_Devices;
VideoCaptureDevice vcd;
public Form1()
{
InitializeComponent();
v_Devices= new FilterInfoCollection(FilterCategory.VideoInputDevice);
if (v_Devices.Count == 0)
{
MessageBox.Show("Устройств не обнаружено", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
for (int i = 1, n = v_Devices.Count; i <= n; i++)
{
string cameraName = v_Devices[i - 1].Name;
combo_box_for_devices.Items.Add(cameraName);
}
combo_box_for_devices.SelectedIndex = 0;
}
private void start()
{
vcd = new VideoCaptureDevice(v_Devices[0].MonikerString);
vcd.DesiredFrameRate = 25;
videoSourcePlayer1.VideoSource = vcd;
videoSourcePlayer1.Start();
pauseButton.Enabled = true;
checked_changer();
}
private void pause()
{
vcd.SignalToStop();
checked_changer();
Filter_TSM.Enabled = true;
none_TMS.Checked = true;
}
private void stop()
{
videoSourcePlayer1.SignalToStop();
videoSourcePlayer1.WaitForStop();
videoSourcePlayer1.Dispose();
pictureBox1.Image = null;
Filter_TSM.Enabled = false;
pauseButton.Enabled = false;
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
stop();
}
private void videoSourcePlayer1_NewFrame(object sender, ref Bitmap image)
{
pictureBox1.Image = image;
image_1 = (Bitmap)pictureBox1.Image;
}
private void ApplyFilter(IFilter filter)
{
checked_changer();
filtered_image = filter.Apply(image_1);
pictureBox1.Image = filtered_image;
}
private void paramCam()
{
if (vcd != null && vcd is VideoCaptureDevice)
{
vcd.DisplayPropertyPage(this.Handle);
}
else
{
MessageBox.Show("Данное видеоустройство не имеет настроек", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
}
}
private void выходToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
private void выбратьПутьToolStripMenuItem_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.ShowDialog();
this.label1.Text = form2.photoPath_textBox.Text;
}
private void button6_Click(object sender, EventArgs e)
{
Filter_TSM.Enabled = false;
none_TMS.Checked = false;
start();
}
private void checked_changer()
{
none_TMS.Checked = false;
ch_bel_TSM.Checked = false;
sepia_TSM.Checked = false;
invert_TSM.Checked = false;
labyrinth_TSM.Checked = false;
textile_TSM.Checked = false;
wood_TSM.Checked = false;
marble_TSM.Checked = false;
cloud_TSM.Checked = false;
}
private void параметрыКамерыToolStripMenuItem_Click(object sender, EventArgs e)
{
paramCam();
}
private void Form1_Load(object sender, EventArgs e)
{
start();
}
private void pauseButton_Click(object sender, EventArgs e)
{
pause();
}
private void запуститьToolStripMenuItem_Click(object sender, EventArgs e)
{
if (videoSourcePlayer1 == null)
{
start();
}
else { MessageBox.Show("Нельзя запустить камеру дважды. Это повлияет на работу системы в целом.", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Stop); }
}
private void приостановитьToolStripMenuItem_Click(object sender, EventArgs e)
{
pause();
}
private void остановитьToolStripMenuItem_Click(object sender, EventArgs e)
{
stop();
}
private void ch_bel_TSM_Click(object sender, EventArgs e)
{
ApplyFilter(Grayscale.CommonAlgorithms.BT709);
ch_bel_TSM.Checked = true;
}
private void sepia_TSM_Click(object sender, EventArgs e)
{
ApplyFilter(new Sepia());
sepia_TSM.Checked = true;
}
private void invert_TSM_Click(object sender, EventArgs e)
{
ApplyFilter(new Invert());
invert_TSM.Checked = true;
}
private void none_TMS_Click(object sender, EventArgs e)
{
checked_changer();
none_TMS.Checked = true;
pictureBox1.Image = image_1;
}
private void лабиринтToolStripMenuItem_Click(object sender, EventArgs e)
{
ApplyFilter(new Texturer(new LabyrinthTexture(), 1.0, 0.8));
labyrinth_TSM.Checked = true;
}
private void textile_TSM_Click(object sender, EventArgs e)
{
ApplyFilter(new Texturer(new TextileTexture(), 0.8, 0.2));
textile_TSM.Checked = true;
}
private void cloud_TSM_Click(object sender, EventArgs e)
{
ApplyFilter(new Texturer(new CloudsTexture(), 1.0, 0.8));
cloud_TSM.Checked = true;
}
private void marble_TSM_Click(object sender, EventArgs e)
{
ApplyFilter(new Texturer(new MarbleTexture(), 1.0, 0.8));
marble_TSM.Checked = true;
}
private void wood_TSM_Click(object sender, EventArgs e)
{
ApplyFilter(new Texturer(new WoodTexture(), 1.0, 0.8));
wood_TSM.Checked = true;
}
private void стартToolStripMenuItem_Click(object sender, EventArgs e)
{
if (videoSourcePlayer1 == null)
{
start();
}
else { MessageBox.Show("Нельзя запустить камеру дважды. Это повлияет на работу системы в целом.", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Stop); }
}
private void паузаToolStripMenuItem_Click(object sender, EventArgs e)
{
pause();
}
private void параметрыКамерыToolStripMenuItem1_Click(object sender, EventArgs e)
{
paramCam();
}
private void запуститьToolStripMenuItem1_Click(object sender, EventArgs e)
{
if (videoSourcePlayer1 == null)
{
start();
}
else { MessageBox.Show("Нельзя запустить камеру дважды. Это повлияет на работу системы в целом.", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Stop); }
}
private void приостановитьToolStripMenuItem1_Click(object sender, EventArgs e)
{
pause();
}
private void остановитьToolStripMenuItem1_Click(object sender, EventArgs e)
{
stop();
}
private void photoButton_Click(object sender, EventArgs e)
{
int NumOfFiles = 0;
if (label1.Text != "")
{
string[] path = Directory.GetFiles(label1.Text);
NumOfFiles += path.Length;
}
else
{
MessageBox.Show("Путь не выбран. Выберите путь для сохранения фото", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
string NameOfPhoto = label1.Text + "\\Супер фото" + NumOfFiles + ".jpeg";
pictureBox1.Image.Save(NameOfPhoto, ImageFormat.Jpeg);
}
}
}
Form2.cs (Окно выбора пути сохранения):
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication10
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
photoPath_textBox.Enabled = false;
}
private void button1_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() == DialogResult.OK)
{
photoPath_textBox.Text = fbd.SelectedPath;
}
}
private void button1_Click_1(object sender, EventArgs e)
{
string noText = "";
if (photoPath_textBox.Text != noText)
{
this.Close();
}
else if (photoPath_textBox.Text == noText)
{
MessageBox.Show("Сначала выберите путь для сохранения ваших фото", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
}
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
Размещено на Allbest.ru
Подобные документы
Особенности вывода на экран содержимого файла BAZA.txt. Анализ функций вывода информации о количестве каждой марки машин. Рассмотрение способов проектирования тестов программы методами черного ящика. Проблемы программирования на языке высокого уровня.
контрольная работа [1,6 M], добавлен 04.01.2015Разработка программы обработки изображений, позволяющей прорисовывать типовые геометрические фигуры. Выбор аппаратных и технических средств для реализации программного продукта. Организация входных и выходных данных. Блок-схема и листинг программы.
курсовая работа [2,4 M], добавлен 18.06.2014Системный подход к программированию в операционных системах. Разработка программы, выполняющей запуск программ по расписанию. Понятие интерфейса и его назначение. Создание алгоритма и программы на его базе. Текст программы и руководство пользователя.
курсовая работа [581,0 K], добавлен 13.11.2009Разработка программы с использованием принципов объектно-ориентированного программирования на языке высокого уровня С средствами Microsoft Visual Studio 2010. Построение алгоритма реализации. Класс программы, инструкция по использованию программы.
курсовая работа [1,0 M], добавлен 26.12.2013Разработка комплекса алгоритмов. Кодирование и компиляция. Тестирование, отладка, испытание и сдача программы. Минимальные системные требования для использования Delphi 7. Написание программы с использованием инструментального языка высокого уровня.
курсовая работа [2,7 M], добавлен 21.02.2011Исследование классификации компьютерных игр, двигателей прогресса индустрии для персональных компьютеров. Характеристика общей структуры, протокола и текста программы, сценария и процесса игры. Изучение алгоритмизации и программирования на языке Паскаль.
реферат [2,1 M], добавлен 16.09.2011Описание функций, использующихся в программах. Основы 32-битного программирования на языке Assembler для ОС WINDOWS. Использование функции invoke, которая позволяет намного сократить текст программы и делает приложения похожими на программы для "ЯВы".
курсовая работа [252,6 K], добавлен 20.02.2015Методы численного интегрирования. Характеристика основных составляющих структурного программирования. Решение задания на языке высокого уровня Паскаль. Построение графического решения задачи в пакете Matlab. Решение задания на языке высокого уровня C.
курсовая работа [381,7 K], добавлен 10.05.2018Сравнительный анализ языков программирования высокого уровня Си и Паскаль: структура программы, типы данных, арифметические операции, операторы ветвления и циклы. Создание программы поиска подпоследовательностей одинаковых элементов в множественном виде.
курсовая работа [78,9 K], добавлен 28.12.2012Составление программы. Среда Delphi - механизм, обеспечивающий эффективную работу программиста. Составление программы, которая выводит для выбираемой единицы измерения (километры в час, мили в час или узлы) значение скорости в других единицах измерения.
курсовая работа [684,0 K], добавлен 04.02.2009