Python 이 ROI 를 이용 하여 이미지 합성 을 하 는 문제 소결
필요:
현재 그림(템 플 릿)에 두 개의 빈 칸 이 있다 고 가정 하면 사진 을 작성 할 수 있 습 니 다(아래 그림 참조).
그림 에서 파란색 동그라미 와 노란색 원 은 교체 해 야 할 내용 이 고 나머지 부분 은 png 그림 으로 볼 수 있 으 며 PS 를 통 해 파란색 원 과 노란색 원 의 구체 적 인 좌 표를 알 수 있 으 므 로 아래 의 두 장의 그림 을 위의 위치 로 합성 해 야 한다.
ROI 합성 원형 구역
def input_circle_img(img, file_path, img_part_name, x, y, r):
for file in os.listdir(file_path):
if img_part_name in file:
path = file_path + "\\" + file
src = cv_imread(path)
src = cv.resize(src, (r * 2 + 4, r * 2 + 4))
h, w, ch = src.shape
mask = np.zeros(src.shape[:2], dtype=np.uint8)
mask = cv.circle(mask, (r + 1, r + 1), r, (255, 255, 255), -1)
imgROI = img[(y - r):(y + r), (x - r):(x + r)]
mask = mask/255.0
a = mask[..., None]
for row in range(imgROI.shape[0]):
for col in range(imgROI.shape[1]):
if a[row, col]:
imgROI[row, col] = src[row, col]
매개 변수설명 하 다.
img
템 플 릿 그림 대상,즉 위의 첫 번 째 그림 입 니 다.
file_path
교체 할 그림 이 있 는 파일 경로,즉 위의 1테스트.jpg 와 2테스트.jpg 가 있 는 폴 더 경로
img_part_name
즉,바 꿔 야 할 그림 의(부분)파일 이름 입 니 다.예 를 들 어 제 가 바 꾸 고 싶 은 것 은'1'입 니 다.테스트.jpg",이 매개 변 수 는"1 "일 수 있 습 니 다.전체 이름 으로 도 가능 합 니 다~(주의해 야 할 것 은 작성 한 문자열 은 가능 한 한 폴 더 의 유일한 식별 자 입 니 다.예 를 들 어""를 작성 하 는 것 입 니 다."테스트"는 원 하 는 파일 을 다른 그림 으로 덮어 쓸 수 있 습 니 다)
x
그림 중심 이 템 플 릿 의 가로 위치(템 플 릿 왼쪽 과 의 거리)
y
그림 중심 이 템 플 릿 의 세로 위치(템 플 릿 상단 과 의 거리)
r
그림 은 템 플 릿 의 실제 반경 에서 나온다
+4 는 이전에 seamlessClone 을 이용 할 때 가장자리 에 원래 템 플 릿 의 영향 을 받 아 ROI 로 바 꾼 후에 돌아 가 는 것 이 귀 찮 았 기 때 문 입 니 다.더 하지 않 아 도 괜 찮 을 것 같 습 니 다~
def export_comp_img(path):
print("[START] export_comp_img ...")
for file_path in os.listdir(path):
file_path = path + "\\" + file_path
# , np.zeros, ~
img = create_img(2400, 3600)
input_circle_img(img, file_path, "2_", 1862, 800, 440)
input_circle_img(img, file_path, "1_", 1247, 558, 315)
# input_rect_img(img, file_path, "3_", (0, 2202), (2400, 2944))
# , imencode, ~
save_img(img, file_path)
사고 가 나 지 않 으 면 아래 그림 을 얻 을 수 있 을 거 예요!그 다음 에 템 플 릿 의 PNG 그림 을 맨 위 에 덮 습 니 다.위 에 있 는 mask 의 사 고 를 이용 할 수도 있 고 PS 에 넣 어서 합성 할 수도 있 습 니 다.여기 서 한편 으로 는 PS 에서 후속 적 인 조작 을 해 야 하고 다른 한편 으로 는 그림 가장자리 의 처리 효 과 를 관찰 해 야 하기 때문에 후 자 를 선택 하 였 습 니 다.
템 플 릿 의 위치 와 완벽 하 게 일치 합 니 다!
PS:원 을 제외 한 불규칙 한 도형 이 라면 마스크 를 바 꾸 어 실현 할 수 있 습 니 다.가장 거 친 것 은 마스크 그림 을 불 러 오 는 것 입 니 다.
단순 한 사각형 선택 영역 이 라면 마스크 를 무시 하면 됩 니 다.
이제 끝!다음은 중요 하지 않 은 보충...
ROI 합성 사각형 영역
def input_rect_img(img, file_path, img_part_name, start_point, end_point):
for file in os.listdir(file_path):
if img_part_name in file:
path = file_path + "\\" + file
src = cv_imread(path)
h = end_point[1] - start_point[1]
w = end_point[0] - start_point[0]
src = cv.resize(src, (w, h))
imgROI = img[start_point[1]:(start_point[1] + h),start_point[0]:(start_point[0] + w)]
for row in range(imgROI.shape[0]):
for col in range(imgROI.shape[1]):
imgROI[row, col] = src[row, col]
seamlessClone 합성 원형 영역특히 처음에 저 는 seamlessClone 방법 을 사 용 했 지만 세 가지 모델 효 과 를 모두 이상 적 이지 않 았 습 니 다.
def input_circle_img_seamlessClone(img, file_path, img_part_name, x, y, r):
for file in os.listdir(file_path):
if img_part_name in file:
path = file_path + "\\" + file
src = cv_imread(path)
src = cv.resize(src, (r * 2 + 4, r * 2 + 4))
h, w, ch = src.shape
mask = np.zeros(src.shape[:2], dtype=np.uint8)
mask = cv.circle(mask, (r + 1, r + 1), r, (255, 255, 255), -1)
center = (x, y)
output = cv.seamlessClone(src, img, mask, center, cv.MIXED_CLONE)
return output
MIXED_CLONENORMAL_CLONE
MONOCHROME_TRANSFER
NORMAL_CLONE 과 MIXEDCLONE 의 차 이 는 주로 두 개의 원 의 경계 에 있 지만 이 두 가지 방법의 가장자리 에 과도 적 인 처리 가 있어 서 템 플 릿 을 만 들 때 사용 하기에 적합 하지 않 습 니 다.
파 이 썬 이 ROI 를 이용 한 이미지 합성 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.파 이 썬 이미지 합성 에 관 한 더 많은 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.