Python 이 ROI 를 이용 하여 이미지 합성 을 하 는 문제 소결

이전에 seamlessClone 을 사용 하여 그림 을 합성 하 였 으 나,두 장의 그림 의 교차 부분 에 작은 문제 가 발생 할 수 있 음 을 발견 하 였 다.
필요:
현재 그림(템 플 릿)에 두 개의 빈 칸 이 있다 고 가정 하면 사진 을 작성 할 수 있 습 니 다(아래 그림 참조).
在这里插入图片描述
그림 에서 파란색 동그라미 와 노란색 원 은 교체 해 야 할 내용 이 고 나머지 부분 은 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_CLONE
在这里插入图片描述
NORMAL_CLONE
在这里插入图片描述
MONOCHROME_TRANSFER
在这里插入图片描述
NORMAL_CLONE 과 MIXEDCLONE 의 차 이 는 주로 두 개의 원 의 경계 에 있 지만 이 두 가지 방법의 가장자리 에 과도 적 인 처리 가 있어 서 템 플 릿 을 만 들 때 사용 하기에 적합 하지 않 습 니 다.
파 이 썬 이 ROI 를 이용 한 이미지 합성 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.파 이 썬 이미지 합성 에 관 한 더 많은 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기