效果
项目
代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using OpenCvSharp;namespace OpenVino_Yolov8_Demo
{public partial class Form1 : Form{public Form1(){InitializeComponent();}string fileFilter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";string image_path = "";String startupPath;string classer_path;DateTime dt1 = DateTime.Now;DateTime dt2 = DateTime.Now;String model_path;Core core;Mat image;private void button1_Click(object sender, EventArgs e){OpenFileDialog ofd = new OpenFileDialog();ofd.Filter = fileFilter;if (ofd.ShowDialog() != DialogResult.OK) return;pictureBox1.Image = null;image_path = ofd.FileName;pictureBox1.Image = new Bitmap(image_path);textBox1.Text = "";image = new Mat(image_path);}private void button2_Click(object sender, EventArgs e){if (image_path == ""){return;}// 配置图片数据Mat image = new Mat(image_path);int max_image_length = image.Cols > image.Rows ? image.Cols : image.Rows;Mat max_image = Mat.Zeros(new OpenCvSharp.Size(max_image_length, max_image_length), MatType.CV_8UC3);Rect roi = new Rect(0, 0, image.Cols, image.Rows);image.CopyTo(new Mat(max_image, roi));float[] det_result_array = new float[8400 * 116];float[] proto_result_array = new float[32 * 160 * 160];float[] factors = new float[4];factors[0] = factors[1] = (float)(max_image_length / 640.0);factors[2] = image.Rows;factors[3] = image.Cols;byte[] image_data = max_image.ImEncode(".bmp");//存储byte的长度ulong image_size = Convert.ToUInt64(image_data.Length);// 加载推理图片数据core.load_input_data("images", image_data, image_size, 1);dt1 = DateTime.Now;// 模型推理core.infer();dt2 = DateTime.Now;// 读取推理结果det_result_array = core.read_infer_result<float>("output0", 8400 * 116);proto_result_array = core.read_infer_result<float>("output1", 32 * 160 * 160);SegmentationResult result_pro= new SegmentationResult(classer_path, factors);Mat result_image = result_pro.draw_result(result_pro.process_result(det_result_array, proto_result_array), image.Clone());pictureBox2.Image = new Bitmap(result_image.ToMemoryStream());textBox1.Text = "耗时:" + (dt2 - dt1).TotalMilliseconds + "ms";}private void Form1_Load(object sender, EventArgs e){startupPath = System.Windows.Forms.Application.StartupPath;model_path = startupPath + "\\yolov8n-seg.onnx";core = new Core(model_path, "CPU");classer_path = "yolov8-detect-lable.txt";}private void Form1_FormClosing(object sender, FormClosingEventArgs e){core.delet();}}
}
完整Demo下载
exe程序下载
exe程序说明:
1、运行路径中不能包含中文,否则模型加载不成功,程序无法运行
2、如果提示“无法加载 DLL“OpenVinoSharpExtern.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。”,请使用depends22_x64等工具查找缺失的依赖库并添加。