PNG로 변환하여 JPEG 이미지에서 투명한 배경을 얻는 방법은 무엇입니까?

라비

이미지 (jpg / jpeg)의 배경을 흰색으로하고 싶습니다.

아래는 녹색 배경을 흰색으로 전송하는 코드입니다 (사람의 가장자리를 올바르게 식별) : 입력 이미지출력 이미지로

def change_bg(img, bg=(255, 255, 255)):
    # convert to hsv
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

    # threshold using inRange
    range1 = (20, 80, 80)
    range2 = (90, 255, 255)
    mask = cv2.inRange(hsv, range1, range2)
    mask = 255 - mask

    # apply morphology opening to mask
    kernel = np.ones((3, 3), np.uint8)
    mask = cv2.morphologyEx(mask, cv2.MORPH_ERODE, kernel)
    mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)

    # antialias mask
    mask = cv2.GaussianBlur(mask, (0, 0), sigmaX=3, sigmaY=3, borderType=cv2.BORDER_DEFAULT)
    mask = skimage.exposure.rescale_intensity(mask, in_range=(127.5, 255), out_range=(0, 255))

    result = img.copy()
    result[mask == 0] = bg
    return result

아래 코드를 사용하여 jpeg 이미지를 png로 변환했지만 투명하지 않은 흰색 픽셀이 표시됩니다. 결과 이미지

def white_to_transe(image):
    """
    @input: PIL image
    @return:
    """
    image = image.convert('RGBA')
    # Transparency
    newImage = []
    for item in image.getdata():
        if item[:3] == (255, 255, 255):
            newImage.append((255, 255, 255, 0))
        else:
            newImage.append(item)

    image.putdata(newImage)
    print(image.mode, image.size)
    return newImage

그렇다면 깨끗한 흰색 투명한 배경을 얻는 방법은 무엇입니까?

white_to_transe아래로 업데이트 하면 작동하지만 흰색 픽셀에 영향을 미칩니다. 예를 들어 흰색 셔츠와 같습니다.

    for item in image.getdata():
        if item[0] > 240 and item[1] > 240 and item[2] > 240:
            newImage.append((255, 255, 255, 0))

흰색 (255 개 모두)을 넣는 대신 투명 change_bg기능을 추가 할 수 있습니까?

HansHirse

당신의 접근 방식은 다소 불행 할 수 있습니다. 마스크를 앤티 앨리어싱 할 때 범위의 값을 얻지 0 ... 255result[mask == 0] = bg(흰색) 만 설정 합니다. (점진적으로) 원래 마스크에도 속하는 다른 모든 픽셀은 고려하지 않습니다. 따라서 코드를 다시 정렬하고 최종 마스크를 알파 채널로 사용합니다. OpenCV도 사용했습니다. 추가 필로우 루프를 사용하는 것은 내 관점에서 왠지 번거 롭습니다.

코드에서 발췌 한 내용을 수정 한 것입니다.

import cv2
import numpy as np
import skimage.exposure

img = cv2.imread('rmQRJIS.jpg')
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

lower = (40, 80, 80)
upper = (90, 255, 255)
mask = cv2.inRange(img_hsv, lower, upper)
mask = 255 - mask

kernel = np.ones((3, 3), np.uint8)
mask = cv2.morphologyEx(mask, cv2.MORPH_ERODE, kernel)
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)

# Use initial, binary mask to set background to white
result = img.copy()
result[mask == 0] = (255, 255, 255)

# Save image just for intermediate output
cv2.imwrite('output_no_trans.png', result)

# Use antialiased mask as final alpha channel for transparency
mask = cv2.GaussianBlur(mask, (0, 0), sigmaX=3, sigmaY=3, borderType=cv2.BORDER_DEFAULT)
mask = skimage.exposure.rescale_intensity(mask, in_range=(127.5, 255), out_range=(0, 255))
result = cv2.cvtColor(result, cv2.COLOR_BGR2BGRA)
result[:, :, 3] = mask

# Save final image
cv2.imwrite('output.png', result)

중간 출력으로 배경을 흰색으로 설정 한 후 이미지를 저장했습니다.

중간 출력

알파 채널을 포함한 최종 출력은 다음과 같습니다.

최종 출력

솔직히 여기에서는 PNG호환성 을 유지하기 위해 업로드하기 전에 출력 이미지를 축소해야했기 때문에 차이점을 거의 볼 수 없습니다 . 결과가 귀하에게 유리하면 전체 크기의 이미지를 직접 살펴보십시오!

----------------------------------------
System information
----------------------------------------
Platform:      Windows-10-10.0.16299-SP0
Python:        3.9.1
NumPy:         1.20.1
OpenCV:        4.5.1
scikit-image:  0.18.1
----------------------------------------

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

명령 줄을 사용하여 OS X에서 GIF 파일을 PNG 또는 JPEG로 변환하는 방법은 무엇입니까?

분류에서Dev

CALayer 내에서 PNG를 불투명 한 이미지로로드하는 방법은 무엇입니까?

분류에서Dev

PNG 이미지를 투명한 GIF로 변환하는 방법은 무엇입니까?

분류에서Dev

서명되지 않은 char * 배열에서 jpeg 이미지 배열을 얻는 방법은 무엇입니까?

분류에서Dev

Seaborn에서 darkgrid 배경으로 투명한 그림을 얻는 방법은 무엇입니까?

분류에서Dev

자바 스크립트를 사용하여 이미지를 PNG에서 JPEG로 변환하는 방법은 무엇입니까?

분류에서Dev

Inkscape에서 투명한 배경으로 PNG를 만드는 방법은 무엇입니까?

분류에서Dev

.xcf 파일 / 이미지를 JPEG 또는 PNG로 변환하는 방법은 무엇입니까?

분류에서Dev

.xcf 파일 / 이미지를 JPEG 또는 PNG로 변환하는 방법은 무엇입니까?

분류에서Dev

제목의 배경색을 투명에서 흰색으로 변경하는 방법은 무엇입니까?

분류에서Dev

투명 png 이미지의 기본 색상을 텍스처로 대체하는 방법은 무엇입니까?

분류에서Dev

투명 png 이미지의 기본 색상을 텍스처로 대체하는 방법은 무엇입니까?

분류에서Dev

Mac OS X에서 투명한 데스크탑 이미지의 배경색을 변경하는 방법은 무엇입니까?

분류에서Dev

열린 CV로 출력 이미지를 잡기 위해 투명한 배경을 설정하는 방법은 무엇입니까?

분류에서Dev

CDE : 배경 화면에 사용하기 위해 jpeg 이미지를 xpm으로 올바르게 변환하는 방법은 무엇입니까?

분류에서Dev

OpenCV를 사용하여 투명한 배경으로 이미지 모양과 일치하는 오버레이를 그리는 방법은 무엇입니까?

분류에서Dev

Android 애니메이션 번역 중에 투명한 배경을 설정하는 방법은 무엇입니까?

분류에서Dev

jpeg 이미지 목록을 읽고 TensorFlow에서 TFRecord로 변환하는 가장 빠른 방법은 무엇입니까?

분류에서Dev

Swift의 하단 패널과 같이 불투명 한 배경을 만드는 방법은 무엇입니까?

분류에서Dev

Android의 Canvas 텍스트에 투명한 배경을 추가하는 방법은 무엇입니까?

분류에서Dev

로컬 파일에 대한 배경 이미지 URL을 설정하는 방법은 무엇입니까?

분류에서Dev

김프에서 투명한 배경 격자를 변경하는 방법은 무엇입니까?

분류에서Dev

투명한 배경과 채우기로 윤곽선 이미지를 오버레이하는 방법은 무엇입니까?

분류에서Dev

Android에서 비트 맵을 jpeg 파일로 변환하는 방법은 무엇입니까?

분류에서Dev

이미지를 저장하지 않고 Numpy 배열 이미지를 JPEG로 변환하는 방법은 무엇입니까?

분류에서Dev

24 비트 JPEG 이미지를 8 비트 이미지로 변환하는 방법은 무엇입니까?

분류에서Dev

Flutter에서 Multi Image Picker를 사용하여 이미지를 선택한 후 이미지 경로를 얻는 방법은 무엇입니까?

분류에서Dev

이미지에서 검정색 배경을 제거하고 opencv를 사용하여 투명하게 만드는 방법은 무엇입니까?

분류에서Dev

배경 이미지로이 입력에 배경색을 다시 추가하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    명령 줄을 사용하여 OS X에서 GIF 파일을 PNG 또는 JPEG로 변환하는 방법은 무엇입니까?

  2. 2

    CALayer 내에서 PNG를 불투명 한 이미지로로드하는 방법은 무엇입니까?

  3. 3

    PNG 이미지를 투명한 GIF로 변환하는 방법은 무엇입니까?

  4. 4

    서명되지 않은 char * 배열에서 jpeg 이미지 배열을 얻는 방법은 무엇입니까?

  5. 5

    Seaborn에서 darkgrid 배경으로 투명한 그림을 얻는 방법은 무엇입니까?

  6. 6

    자바 스크립트를 사용하여 이미지를 PNG에서 JPEG로 변환하는 방법은 무엇입니까?

  7. 7

    Inkscape에서 투명한 배경으로 PNG를 만드는 방법은 무엇입니까?

  8. 8

    .xcf 파일 / 이미지를 JPEG 또는 PNG로 변환하는 방법은 무엇입니까?

  9. 9

    .xcf 파일 / 이미지를 JPEG 또는 PNG로 변환하는 방법은 무엇입니까?

  10. 10

    제목의 배경색을 투명에서 흰색으로 변경하는 방법은 무엇입니까?

  11. 11

    투명 png 이미지의 기본 색상을 텍스처로 대체하는 방법은 무엇입니까?

  12. 12

    투명 png 이미지의 기본 색상을 텍스처로 대체하는 방법은 무엇입니까?

  13. 13

    Mac OS X에서 투명한 데스크탑 이미지의 배경색을 변경하는 방법은 무엇입니까?

  14. 14

    열린 CV로 출력 이미지를 잡기 위해 투명한 배경을 설정하는 방법은 무엇입니까?

  15. 15

    CDE : 배경 화면에 사용하기 위해 jpeg 이미지를 xpm으로 올바르게 변환하는 방법은 무엇입니까?

  16. 16

    OpenCV를 사용하여 투명한 배경으로 이미지 모양과 일치하는 오버레이를 그리는 방법은 무엇입니까?

  17. 17

    Android 애니메이션 번역 중에 투명한 배경을 설정하는 방법은 무엇입니까?

  18. 18

    jpeg 이미지 목록을 읽고 TensorFlow에서 TFRecord로 변환하는 가장 빠른 방법은 무엇입니까?

  19. 19

    Swift의 하단 패널과 같이 불투명 한 배경을 만드는 방법은 무엇입니까?

  20. 20

    Android의 Canvas 텍스트에 투명한 배경을 추가하는 방법은 무엇입니까?

  21. 21

    로컬 파일에 대한 배경 이미지 URL을 설정하는 방법은 무엇입니까?

  22. 22

    김프에서 투명한 배경 격자를 변경하는 방법은 무엇입니까?

  23. 23

    투명한 배경과 채우기로 윤곽선 이미지를 오버레이하는 방법은 무엇입니까?

  24. 24

    Android에서 비트 맵을 jpeg 파일로 변환하는 방법은 무엇입니까?

  25. 25

    이미지를 저장하지 않고 Numpy 배열 이미지를 JPEG로 변환하는 방법은 무엇입니까?

  26. 26

    24 비트 JPEG 이미지를 8 비트 이미지로 변환하는 방법은 무엇입니까?

  27. 27

    Flutter에서 Multi Image Picker를 사용하여 이미지를 선택한 후 이미지 경로를 얻는 방법은 무엇입니까?

  28. 28

    이미지에서 검정색 배경을 제거하고 opencv를 사용하여 투명하게 만드는 방법은 무엇입니까?

  29. 29

    배경 이미지로이 입력에 배경색을 다시 추가하는 방법은 무엇입니까?

뜨겁다태그

보관