跳到主要内容

从图像数据库文件获取图像

· 阅读需 4 分钟
fengyu

图像文件对象使您可以从图像文件获取图像,以及将获取的图像保存到图像文件中以备后用。VisionPro为图像文件对象提供了几种类,具体取决于您要使用的图像格式:

  • 对CDB / IDB文件使用CogImageFileCDB对象
  • 将CogImageFileBMP对象用于位图文件
  • 对TIFF文件使用CogImageFileTIFF对象 如果您的应用程序要求您读取多种文件类型,请使用通用的CogImageFile对象。

读取带有图像文件对象的图像文件需要执行以下步骤:

  1. 创建一个图像文件对象。
  2. 打开图像文件进行读取。
  3. 获取图像以供使用和显示。

1. 添加引用

  • Cognex.VisionPro
  • Cognex.VisionPro.ImageFile

2. 定义变量和枚举

public enum ImageFileType {
OTHER,
IDB,
CDB,
BMP,
TIFF,

}

private CogImageFileCDB myImageFileOperator;
private CogImageFileBMP myImageFileBMP;
private CogImageFileTIFF myImageFileTIFF;

private int counter;
private int maxImage;
private ImageFileType CurrentFileType;

3. 创建一个图像文件对象

private ImageFileType ConvertStringToImageFileType(string text) {
if (text.Contains(".cdb"))
return ImageFileType.CDB;
if (text.Contains(".idb"))
return ImageFileType.IDB;
if (text.Contains(".bmp"))
return ImageFileType.BMP;
if (text.Contains(".tiff"))
return ImageFileType.TIFF;
else
return ImageFileType.OTHER;
}

private void InitializeFifo() {

counter = 0;
CurrentFileType = ConvertStringToImageFileType(Path.GetExtension(textBoxFilePath.Text));
switch (CurrentFileType)
{
case ImageFileType.IDB:
case ImageFileType.CDB:
myImageFileOperator = new CogImageFileCDB();
myImageFileOperator.Open(textBoxFilePath.Text, CogImageFileModeConstants.Read);
maxImage = myImageFileOperator.Count;
break;
case ImageFileType.BMP:
myImageFileBMP = new CogImageFileBMP();
myImageFileBMP.Open(textBoxFilePath.Text,CogImageFileModeConstants.Read);
maxImage = myImageFileBMP.Count;
break;
case ImageFileType.TIFF:
myImageFileTIFF = new CogImageFileTIFF();
myImageFileTIFF.Open(textBoxFilePath.Text,CogImageFileModeConstants.Read);
maxImage = myImageFileTIFF.Count;
break;
case ImageFileType.OTHER:
maxImage = 0;
break;
default:
break;
}
;


}

4. 打开图像文件进行读取

打开Form2.cs[设计]界面,新增两个按钮,一个TextBox用于显示路径,一个label显示当前图片位置和总数,一个CogDisplay控件

界面如下:

处理按钮点击事件

private void button2_Click(object sender, EventArgs e)
{
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
// 设置文件过滤器
openFileDialog.Filter = "Image Files (*.cdb;*.idb;*.bmp;*.tiff)|*.cdb;*.idb;*.bmp;*.tiff";
openFileDialog.Title = "选择图片文件";

// 显示对话框并检查用户是否选择了文件
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
// 将选择的文件路径赋值给文本框
textBoxFilePath.Text = openFileDialog.FileName;
}
}
InitializeFifo();
}

5. 获取图像以供使用和显示

/// <summary>
/// 浏览
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
if (counter==maxImage)
{
counter = 0;

}
switch (CurrentFileType)
{
case ImageFileType.IDB:
case ImageFileType.CDB:
cogDisplay1.Image = myImageFileOperator[counter];
break;
case ImageFileType.BMP:
cogDisplay1.Image = myImageFileBMP[counter];
break;
case ImageFileType.TIFF:
cogDisplay1.Image = myImageFileTIFF[counter];
break;
case ImageFileType.OTHER:
MessageBox.Show("图片格式错误!");
break;
default:
break;
}

counter = counter + 1;
this.label1.Text = $"第{counter}张/共{maxImage}张";
}

6. 处理窗体关闭事件

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
Application.DoEvents();
cogDisplay1.Dispose();

}

总结

一个简易的图片数据库文件浏览器到这里就实现了.

扩展

如果您的应用程序要求您读取多种文件类型,可以使用通用的CogImageFile对象。 后台代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Cognex.VisionPro;
using Cognex.VisionPro.ImageFile;

namespace UsingQB
{
public partial class Form3 : Form
{
private int counter;
private int maxImages;
private CogImageFile ImageFile;
public Form3()
{
InitializeComponent();
}
private void InitializeFifo() {
ImageFile = new CogImageFile();
ImageFile.Open(textBoxFilePath.Text,CogImageFileModeConstants.Read);
counter = 0;
maxImages = ImageFile.Count;
}

private void button1_Click(object sender, EventArgs e)
{
if (ImageFile==null)
{
MessageBox.Show("没有输入图像!");
}
if (counter == maxImages)
{
counter = 0;
}
cogDisplay1.Image = ImageFile[counter];
counter = counter + 1;
label1.Text = $"第{counter}/{maxImages}张";
}

private void button2_Click(object sender, EventArgs e)
{
using (OpenFileDialog fileDialog=new OpenFileDialog())
{
if (fileDialog.ShowDialog()==DialogResult.OK)
{
textBoxFilePath.Text = fileDialog.FileName;
}
}
InitializeFifo();
}
}
}