C#使用OpenCV

这篇博客介绍了如何在C#中使用OpenCVSharp进行图像处理,包括OpenCV的安装、读取图片、灰度化、高斯模糊、二值化、轮廓检测等操作,并提供了帧差法判断物体存在的代码示例。
摘要由CSDN通过智能技术生成

一、OpenCV的安装

1、需要安装两个拓展包:OpenCvSharp4和OpenCvSharp4.runtime.win

在VS中,通过其工具中自带的扩展包就安装了,不需要像C++中用opencv那样,还要配置属性。

安装步骤:工具——》Nuget包管理器——》管理解决方案的Nuget包。直接搜索opencvsharp。
在这里插入图片描述

2、出错

c# OpenCvSharp4 无法加载 DLLOpenCvSharpExtern:找不到指定的模块

在这里插入图片描述
这句话的意思是,这个包只包含内部算法的核心部分,因此,使用时还需添加OPENCV4.runtime
在这里插入图片描述
安装这个拓展包就可以使用了。

二、C#使用OpenCV的一些代码

1、需要加头文件

using OpenCvSharp;   //为了使用opencv
using Point = OpenCvSharp.Point;   //为了确定我们使用的point是opencv的而不是draw的

2、读取图片

Mat img1 = new Mat("F:\\all_truck\\truck_3.jpg", ImreadModes.Color);
Cv2.ImShow("win1", img1);
Cv2.WaitKey(0);

3、定义一个没有初始化的图片作为复制

//pBkImage是已经赋值了的图片,将这个图片复制到pBkImage_copy中
Mat pBkImage_copy = new Mat();
pBkImage.CopyTo(pBkImage_copy);

4、灰度化

CvtColor(InputArray src, OutputArray dst, ColorConversionCodes code, int dstCn = 0)
第一个参数 src 是原图像。
第二个参数 dst 是转换后的图像。
第三个参数 code 转换成什么格式的图片。
第四个参数 dstcn 为通道数。

这里第三个参数的编码格式,更快捷的方式是首先输入ColorConversionCodes.,然后按照c#或者python的代码中的BGR2GRAY直接输入就可以了,这里会自动跳出合适的选项。
在这里插入图片描述

 Cv2.CvtColor(pBkImage_copy, pBkImage_gray, ColorConversionCodes.BGR2GRAY);

5、高斯模糊和size数据格式的定义

下面是size数据格式的定义

OpenCvSharp.Size up = new Size(1000, 500);

高斯模糊:难点是size格式的定义,这里使用了:new OpenCvSharp.Size(11,11)

Cv2.GaussianBlur(pBkImage_gray, pBkImage_gauss, new OpenCvSharp.Size(11,11), 4, 4);

6、二值化

难点:ThresholdTypes.Binary

Cv2.Threshold(Image_diff, Image_threshold, 60, 255, ThresholdTypes.Binary);

7、开闭运算

//自定义核,进行开、闭运算
Mat element = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(5, 5));
Cv2.MorphologyEx(Image_threshold, Image_morp, MorphTypes.Open, element);
Cv2.MorphologyEx(Image_morp, Image_morp, MorphTypes.Close, element);

8、FindContours查找轮廓和contours参数的定义和操作

C#中OpenCVSharp实现轮廓检测
这个链接的示例非常好
难点:contours,hierarchy格式的定义。contours.Length和Cv2.ContourArea(contours[i]);函数的使用

Point[][] contours;
HierarchyIndex[] hierarchy;
Cv2.FindContours(Image_morp, out contours, out hierarchy, RetrievalModes.External, ContourApproximationModes.ApproxSimple, new Point(0, 0));
if (contours.Length == 0)
{
   
    System.Diagnostics.Debug.WriteLine("没有任何前景"); 
    return 0;
}
double image_area = 0.0;
for (int i = 0; i < contours.Length; i++)
{
   
    image_area += Cv2.ContourArea(contours[i]);
}

9、Rect和Size格式的定义

OpenCvSharp.Size up = new Size(1000, 500);
Rect rect =new Rect(x, y, width, height);
Rect rect =new OpenCvSharp.Rect(x, y
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值