关于OpencvSharp,可以参考之前的文档《OpenCV在C#中使用基础(OpenCVSharp)》
是Opencv在.Net平台的封装。
目前OpencvSharp出到版本4,在nuget中直接装OpencvSharp4.windows即可,目前已经支持.Net Core了。
使用OpencvSharp调用摄像头,获取图像,并进行人脸人眼检测、绘制、显示。代码如下:
static void Main(string[] args)
{//获取cameraFrameSource 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中提供了很多数模型文件,有兴趣的也可以多试试别的。
最终效果如下: