//连接硬件的接口
ICogFrameGrabber mGrabbe = null //默认设置为空。
//声明一个相机类型的接口
ICogAcqFifo mFifo = null; //默认设置为空。
ICogImage Image = null;
//加载相机的方法,此方法在窗体加载方法中调用
private void Initel()
{
//获取已经连接的相机
CogFrameGrabbers frameGrabbers = new CogFrameGrabbers();
// 判断是否有相机,连接的相机可能不止有一个
if (frameGrabbers.Count < 1)
{
MessageBox.Show("相机未连接");
}
//现在只有一台相机 假如有多台
foreach (ICogFrameGrabber item in frameGrabbers)
{
//将相机 赋值给 接口
mGrabber = item;
//创建采集 接口。Generic GigEVision (Mono) 设置相机模式黑白图,
mFifo = item.CreateAcqFifo("Generic GigEVision (Mono)", CogAcqFifoPixelFormatConstants.Format8Grey, 0, true);
//窗体加载的时候
// 采图 完成之后 跳转
mFifo.Complete += MFifo_Complete;
}
}
//生成的事件 彩图完成之后 会自动跳转
private void MFifo_Complete(object sender, CogCompleteEventArgs e)
{
int numReadyVal, numPendingVal;
bool busyVal;
//异常处理
try
{
CogImage8Grey image = new CogImage8Grey();
CogAcqInfo info = new CogAcqInfo();
//获取一下 采集的信息
mFifo.GetFifoState(out numPendingVal , out numReadyVal, out busyVal);
//判断 采集信息 有没有
if (numReadyVal > 0)
{
//把图像设置成相机获取到的
image = mFifo.CompleteAcquireEx(info)as CogImage8Grey;
//显示图像
cogRecordDisplay1.Image = image;
images = image;
}
}
catch (Exception ex) { }
}
//通过点击事件进行采图显示,点击时调用了MFifo_Complete方法
private void button1_Click(object sender, EventArgs e)
{
// 采图 调用接口 进行采图
mFifo.StartAcquire();
}
// 因为是直接连接相机,图像显示在 没办法调节曝光之类,我们可以自己写一个
//设置曝光
private void button2_Click(object sender, EventArgs e)
{
//拿到 输入框中 输入的参数
int exps = Convert.ToInt32(textBox1.Text);
SetEx(exps);
}
// 封装一个设置曝光的方法,也可以不封装直接在button2里写
private void SetEx(int exp)
{
//设置曝光
mFifo.OwnedExposureParams.Exposure = exp;
}
// 保存图像有两种方法
//方法一 保存图像的方法 通过图像保存工具
private void WriteImage(ICogImage image)
{
// 获取当前程序的运行路径
string path = Directory.GetCurrentDirectory() + "\\图片";
//没有有文件夹 需要创建
if (!Directory.Exists(path))
{
//创建文件夹
Directory.CreateDirectory(path);
}
//定义 图像的名称
string fileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".png";
//通过图像保存工具 保存
CogImageFileTool fileTool = new CogImageFileTool();
fileTool.InputImage = image;
fileTool.Operator.Open($"{path}\\{fileName}", CogImageFileModeConstants.Write);
fileTool.Run();
}
//方法二 保存图像
private void WriteImageDate(CogRecordDisplay display)
{
// 获取当前程序的运行路径
string path = Directory.GetCurrentDirectory() + "\\图片Bitmap";
//没有有文件夹 需要创建
if (!Directory.Exists(path))
{
//创建文件夹
Directory.CreateDirectory(path);
}
//定义 图像的名称
string fileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".jpg";
// 创建Bitmap 类
Bitmap bitmap = display.CreateContentBitmap(Cognex.VisionPro.Display.CogDisplayContentBitmapConstants.Image) as Bitmap;
bitmap.Save(path+"\\"+fileName,System.Drawing.Imaging.ImageFormat.Jpeg);
}
//保存图像
private void button3_Click(object sender, EventArgs e)
{
WriteImage(images); 传入图像
WriteImageDate(cogRecordDisplay1); //方法2传入显示图像控件名称
}
//读取图像
//读取图像
private void button4_Click(object sender, EventArgs e)
{
//将读到的图像 显示到Display上
//cogRecordDisplay1.Image = ReadImage();
//第二种
cogRecordDisplay1.Image = ReadImage2();
//适应控件 大小
cogRecordDisplay1.Fit();
}
//读图片的方法一
public ICogImage ReadImage()
{
//要读的图片的路径
string path = "D:\\VisionPro 授课\\机器视觉六班\\03 第三天 几何工具 与 简单的脚本\\作业\\火花塞\\火花塞图片\\2.bmp";
// 使用图像读取工具
CogImageFileTool imageFileTool = new CogImageFileTool();
imageFileTool.Operator.Open(path, CogImageFileModeConstants.Read);
imageFileTool.Run();
return imageFileTool.OutputImage;
}
//读图片的方法二
public ICogImage ReadImage2()
{
//要读的图片的路径
string path = "D:\\VisionPro 授课\\机器视觉六班\\03 第三天 几何工具 与 简单的脚本\\作业\\火花塞\\火花塞图片\\2.bmp";
// 通过过Bitmap 来读取图像
Bitmap bimage = new Bitmap(path);
ICogImage image = new CogImage8Grey(bimage);
return image;
}
// 打开弹窗选择显示图片
private void button5_Click(object sender, EventArgs e)
{
OpenFileDialog of = new OpenFileDialog();
//of.ShowDialog();
//筛选图片格式
of.Filter = "(*.jpg;*.jpeg;*.bmp) | *.jpg;*.jpeg;*.bmp";
if (of.ShowDialog() == DialogResult.OK)
{
//拿出 选择文件的路径
string fileName = of.FileName;
CogImageFileTool imageFileTool = new CogImageFileTool();
imageFileTool.Operator.Open(fileName, CogImageFileModeConstants.Read);
imageFileTool.Run();
cogRecordDisplay1.Image = imageFileTool.OutputImage;
}
}
//读取图像
private void button4_Click(object sender, EventArgs e)
{
//将读到的图像 显示到Display上
//cogRecordDisplay1.Image = ReadImage();
//第二种
cogRecordDisplay1.Image = ReadImage2();
//适应控件 大小
cogRecordDisplay1.Fit();
}