VisionPro绝大多数工具只能处理CogImage8Grey图像数据,因此在使用图像处理前,我们要确保图像正确。为了方便将其它类型图像转换为CogImage8Grey图像,康耐视提供了相应的CogImage8Grey类供我们使用。
今天有人问到怎么将图像数组数据转换为CogImage8Grey类型图像,其实通过IO流拿到的就是图像数组,C#给我们提供了相应的方法将其转换为bitmap位图,再利用康耐视提供的CogImage8Grey
类方法即可转换为visionPro处理的图像数据。
复制
public partial class Form1 : Form { public Form1() { InitializeComponent(); } byte[] imgByte; private void button1_Click(object sender, EventArgs e) { OpenFileDialog opd = new OpenFileDialog(); if (opd.ShowDialog() == DialogResult.OK) { imgByte= SaveImage(opd.FileName); } } /// <summary> /// 将图片以二进制流 /// </summary> /// <param name="path"></param> /// <returns></returns> public byte[] SaveImage(String path) { FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read); //将图片以文件流的形式进行保存 BinaryReader br = new BinaryReader(fs); byte[] imgBytesIn = br.ReadBytes((int)fs.Length); //将流读入到字节数组中 return imgBytesIn; } private void button3_Click(object sender, EventArgs e) { pictureBox1.Image = Image.FromStream(new MemoryStream(imgByte)); } private void button4_Click(object sender, EventArgs e) { CogToolGroup tgp = jobmanger.Job(0).VisionTool as CogToolGroup; CogBlobTool bt = tgp.Tools["CogBlobTool1"] as CogBlobTool; //将图像数组转换为位图 Bitmap bmp = new Bitmap(new MemoryStream(imgByte)); //将位图转换为CogImage8Grey图像 CogImage8Grey cogimg = new CogImage8Grey(bmp); bt.InputImage = cogimg; //运行visionPro工具测试 bt.Run(); ICogRecord myrdp = tgp.CreateLastRunRecord(); MessageBox.Show(bt.Results.GetBlobs().Count.ToString()); cogRecordDisplay1.Record = myrdp.SubRecords[1]; cogRecordDisplay1.AutoFit = true; } CogJobManager jobmanger; private void Form1_Load(object sender, EventArgs e) { jobmanger = CogSerializer.LoadObjectFromFile(@"C:\Users\Administrator\Desktop\356.vpp") as CogJobManager; } }
写了一个简单示例,将转换后的图像放在visionPro中运行,并没有出现任何异常。vpp文件中就一个斑点工具,通过赋值运行即可。
评论 (2)