当前位置: 首页 > news >正文

在C#中初测OpencvSharp4

一、配置OpenCV

首先,我们新建一个工程,然后就是给这个工程配置OpenCV了,最简单的方法还是Nuget,来我们右键一个Nuget:
在这里插入图片描述
打开Nuget后,你可以直接输入OpenCVSharp4来查找,当然,如果你只是输入OpenCV那显示的选项足够使你眼花缭乱。这里我们还是直接一些输入OpenCVSharp4,直接安装箭头所指四个。
在这里插入图片描述

二、尝试调用OpenCV

第一个程序,我们暂时不做图形识别,这里就看看我们的opencv是否可以工作了,我们做一个图片灰度化的程序,首先记得引入OpenCvSharp

using OpenCvSharp;
private void button1_Click(object sender, EventArgs e){String fname=String.Empty;OpenFileDialog ofd = new OpenFileDialog();if (ofd.ShowDialog() == DialogResult.OK)fname=ofd.FileName;Mat mat = new Mat(fname);Mat gmat = new Mat();Cv2.CvtColor(mat, gmat, ColorConversionCodes.BGR2GRAY);Cv2.ImShow(fname, gmat);Cv2.WaitKey();     }

我们随意打开一张下载的图(一张arduino板子的图),给取了灰度化
在这里插入图片描述

三、初步处理

我们拿局部做一个处理,这里用Canny对轮廓进行识别,测试代码如下:

 String fname=String.Empty;OpenFileDialog ofd = new OpenFileDialog();if (ofd.ShowDialog() == DialogResult.OK)fname=ofd.FileName;if(fname!=String.Empty){pictureBox1.Image =new Bitmap(fname);Mat mat = new Mat(fname);Mat gmat = new Mat();Cv2.CvtColor(mat, gmat, ColorConversionCodes.BGR2GRAY);Cv2.Canny(mat, gmat, 100, 200);pictureBox2.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(gmat);}

效果如下
在这里插入图片描述

到这里,我们的OpenCv算是开张了,后面的工作就是识别啦。

四、显示在PictureBox上

显示在picturebox控件上,并且让图片居中显示。注意,这里一定要安装OpenCVSharp4.Extensions,否则无法获得BitmapConverter.ToBitmap函数。

pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
pictureBox2.SizeMode = PictureBoxSizeMode.CenterImage;
pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
pictureBox2.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(gmat);

在这里插入图片描述
当然,现在这里的图片显示位置是固定的,对于观察识别的区域不太方便,我们下一篇博文,我们考虑实现在PictureBox内移动,效果如下:
在这里插入图片描述
感兴趣的童鞋可以继续关注。

http://www.lryc.cn/news/19475.html

相关文章:

  • 洛谷P1123 取数游戏(C++)(DFS)
  • Python Qt6快速入门-嵌入PyQtGraph图表
  • Mac电脑_GitHub提交项目至仓库
  • Android自定义View实现横向的双水波纹进度条
  • Python 之 Pandas 分组操作详解和缺失数据处理
  • 【人工智能 AI】什么是人工智能? What is Artificial Intelligence
  • 17、触发器
  • 内核并发消杀器(KCSAN)技术分析
  • 蓄水池抽样算法
  • 数据结构预算法之买股票最好时机动态规划(可买卖多次)
  • 华为OD机试真题Java实现【蛇形矩阵】真题+解题思路+代码(20222023)
  • spring Bean的生命周期 IOC
  • 详解cors跨域
  • ARM uboot 源码分析7 - uboot的命令体系
  • 物理服务器与云服务器备份相同吗?
  • 【Linux】system V共享内存 | 消息队列 | 信号量
  • FSC的宣传许可 答疑
  • Leetcode力扣秋招刷题路-0100
  • 协作对象死锁及其解决方案
  • 良许也成为砖家啦~
  • Java中的编程细节
  • Yolov8从pytorch到caffe (一) 环境搭建
  • 2023年CDGA考试-第16章-数据管理组织与角色期望(含答案)
  • Stream——集合数据按照某一字段排序
  • ubuntu:20.04编译arrow
  • 2023如果纯做业务测试的话,在测试行业有出路吗?
  • golang grpc ssl
  • 华为服务器驱动下载及安装
  • 【Shell】常用命令合集
  • 15- 答题卡识别及分数判定项目 (OpenCV系列) (项目十五)