public void TestArray2dRgbPixel() { using (var window = new ImageWindow()) using (var src = new Array2dRgbPixel()) { const string imagePath = "images\\lenna.bmp"; var bmp = new System.Drawing.Bitmap(imagePath); src.SetBitmap(bmp); window.SetImage(src); OpenCvSharp.Cv2.WaitKey(Cv2WaitKeyDelay); using (var image = new Array2dRgbPixel(src)) { image.PyramidUp(); window.SetImage(image); OpenCvSharp.Cv2.WaitKey(Cv2WaitKeyDelay); image.ResizeImage(image.Width / 2, image.Height / 2); window.SetImage(image); OpenCvSharp.Cv2.WaitKey(Cv2WaitKeyDelay); } using (var image = new Array2dRgbPixel(640, 480)) { // Quadratic does not work. Array2dRgbPixel.ResizeImageWithResizeImageInterporateKind(src, image, ResizeImageInterporateKind.Bilinear); window.SetImage(image); OpenCvSharp.Cv2.WaitKey(Cv2WaitKeyDelay); } } }
public void TestFaceLandmarkDetection() { const string imagePath = "images\\lenna.bmp"; using (var window = new ImageWindow()) using (var image = new Array2dRgbPixel()) using (var detector = new FaceLandmarkDetection("D:/Data/Dlib/shape_predictor_68_face_landmarks.dat")) { var bmp = new System.Drawing.Bitmap(imagePath); image.SetBitmap(bmp); image.PyramidUp(); window.SetImage(image); OpenCvSharp.Cv2.WaitKey(Cv2WaitKeyDelay); var landmarks = detector.DetectFaceLandmarks(image, -0.5); foreach (var landmark in landmarks) { Console.WriteLine(landmark.ToString()); } } }
public void RawApiFaceLandmarkDetectionUsingMemoryInput() { const string imagePath = "images\\lenna.bmp"; var imageBytes = File.ReadAllBytes(imagePath); IntPtr detector = IntPtr.Zero; IntPtr dets = IntPtr.Zero; try { using (var window = new ImageWindow()) using (var image = new Array2dRgbPixel()) { Console.WriteLine($"Size: ({image.Width},{image.Height})"); Trace.Assert(image.Width == 0 && image.Height == 0); window.SetImage(image); OpenCvSharp.Cv2.WaitKey(Cv2WaitKeyDelay); NativeMethods.dlib_load_bmp_array2d_rgbpixel(image.DlibArray2dRgbPixel, imageBytes, new IntPtr(imageBytes.Length)); Console.WriteLine($"Size: ({image.Width},{image.Height})"); Trace.Assert(image.Width == 512 && image.Height == 480); window.SetImage(image); OpenCvSharp.Cv2.WaitKey(Cv2WaitKeyDelay); image.SetBitmap(new System.Drawing.Bitmap(imagePath)); Console.WriteLine($"Size: ({image.Width},{image.Height})"); Trace.Assert(image.Width == 512 && image.Height == 480); window.SetImage(image); OpenCvSharp.Cv2.WaitKey(Cv2WaitKeyDelay); image.PyramidUp(); Console.WriteLine($"Size: ({image.Width},{image.Height})"); window.SetImage(image); OpenCvSharp.Cv2.WaitKey(Cv2WaitKeyDelay); detector = NativeMethods.dlib_get_face_landmark_detection("D:/Data/Dlib/shape_predictor_68_face_landmarks.dat"); dets = NativeMethods.vector_FaceLandmarkInternal_new1(); NativeMethods.dlib_face_landmark_detection_operator(detector, image.DlibArray2dRgbPixel, -0.5, dets); Trace.Assert(dets != null && dets != IntPtr.Zero); long count = NativeMethods.vector_FaceLandmarkInternal_getSize(dets).ToInt64(); // If it does not return ret here, exception occurs. if (count > 0) { unsafe { FaceLandmarkInternal *faceLandmarkInternals = (FaceLandmarkInternal *)NativeMethods.vector_FaceLandmarkInternal_getPointer(dets).ToPointer(); for (int i = 0; i < count; i++) { Console.WriteLine(new FaceLandmark(faceLandmarkInternals[i])); } } } } } finally { if (detector != IntPtr.Zero) { NativeMethods.dlib_face_landmark_detection_delete(detector); } if (dets != IntPtr.Zero) { NativeMethods.vector_FaceLandmarkInternal_delete(dets); } } }