2011-01-27 5 views
2

초점 영역을 사용하여 크기 조정 및 자르기 및 이미지를 만드는 올바른 방법을 찾기 위해 고심하고 있습니다. 내 경우에는 초점 영역이 이미지에서 감지 된 얼굴이며,이 영역이 자른 버전에서 표시되는지 확인해야합니다.ImageMagick을 사용하여 초점 영역 (얼굴)으로 이미지 자르기

예를 들어 초점 영역이 있습니다. face_height, face_width, face_center_x 및 face_center_y. 이 값은 원본 이미지의 크기 비율입니다.

내가 원하는 것은 예. 60x60 미리보기 이미지. 일반적인 접근 방식은 다음과 같이, 그래서 이미지 중 하나 높이 또는 너비가 같은 60 픽셀입니다 크기를 조정 한 후 센터에서 60X60를 잘라하는 것입니다 : 어떤 방식 대신 주어진 영역 주위에 초점을 내 작물을 취할 수

mogrify -resize 60x -gravity 'Center' -crop 60x60 image.jpg 

? 나는 여러 경로를 포함하는 솔루션을 생각하고

:

  1. 얼굴 영역이 원하는 썸네일보다 큰 경우는, 60X60 픽셀 얼굴 전체에 볼 수 있도록 충분한 이미지 크기를 조정 한 후 작물
  2. 얼굴 영역이 원하는 축소 이미지보다 작 으면 원한 엄지 손가락이 해당 영역 안에 들어갈 때까지 내 얼굴 영역을 자르십시오. 다음 자르기. 나는 이것이 원본 이미지의 범위를 초과하지 않도록해야 할 필요가 있다고 생각합니다.

더 효과적인 방법이 있습니까? 몇 가지 예제 코드를 만들 수 있습니까?

감사합니다.

+0

호기심 - 당신은 어떤 얼굴 탐지 알고리즘을 사용 했습니까? 감사! –

답변

3

먼저 스크립트 나 프로그램에서 산술 연산을 수행 한 다음 정확한 좌표를 ImageMagick에 입력하십시오.

산술 단계 :

  • 비율보다 정확한 픽셀 값으로 작동하기 쉬운, 그래서 픽셀 값에 face_height, face_width, face_center_xface_center_y을 변환 할 수 있습니다.당신은 직사각형 미리보기를 원하므로 가장 긴 쪽을 선택하고 그와 함께 작동합니다
  • :

    longest_side = max(face_height, face_width)

  • 을 이제 당신이 당신의 작물을 위해 왼쪽 맨 위 지점을 계산할 수 있습니다

    crop_x = face_center_x - longest_side/2
    crop_y = face_center_y - 네 작물 코너 중 하나가 당신의 파이를 벗어나는 경우 longest_side/2

  • 가능한 화상의 사이즈, 즉 대한 조정 :

    • crop_xcrop_y을 모두 있어야> = 0
    • crop_x + longest_side
    • crop_y + longest_side 이미지 높이보다 작아야 화상 폭보다 작아야

ImageMagick 호출은 다음과 같이 계산됩니다.

mogrify -crop {longest_side}x{longest_side}+{crop_x}+{crop_y} -resize 60x60 image.jpg