关于OpencvSharp,可以参考之前的文档《OpenCV在C#中使用基础(OpenCVSharp)》
是Opencv在.Net平台的封装。
目前OpencvSharp出到版本4,在nuget中直接装OpencvSharp4.windows即可,目前已经支持.Net Core了。
使用OpencvSharp调用摄像头,获取图像,并进行人脸人眼检测、绘制、显示。代码如下:
static void Main(string[] args)
{
//获取camera
FrameSource video = Cv2.CreateFrameSource_Camera(1);
//声明窗口
Cv2.NamedWindow("video", WindowMode.Normal);
while (true)
{
//获取帧
Mat frame = new Mat();
video.NextFrame(frame);
//加载人眼、人脸模型数据
OpenCvSharp.CascadeClassifier faceFinder = new CascadeClassifier(@"C:\opencv420\opencv\sources\data\haarcascades\haarcascade_frontalface_default.xml");
OpenCvSharp.CascadeClassifier eyeFinder = new CascadeClassifier(@"C:\opencv420\opencv\sources\data\haarcascades\haarcascade_eye_tree_eyeglasses.xml");
//进行检测识别
Rect[] faceRects = faceFinder.DetectMultiScale(frame);
Rect[] eyeRects = eyeFinder.DetectMultiScale(frame);
//如果有检测到,就绘制结果到图像上
if (faceRects.Length > 0)
{
Cv2.Rectangle(frame, faceRects[0], new Scalar(0, 0, 255), 3);
}
if (eyeRects.Length > 1)
{
Cv2.Rectangle(frame, eyeRects[0], new Scalar(255, 0, 0), 3);
Cv2.Rectangle(frame, eyeRects[1], new Scalar(255, 0, 0), 3);
}
//显示结果
Cv2.ImShow("video", frame);
Cv2.WaitKey(1);
}
}
用到的命名空间自然得有 OpenCvSharp。
其次要说明的是
"C:\opencv420\opencv\sources\data\haarcascades\haarcascade_frontalface_default.xml" 和
"C:\opencv420\opencv\sources\data\haarcascades\haarcascade_eye_tree_eyeglasses.xml"
两个文件,这两个文件来自于Opencv(官方C++库),需要下载安装Opencv,在如上的的相应目录去找(我的安装在“C:\opencv420”目录)。
可以参考《OpenCV的安装与配置》(只需要安装就好),当然你也可以借助强大的百度直接下搜索载。opencv中提供了很多数模型文件,有兴趣的也可以多试试别的。
最终效果如下: