下面是“如何在C#中使用OpenCV(GOCW使用教程)”的完整攻略。
OpenCV是一个功能强大的计算机视觉库,可以在各种操作系统上使用C ++,Python和Java等多种语言。OpenCV的目的是提供一组易于使用的计算机视觉算法和工具库,旨在提高计算机视觉在现实世界中的应用。GOCW(Gifski OpenCV Wrapper)是一个用于连接OpenCV和C#的库。
首先,需要安装GOCW。可以在Github的页面上下载最新版本的GOCW二进制文件(dll)。 推荐使用最新版本的GOCW。
接下来,需要安装OpenCV。 建议使用最新的OpenCV版本。 OpenCV可以从其官方网站https://opencv.org/releases/下载。
将GOCW的dll文件和OpenCV的库文件添加到项目的引用中。右键单击解决方案资源管理器中的项目文件,然后选择属性。在左侧的窗格中选择“构建”选项,然后在右侧的窗格中找到“链接器”选项。在“附加依赖项”字段中添加以下内容:
opencv_core240.lib
opencv_full240.lib
gifski.dll
gifski-cnc.dll
GOCWNative.dll
注:上述示例使用的是OpenCV 2.4.0版本和GOCW 1.1.0版本。如果使用不同的版本,请相应地更改库名称。
下面的示例代码演示了如何使用OpenCV和GOCW加载和显示图像。
using System;
using GOCW;
using OpenCvSharp;
namespace SampleGOCW
{
class Program
{
private static CascadeClassifier _classifier;
static void Main(string[] args)
{
// 初始化 GOCW
GOCW.Start();
// 创建窗口
var window = new Window("图像");
// 加载图片(相对路径)
var img = new Mat(@"image.png");
// 显示图像
window.ShowImage(img);
// 等待按下任意键
Cv2.WaitKey(0);
// 释放窗口
window.Dispose();
// 释放 GOCW
GOCW.Stop();
}
}
}
示例代码中,程序首先初始化了GOCW。然后程序加载了一张图像,并利用GOCW在打开窗口的情况下,显示了该图像。然后,等待用户按下键盘上的任意键,以便继续执行。
下面是一个使用OpenCV和GOCW检测和识别人脸的示例代码。示例代码将检测是否有面部并在屏幕上标识出面部。这需要一个名为“haarcascade_frontalface_alt.xml”的文件,该文件是OpenCV预测人类正面的默认级联分类器之一。该文件可从OpenCV官方repository(http://github.com/opencv/opencv)下载得到。
using System;
using GOCW;
using OpenCvSharp;
namespace SampleGOCW
{
class Program
{
private static CascadeClassifier _classifier;
static void Main(string[] args)
{
if (!Cv2.RunningOnWindows())
{
Console.WriteLine("错误:此样本不支持非 Windows 平台。");
return;
}
var window = new Window("人脸检测示例");
try
{
_classifier = new CascadeClassifier(@"haarcascade_frontalface_alt.xml");
}
catch (Exception e)
{
Console.WriteLine("错误: 加载级联分类器时发生异常:" + e.Message);
window.Dispose();
return;
}
var cap = new VideoCapture(0);
var frame = new Mat();
while (true)
{
cap.Read(frame);
if (frame.Empty())
break;
var screen = new Mat(frame.Height, frame.Width, MatType.CV_8UC3, Scalar.Black);
var gray = new Mat();
Cv2.CvtColor(frame, gray, ColorConversionCodes.BGR2GRAY);
// 识别人脸
var faces = _classifier.DetectMultiScale(
gray,
scaleFactor: 1.1,
minNeighbors: 3,
flags: HaarDetectionType.DoCannyPruning | HaarDetectionType.ScaleImage,
minSize: new Size(30, 30));
foreach (var faceRect in faces)
{
// 将有人脸的帧绘制到屏幕上
Cv2.Rectangle(frame, faceRect, Scalar.Blue, 2);
// 将有人脸的帧绘制到全屏幕上
Cv2.Rectangle(screen, faceRect, Scalar.Blue, -1);
}
window.ShowImage(frame);
Cv2.WaitKey(10);
if (Cv2.WaitKey(30) == 'q')
break;
}
cap.Release();
window.Dispose();
GOCW.Stop();
}
}
}
示例代码中首先检测操作系统是否为Windows。然后打开摄像头并持续读取框架,直到用户按下“q”键。每个帧都被从相机中读取,并且OpenCV使用预测人脸的级联分类器来检测帧中是否有面部。如果OpenCV检测到面部,就在屏幕上标识出面部。所有检测到面部的帧都将以蓝色矩形纹理标出。
本文链接:http://task.lmcjl.com/news/14247.html