使用OpenCVSharp

什么是OpenCVSharp

为了解决在Csharp下编写OpenCV程序的问题,我做过比较深入的研究,并且实现了高效可用的方法(GOCW);这几天在搜集资料的时候,偶尔看见了OpenCVSharp,从时间上来看,它已经经过了更久的发展,应该有许多直接借鉴、或者直接使用的地方。
OpenCVSharp有一名日本工程师开发,
项目地址为:https://github.com/shimat/opencvsharp。
其是OpenCV的.NET wrapper,它比Emgucv更接近于原始的OpenCV,并且有很多的样例参考,其采用LGPL发行,对商业应用友好(基本上相当于BSD)。

OpenCVSharp有什么特点

  • 直接封装了更多的OpenCV方法,降低了学习的难度,比EmguCV更便于使用
  • 大部分继承了IDisposable接口,方便使用using语句
  • 可以直接调用原始风格的OpenCV方法
  • 可以将图像对象直接转换成GDI使用的Bitmap和WPF的WriteBitmap
  • 支持Mono。

函数的使用

Threshold—图像变换之阈值二值

图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果。在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。threshold 方法是通过遍历灰度图中点,将图像信息二值化,处理过后的图片只有二种色值。

函数原型

public static double Threshold(OpenCvSharp.InputArray src, OpenCvSharp.OutputArray dst, double thresh, double maxval, OpenCvSharp.ThresholdTypes type)

参数说明

src:源图像,可以为8位的灰度图,也可以为32位的彩色图像。
dst:输出图像
thresh:阈值
maxval:dst图像中最大值
type:阈值类型,可以具体类型如下:

序号 阈值类型枚举 备注
1 THRESH_BINARY 当前点值大于阈值时,取Maxval,也就是第四个参数,下面再不说明,否则设置为0
2 THRESH_BINARY_INV 当前点值大于阈值时,设置为0,否则设置为Maxval
3 THRESH_TRUNC 当前点值大于阈值时,设置为阈值,否则不改变
4 THRESH_TOZERO 当前点值大于阈值时,不改变,否则设置为0
5 THRESH_TOZERO_INV 当前点值大于阈值时,设置为0,否则不改变
6 THRESH_MASK
7 THRESH_OTSU
8 THRESH_TRIANGLE

使用canny边缘检测算法查找边缘

图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘。Canny边缘检测算子是John F. Canny于 1986 年开发出来的一个多级边缘检测算法。

参数说明

第一个参数image,Input image 表示输入图像,必须为单通道灰度图
第二个参数edges,Image to store the edges found by the function 表示输出的边缘图像,为单通道黑白图
第三个参数threshold1,The first threshold
第四个参数threshold2,The second threshold.
第三个参数和第四个参数表示阈值,这二个阈值中当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割,即如果一个像素的梯度大与上限值,则被认为是边缘像素,如果小于下限阈值,则被抛弃。如果该点的梯度在两者之间则当这个点与高于上限值的像素点连接时我们才保留,否则删除。
第五个参数aperture,Aperture parameter for Sobel operator
表示Sobel 算子大小,默认为3即表示一个3*3的矩阵。Sobel 算子与高斯拉普拉斯算子都是常用的边缘算子,详细的数学原理可以查阅专业书籍。

你可能感兴趣的:(使用OpenCVSharp)