VisionPro二次开发学习笔记2-使用C#从图像数据库文件获取图像

使用C#从图像数据库文件获取图像

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

  • 对CDB / IDB文件使用CogImageFileCDB对象
  • 将CogImageFileBMP对象用于位图文件
  • 对TIFF文件使用CogImageFileTIFF对象

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

  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;elsereturn 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对象。
后台代码改动如下:

        private int counter;private int maxImages;private CogImageFile ImageFile;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();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/395851.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谈对象系列:C++类和对象

文章目录 一、类的定义1.1类定义的格式类的两种定义方法结构体&#xff1a; 1.2访问限定符1.3类域 二、实例化2.1变量的声明和定义2.2类的大小计算空类的大小&#xff08;面试&#xff09;&#xff1a; 三、this指针小考题 一、类的定义 1.1类定义的格式 使用class关键字&…

使用开源 LLM 充当 LangChain 智能体

太长不看版 开源 LLM 现已达到一定的性能水平&#xff0c;可堪作为智能体工作流的推理引擎。在我们的测试基准上&#xff0c;Mixtral 甚至已超越 GPT-3.5&#xff0c;而且我们还可以通过微调轻松地进一步提高其性能。 引言 经由因果语言建模任务训练出的大语言模型&#xff…

【电控笔记z56】ADRC回路设计(与smo比较)

用在IPM ADRC 估测反电动势 参数变动 : 内部扰动 SMO : 有高频成分 需要低通滤波器滤去 - 需要补偿延迟 两轴同步旋转坐标下做adrc adrc适合去做变化速度比较低的扰动 ADRC : 估测高速变化的扰动 , 需要修改估测器 电机模型 Ld不等于Lq 式7如下蓝色框图 eso等效成一个纯积分…

Stable Diffusion绘画 | 提示词格式

推荐格式 提升画质的提示词与画风的提示词&#xff0c;对整体画面影响较大&#xff0c;建议在首行填写 画质词画风词画面主体描述环境、场景、灯光、构图Lora负面词 画质词 常规画质词&#xff1a; (masterpiece:1.2),best quality,highres,extremely detailed CG,perfect…

Jenkins部署java项目

文章目录 引言I Jenkins 配置系统配置Maven 配置添加gitea凭据II 新建部署任务(maven)构建触发器构建环境Post StepsIII Jar包部署为linux系统服务创建systemd服务创建jar启动脚本IV java激活指定环境的Profile文件命令行指定配置指定环境下的nacos配置Dockerfile指定具体环境…

kmp算法(c++)

kmp算法的简单介绍 从主串中快速找到与要找的串的相同位置 如果使用暴力算法去求解这个问题&#xff0c;时间复杂度为O(i*j) > 很大 kmp算法则是对这类问题的优化 因整理过于麻烦&#xff0c;&#xff0c;详细的介绍可以参照这篇博客&#xff0c;&#xff0c;花时间看完就明…

第二十一节、敌人追击状态的转换

一、物理检测中的Boxcast 1、检测敌人Bool 当不知道一个函数的返回值是什么的时候 定义一个var变量 就知道了 二、状态切换 1、switch用法 2、新的语法糖写法

【MySQL】数据基本的增删改查操作

新增数据&#xff08;Create&#xff09; 在MySQL中&#xff0c;增加数据的操作主要使用 INSERT 语句。下面我们将分为两部分&#xff1a;单行数据插入和多行数据插入。 一、单行数据插入 全列插入&#xff1a; 当你要插入一行数据到表中并且要提供所有列的值时&#xff0c;可…

jmeter-beanshell学习16-自定义函数

之前写了一个从文件获取指定数据&#xff0c;用的时候发现不太好用&#xff0c;写了一大段&#xff0c;只能取出一个数&#xff0c;再想取另一个数&#xff0c;再粘一大段。太不好看了&#xff0c;就想到了函数。查了一下确实可以写。 public int test(a,b){return ab; } ctes…

剖析HTML 元素——WEB开发系列02

HTML元素是构成HTML文档结构的基本单位&#xff0c;定义了页面上的不同部分和内容。HTML元素可以包含不同类型的内容&#xff0c;如文本、图片、链接、表格等&#xff0c;每种元素都有其特定的用途和语义。通过组合和嵌套不同的HTML元素&#xff0c;可以创建复杂的网页结构和布…

java之如何爬取本地数据(利用正则表达式)

public class RegexDemo4 {public static void main(String[] args) {String s"程序员学习java&#xff0c;""电话&#xff1a;181512516758&#xff0c;18512508907" "或者联系邮箱&#xff1a;boniuitcast.cn&#xff0c;""座机电话&…

脱胎于 S 语言的R语言,Ross Ihaka 和 Robert Gentleman 和社区的力量让 R 在学术界与研究机构放光彩

R语言从一门用于统计学教学的编程语言&#xff0c;发展成为全球数据科学领域的重要工具&#xff0c;离不开其强大的功能、丰富的社区资源和开源精神。这些都离不开Ross Ihaka 和 Robert Gentleman 和 社区的力量。 在1990年代初&#xff0c;新西兰奥克兰大学的统计学教授Ross I…

6.3.面向对象技术-设计模式

设计模式 设计模式创建型模型速记口诀 结构型设计模式速记口诀 行为型设计模式速记口诀 练习题 设计模式 上午2-4分&#xff0c;记忆点很多 要具体了解推荐看书籍《大话设计模式》 架构模式&#xff1a;软件设计中的高层决策&#xff0c;例如C/S结构就属于架构模式&#xff0…

Dopple Labs 选择 Zilliz Cloud 作为安全高效的向量数据库

一直以来&#xff0c;我都十分赞同采用通用的标准来评估机器学习领域的技术。向量数据库领域也是如此。Zilliz 发布的性能测试对我有着很大的帮助。 ——Sam Butler Dopple.AI 机器学习总监 01.Dopple AI简介 Dopple Labs Inc. 是 Dopple.AI 的原厂&#xff0c;通过提供创新…

关于进程间通信的练习

1> 使用有名管道实现,一个进程用于给另一个进程发消息,另一个进程收到消息后,展示到终端上,并且将消息保存到文件上 一份 create.c #include<myhead.h>int main(int argc, const char *argv[]) {//创建一个管道文件if(mkfifo("./linux",0664)-1){perror(&qu…

RabbitMQ docker安装

后台配置文件 rabbitmq:image: rabbitmq:latestcontainer_name: rabbitmqports:- "5672:5672" # RabbitMQ server port- "15672:15672" # RabbitMQ management console portenvironment:RABBITMQ_DEFAULT_USER: adminRABBITMQ_DEFAULT_PASS: admin 若要打…

磁盘无法访问的危机与解救:数之寻软件的数据恢复之旅

在数字时代&#xff0c;磁盘作为数据存储的核心&#xff0c;承载着我们的工作文档、珍贵照片、个人视频等无价之宝。然而&#xff0c;当您试图访问某个磁盘时&#xff0c;却遭遇了“磁盘无法访问”的提示&#xff0c;这无疑是一场突如其来的数据危机。本文将深入探讨磁盘无法访…

【Kubernetes】k8s集群资源调度

目录 一、k8s的List-Watch机制 二、scheduler的调度过程 三、指定节点调度Pod 1.通过nodeName调度Pod 2.通过节点标签选择器调度Pod 3.通过亲和性调度Pod 1&#xff09;节点亲和性 2&#xff09;Pod 亲和性 四、污点(Taint) 和 容忍(Tolerations) 1.污点(Taint) 2.…

运行pytorch报异常处理

一、问题现象及初步定位&#xff1a; 找不到指定的模块。 Error loading "D:\software\python3\Lib\site-packages\torch\lib\fbgemm.dll 此处缺少.dll文件&#xff0c;首先下载文件依赖分析工具 Dependencies https://github.com/lucasg/Dependencies/tree/v1.11.1 之后下…

【大模型学习】多模态大模型进行偏好优化

一、简介 训练模型以理解并预测人类偏好是一项复杂的任务。传统方法如SFT&#xff08;监督微调&#xff09;通常需要较高的成本&#xff0c;因为这些算法需要对数据进行特定标签的标注。偏好优化&#xff08;Preference Optimization&#xff09;作为一种替代方案&#xff0c;…