C\#OpenCV 를 사용 하여 그림 속 인물 의 얼굴 을 자 르 는 실현 방법
본 고 는 주로 OpenCV 커팅 도형 중의 인물 두상 을 어떻게 사용 하 는 지 를 소개 한다.
준비 작업
우선 Wpf 프로젝트 를 만 듭 니 다--OpenCVFace_Wpf,이 버 전 은 Framework 4.7.2 를 사용 합 니 다.
그리고 Nuget 을 사용 하여[Emgu.CV]를 검색 합 니 다.다음 그림 입 니 다.
이곳 의 Emgu.CV 는 4.3.0.3890 버 전 을 선택 한 후 Emgu.CV 와 Emgu.CV.runtime.windows 를 설치 합 니 다.
그리고 필요 한 파일 을 다운로드 합 니 다 haarcascadefrontalface_default.xml。
OpenCV 의 오픈 소스 코드 에서 다운로드 할 수 있 습 니 다.다운로드 주소:https://github.com/opencv/opencv/tree/master/data/haarcascades.
그리고 파일 을 항목 에 추가 하고 속성 을 수정 하여 xml 파일 을 시작 디 렉 터 리 에 출력 합 니 다.다음 그림 입 니 다.
오 펜 CV 로 얼굴 자 르 기.
지금 우 리 는 프로젝트 에 들 어가 서 OPENCV 호출 을 진행 합 니 다.
먼저 네 임 스페이스 를 도입 합 니 다.다음 과 같 습 니 다.
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using System.Drawing;
using System.Windows.Forms;
그리고 사람의 얼굴 을 자 르 는 함수 인 CutFace 를 작성 합 니 다.함수 에서,우 리 는 먼저 Cascade Classifier 류 를 사용 하여 haarcascade 를 읽 습 니 다.frontalface_default.xml 파일,얼굴 검사 대상 을 만 듭 니 다.
그림(그 레이스 케 일 모드)을 가 져 오 려 면 Mat 클래스 를 사용 하 십시오.
그리고 얼굴 검사 대상 을 사용 하 는 방법 인 Detect MultiScale 을 사용 하여 얼굴 수 를 식별 합 니 다.
마지막 으로 비트 맵 클래스 를 통 해 인식 되 는 사람의 얼굴 을 잘라 서 저장 합 니 다.
코드 는 다음 과 같 습 니 다:
public void CutFace(string filename)
{
//CvInvoke.UseOpenCL = CvInvoke.HaveOpenCLCompatibleGpuDevice;// GPU
var face = new CascadeClassifier("haarcascade_frontalface_default.xml");
var mat = new Mat(filename, ImreadModes.Grayscale);//
int minNeighbors = 7;// , 3
var size = new System.Drawing.Size(10, 10);//
var facesDetected = face.DetectMultiScale(mat, 1.1, minNeighbors, size);
//
int index = 0;
var bitmap = Bitmap.FromFile(filename);
foreach (var item in facesDetected)
{
index++;
var bmpOut = new Bitmap(item.Width, item.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
var g = Graphics.FromImage(bmpOut);
g.DrawImage(bitmap, new System.Drawing.Rectangle(0, 0, item.Width, item.Height),
new System.Drawing.Rectangle(item.X, item.Y, item.Width, item.Height), GraphicsUnit.Pixel);
g.Dispose();
bmpOut.Save($"Face_{index}.png", System.Drawing.Imaging.ImageFormat.Png);
bmpOut.Dispose();
}
bitmap.Dispose();
mat.Dispose();
face.Dispose();
}
그리고 파일 을 여 는 함 수 를 만 들 고 파일 을 성공 적 으로 열 었 을 때 CutFace 를 호출 합 니 다.
public void SelectImg()
{
System.Windows.Forms.OpenFileDialog frm = new System.Windows.Forms.OpenFileDialog();
frm.Filter = "(*.jpg,*.png,*.jpeg,*.bmp)|*.jgp;*.png;*.jpeg;*.bmp|All files(*.*)|*.*";
if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
CutFace(frm.FileName);
}
}
지금 우 리 는 프로젝트 를 시작 합 니 다.다음 그림:실행 결과
화면 에 있 는 그림 을 클릭 하여 얼굴 이 있 는 그림 을 선택 하여 테스트 합 니 다.
코드 에서 기본적으로 자 른 그림 을 Debug 폴 더 에 저장 합 니 다.Debug 폴 더 를 엽 니 다.다음 그림:
내 가 선택 한 그림 은 한 사람의 얼굴 만 있 기 때문에 자 른 그림-Face 를 얻 었 다.1.png。
원본 그림 과 자 른 그림 은 다음 과 같 습 니 다.
이제 얼굴 이 많은 그림 을 바 꿔 서 다시 테스트 해 보 자.테스트 그림 은 다음 과 같다.
실행 후 결 과 는 다음 과 같 습 니 다.
----------------------------------------------------------------------------------------------------
이 C\#OpenCV 로 도형 에 있 는 인물 프로필 사진 을 자 르 면 소 개 됩 니 다.
코드 가 Github 에 전송 되 었 습 니 다.다운로드 환영 합 니 다.
Github 주소:https://github.com/kiba518/OpenCV_Face_Wpf
C\#OpenCV 를 사용 하여 그림 속 인물 의 얼굴 을 자 르 는 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 C\#OpenCV 를 사용 하여 그림 을 자 르 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.