//声明全局函数
private FilterInfoCollection videoDevices; private VideoCaptureDevice videoSource; private static int jj;
//Aforge调用摄像头
private void Form1_Load(object sender, EventArgs e) { videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); if (videoDevices.Count == 0) { throw new ApplicationException(); } foreach(FilterInfo device in videoDevices) { comboBox1.Items.Add(device.Name); } comboBox1.SelectedIndex = 0; }//链接摄像头
private void button1_Click(object sender, EventArgs e) { CameraConn(); } private void CameraConn() { VideoCaptureDevice videoSource = new VideoCaptureDevice(videoDevices[comboBox1.SelectedIndex].MonikerString); videoSourcePlayer1.VideoSource = videoSource; videoSourcePlayer1.Start(); }
//捕获摄像头当前画面,生成灰度化图片
private void button2_Click_1(object sender, EventArgs e) { pictureBox1.Image= videoSourcePlayer1.GetCurrentVideoFrame(); }
//捕获摄像头当前画面,生成成二值化图片
private void button2_Click(object sender, EventArgs e) { Bitmap b = videoSourcePlayer1.GetCurrentVideoFrame(); pictureBox1.Image = ConvertTo1Bpp1(b); }
--------------------------------------------------------灰度化,二值化函数操作方法-------------------------------------------
// 图像灰度化操作函数 public static Bitmap ToGray(Bitmap bmp) { for (int i = 0; i < bmp.Width; i++) { for (int j = 0; j < bmp.Height; j++) { //获取该点的像素的RGB的颜色 Color color = bmp.GetPixel(i, j); //利用公式计算灰度值 int gray = (int)(color.R * 0.3 + color.G * 0.59 + color.B * 0.11); Color newColor = Color.FromArgb(gray, gray, gray); bmp.SetPixel(i, j, newColor); } } return bmp; }
// 图像二值化1:取图片的平均灰度作为阈值,低于该值的全都为0,高于该值的全都为255 public static Bitmap ConvertTo1Bpp1(Bitmap bmp) { int average = 0; average = 122; jj = average; //将阈值传递出来 for (int i = 0; i < bmp.Width; i++) { for (int j = 0; j < bmp.Height; j++) { //获取该点的像素的RGB的颜色 Color color = bmp.GetPixel(i, j); int value = 255 - color.B; Color newColor = value > average ? Color.FromArgb(0, 0, 0) : Color.FromArgb(255, 255, 255); bmp.SetPixel(i, j, newColor); } } return bmp; }
//用到的指令集
using AForge.Video.DirectShow; using System; using System.Drawing; using System.IO; using System.Windows.Forms;