Python을 사용하여 산타 모자를 선물하세요
크리스마스가 다가오고 있지만, 그래도 우리는 함께 즐거운 시간을 보내야 합니다. 이미 크리스마스 모자 관련 주변기기가 많이 유통되고 있는 것 같아요.
기본 지식 준비
컴퓨터에서 이미지는 행이 먼저, 열이 두 번째로 행렬 형식으로 저장됩니다. 따라서 너비 × 높이 × 색상 채널 = 480 × 256 × 3인 이미지는 256 × 480 × 3 3차원 텐서에 저장됩니다. 이미지 처리도 이 아이디어에 따라 계산됩니다(OpenCV에서의 이미지 처리 포함), 즉 높이 × 너비 × 색상 채널입니다.
디지털 이미지
디지털 이미지의 경우 우리가 보는 것은 육안으로 볼 수 있는 실제 사진이지만, 컴퓨터에서는 이 이미지는 밝기가 다른 점들의 집합일 뿐입니다. M × N 크기의 이미지는 M × N 행렬로 표현될 수 있습니다. 행렬 요소의 값은 이 위치의 픽셀 밝기를 나타냅니다. 일반적으로 픽셀 값이 클수록 점이 더 밝아집니다.
일반적으로 회색조 이미지는 2차원 행렬로 표현되고, 컬러(다채널) 이미지는 3차원 행렬(M×N×3)로 표현됩니다.
이미지 채널
은 픽셀을 설명합니다. 회색조인 경우 이를 설명하는 데는 하나의 값, 즉 단일 채널만 필요합니다. 픽셀에 세 가지 색상(RGB)이 있는 경우 이를 설명하기 위해 세 개의 채널이 있습니다. 4채널 이미지는 R, G, B에 A 채널이 추가되어 투명도를 나타냅니다. 일반적으로 투명도를 나타내는 알파 채널이라고 합니다.
ROI 및 마스크
관심 영역(ROI) 설정은 관심 영역 설정으로 번역됩니다. 마스크는 이미지 마스킹 프로세스로, ROI 부분을 남기고 관심 없는 부분을 가리는 것과 같습니다. 위에서 언급한 알파는 마스크로 사용될 수 있습니다.
Matrix (Numpy) 지식
Matrix 인덱싱, 슬라이싱 등. 여기서는 잘 다루지 못해서 친구들이 스스로 배울 수 있으니 자세히 설명하지 않겠습니다.
환경 준비
이제 기본 지식은 갖추었으니, 코드를 간단히 살펴보겠습니다.
먼저 사용해야 하는 OpenCV 및 dlib 라이브러리를 설치하고 pip를 사용하여 각각 설치합니다
pip install python-opencv pip install dlib
그런 다음 인터넷에서 데이터 모델 파일 Shape_predictor_5_face_landmarks.dat를 수동으로 다운로드합니다. 주소는 다음과 같습니다. http://dlib .net/files/ , 다운로드하여 프로젝트 디렉토리에 넣습니다.
관심 있는 학생들은 얼굴의 최대 68개 핵심 지점을 인식하는 Shape_predictor_68_face_landmarks.dat를 가지고 놀 수 있습니다.
코드 처리
모자 처리
가장 먼저 해야 할 일은 모자를 처리하는 것입니다. 우리가 사용하는 이미지는 다음과 같습니다
먼저 의 RGB 및 알파 값을 추출합니다. 모자 이미지
# 帽子Python을 사용하여 산타 모자를 선물하세요 hat_img3 = cv2.imread("hat.png", -1) r, g, b, a = cv2.split(hat_img3) rgb_hat = cv2.merge((r, g, b)) cv2.imwrite("rgb_hat.jpg", rgb_hat) cv2.imwrite("alpha.jpg", a) print(a) print(hat_img3.shape) print(rgb_hat.shape)
우리가 얻는 효과는 다음과 같습니다:
rgb picture
alpha picture
인쇄된 값은 다음과 같습니다:
[[0 0 0 ... 0 0 0] [0 0 0 ... 0 0 0] [0 0 0 ... 0 0 0] ... [0 0 0 ... 0 0 0] [0 0 0 ... 0 0 0] [0 0 0 ... 0 0 0]]
Face recognition
얼굴 인식 아래에서는 dlib 처리를 사용하여 수행됩니다.
# 人脸检测 dets = self.detector(img, 1) x, y, w, h = dets[0].left(), dets[0].top(), dets[0].right() - dets[0].left(), dets[0].bottom() - dets[0].top() # 关键点检测 shape = self.predictor(img, dets[0]) point1 = shape.parts()[0] point2 = shape.parts(2) # 求两点中心 eyes_center = ((point1.x + point2.x) // 2, (point1.y + point2.y) // 2)
다음 단계는 모자 사진을 축소하는 것
# 帽子和人脸转换比例 hat_w = int(round(dets[0].right()/1.5)) hat_h = int(round(dets[0].bottom() / 2)) if hat_h > y: hat_h = y - 1 hat_newsize = cv2.resize(rgb_hat, (hat_w, hat_h)) mask = cv2.resize(a, (hat_w, hat_h)) mask_inv = cv2.bitwise_not(mask) dh = 0 dw = 0 bg_roi = img[y+dh-hat_h:y+dh,(eyes_center[0]-hat_w//3):(eyes_center[0]+hat_w//3*2)]
ROI 추출
ROI 추출
# 用alpha通道作为mask mask = cv2.resize(a, (resized_hat_w, resized_hat_h)) mask_inv = cv2.bitwise_not(mask)
마스크 변수를 수행하고, 모자의 면적을 꺼냅니다.
mask_inv 변수는 얼굴 사진에서 모자가 설치된 영역을 추출하는 데 사용됩니다.
다음은 얼굴 사진에서 모자 모양의 영역(ROI)을 꺼냅니다
# 原图ROI # bg_roi = img[y+dh-resized_hat_h:y+dh, x+dw:x+dw+resized_hat_w] bg_roi = img[y + dh - resized_hat_h:y + dh, (eyes_center[0] - resized_hat_w // 3):(eyes_center[0] + resized_hat_w // 3 * 2)]
그런 다음 얼굴 사진에서 모자 모양의 영역을 꺼냅니다
# 原图ROI中提取放帽子的区域 bg_roi = bg_roi.astype(float) mask_inv = cv2.merge((mask_inv, mask_inv, mask_inv)) alpha = mask_inv.astype(float) / 255 # 相乘之前保证两者大小一致(可能会由于四舍五入原因不一致) alpha = cv2.resize(alpha, (bg_roi.shape[1], bg_roi.shape[0])) # print("alpha size: ",alpha.shape) # print("bg_roi size: ",bg_roi.shape) bg = cv2.multiply(alpha, bg_roi) bg = bg.astype('uint8')
여기에는 의 기본 uint8이 있습니다. picture 연산을 위해 타입을 float 타입으로 변환하고, 최종적으로 다시 변환합니다.
합성사진
어두운 부분이 모자를 놓을 곳이에요.
모자 사진에서 모자 부분을 추출해 주세요.
# 提取帽子区域 hat = cv2.bitwise_and(resized_hat, resized_hat, mask=mask)
방금 크기를 조정한 모자 이미지를 사용하여 추출하세요.
可以看到,除了帽子部分,其他区域已经掩模处理了。
以上就是提取ROI的过程,比较难懂,需要好好琢磨,尤其是矩阵的切片、mask处理部分。
合成Python을 사용하여 산타 모자를 선물하세요
最后一步就是把人脸Python을 사용하여 산타 모자를 선물하세요与帽子合成到一起了,也就是把人脸空余帽子部分的Python을 사용하여 산타 모자를 선물하세요区域和帽子只展示帽子区域的Python을 사용하여 산타 모자를 선물하세요区域(有点拗口)合并在一起。
# 相加之前保证两者大小一致(可能会由于四舍五入原因不一致) hat = cv2.resize(hat, (bg_roi.shape[1], bg_roi.shape[0])) # 两个ROI区域相加 add_hat = cv2.add(bg, hat)
效果如下:
刚刚好,完美叠加Python을 사용하여 산타 모자를 선물하세요。
最后把这个片段放回人脸原图中,展示Python을 사용하여 산타 모자를 선물하세요
img[y+dh-hat_h:y+dh, (eyes_center[0]-hat_w//3):(eyes_center[0]+hat_w//3*2)] = add_hat
美美的Python을 사용하여 산타 모자를 선물하세요就出来啦!
我们再尝试几张不同的Python을 사용하여 산타 모자를 선물하세요。
整体效果还不错哦,需要注意的是,在测试的时候,我们尽量选择人脸占比比较大的Python을 사용하여 산타 모자를 선물하세요来合成,效果要好很多哦~
위 내용은 Python을 사용하여 산타 모자를 선물하세요의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이 기사는 데비안 시스템에서 Apache Logs를 분석하여 웹 사이트 성능을 향상시키는 방법을 설명합니다. 1. 로그 분석 기본 사항 Apache Log는 IP 주소, 타임 스탬프, 요청 URL, HTTP 메소드 및 응답 코드를 포함한 모든 HTTP 요청의 자세한 정보를 기록합니다. 데비안 시스템 에서이 로그는 일반적으로 /var/log/apache2/access.log 및 /var/log/apache2/error.log 디렉토리에 있습니다. 로그 구조를 이해하는 것은 효과적인 분석의 첫 번째 단계입니다. 2. 로그 분석 도구 다양한 도구를 사용하여 Apache 로그를 분석 할 수 있습니다.

Python은 게임 및 GUI 개발에서 탁월합니다. 1) 게임 개발은 Pygame을 사용하여 드로잉, 오디오 및 기타 기능을 제공하며 2D 게임을 만드는 데 적합합니다. 2) GUI 개발은 Tkinter 또는 PYQT를 선택할 수 있습니다. Tkinter는 간단하고 사용하기 쉽고 PYQT는 풍부한 기능을 가지고 있으며 전문 개발에 적합합니다.

PHP와 Python은 각각 고유 한 장점이 있으며 프로젝트 요구 사항에 따라 선택합니다. 1.PHP는 웹 개발, 특히 웹 사이트의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 간결한 구문을 가진 데이터 과학, 기계 학습 및 인공 지능에 적합하며 초보자에게 적합합니다.

이 기사에서는 DDOS 공격 탐지 방법에 대해 설명합니다. "Debiansniffer"의 직접적인 적용 사례는 발견되지 않았지만 DDOS 공격 탐지에 다음과 같은 방법을 사용할 수 있습니다. 효과적인 DDOS 공격 탐지 기술 : 트래픽 분석을 기반으로 한 탐지 : 갑작스런 트래픽 성장, 특정 포트에서의 연결 감지 등의 비정상적인 네트워크 트래픽 패턴을 모니터링하여 DDOS 공격을 식별합니다. 예를 들어, Pyshark 및 Colorama 라이브러리와 결합 된 Python 스크립트는 실시간으로 네트워크 트래픽을 모니터링하고 경고를 발행 할 수 있습니다. 통계 분석에 기반한 탐지 : 데이터와 같은 네트워크 트래픽의 통계적 특성을 분석하여

데비안 시스템의 readdir 함수는 디렉토리 컨텐츠를 읽는 데 사용되는 시스템 호출이며 종종 C 프로그래밍에 사용됩니다. 이 기사에서는 ReadDir를 다른 도구와 통합하여 기능을 향상시키는 방법을 설명합니다. 방법 1 : C 언어 프로그램을 파이프 라인과 결합하고 먼저 C 프로그램을 작성하여 readDir 함수를 호출하고 결과를 출력하십시오.#포함#포함#포함#포함#includinTmain (intargc, char*argv []) {dir*dir; structdirent*entry; if (argc! = 2) {

제한된 시간에 Python 학습 효율을 극대화하려면 Python의 DateTime, Time 및 Schedule 모듈을 사용할 수 있습니다. 1. DateTime 모듈은 학습 시간을 기록하고 계획하는 데 사용됩니다. 2. 시간 모듈은 학습과 휴식 시간을 설정하는 데 도움이됩니다. 3. 일정 모듈은 주간 학습 작업을 자동으로 배열합니다.

이 기사에서는 Debian 시스템에서 NginxSSL 인증서를 업데이트하는 방법에 대해 안내합니다. 1 단계 : CertBot을 먼저 설치하십시오. 시스템에 CERTBOT 및 PYTHON3-CERTBOT-NGINX 패키지가 설치되어 있는지 확인하십시오. 설치되지 않은 경우 다음 명령을 실행하십시오. sudoapt-getupdatesudoapt-getinstallcertbotpython3-certbot-nginx 2 단계 : 인증서 획득 및 구성 rectbot 명령을 사용하여 nginx를 획득하고 nginx를 구성하십시오.

데비안 시스템에서 HTTPS 서버를 구성하려면 필요한 소프트웨어 설치, SSL 인증서 생성 및 SSL 인증서를 사용하기 위해 웹 서버 (예 : Apache 또는 Nginx)를 구성하는 등 여러 단계가 포함됩니다. 다음은 Apacheweb 서버를 사용하고 있다고 가정하는 기본 안내서입니다. 1. 필요한 소프트웨어를 먼저 설치하고 시스템이 최신 상태인지 확인하고 Apache 및 OpenSSL을 설치하십시오 : Sudoaptupdatesudoaptupgradesudoaptinsta
