Category: Python

  • 두 개의 이미지 겹치기

    img1이 있고, img2에 해당하는 부분을 흐리게 보일 때 사용하는 방법이다. 여러가지 방법이 있을 것 같으나, 내가 사용한 방법은 다음과 같다.

    보통 마스킹 이미지는 배경이 검고, 보여줄 부분은 하얗게 만든다. bitwise를 이용하면 어떻게 하던지 한 쪽 밖에는 볼 수 없다. 그래서 두 장의 이미지를 서로 겹치게 하는 addWeighted를 이용한다.

    원래 이미지와 같은 크기를 가지는 3채널 이미지 array를 만든다. zeros_like를 이용하면 0 값을 가진 것을 쉽게 만들 수 있다.

    img2 = numpy.zeros_like(img1)

    본인이 원하는 부분에 적절히 흰색의 값인 255를 입력해 둔다. 그리고 반전한다. 반전을 해야 관심이 없는 부분을 흐리게 만들기가 수월하다. 반전 이미지는 img2에 bitwise_not를 적용시키면 얻을 수 얻을 수 있다.

    img2 = cv2.bitwise_not(img2)
    

    다음과 같이 img1과 img2를 겹친다.

    masked = cv2.addWeighted(img1, 1, img2, 0.1, 0)
    

    이러면 예쁘지는 않지만 관심없는 부분을 조금 옅게 볼 수 있다.

  • 문자열에서 특정 단어 포함하는 단어 찾기, 단어에서 글자 위치 찾기

    R에서도 할 수 있는 것은 Python에서도 할 수 있다.

    우선 특정 폴더의 파일 목록을 추출하기는 다음과 같다.

    import os
    os.listdir(폴더경로)

    이 파일 목록에서 특정 단어가 포함된 파일명 만을 선택하기. 대괄호로 묶여야 한다.

    ii = [i for i in os.listdir(폴더경로) if '찾을 단어' in i]

    그 다음에 해야할 일은 쉽게 말해서확장자가 포함된 파일명에서 확장자를 뺀 부분을 선택하는 것이다. find를 이용한다.

    i[0:i.find('.tif')]

    그 다음번으로 사용하는 기능은 단어를 없애기. 특정 단어를 없애고 싶을 때에는 .strip을 이용한다. 파일명을 fname으로 받아왔고, ‘.tif’를 없애고 싶다면 다음과 같이 하면 된다.

    fname.strip('.tif')

    단어 분할하기는 .split()을 이용한다. ‘_’를 기준으로 글자를 분할 할 때는 다음과 같다.

    fname.split('_')
  • dataloader 에서 파일 이름 알아내기

    GPU도 없고, 오래된 느린 CPU를 가진 녀석이지만 기본 코딩은 할 수 있을 것이라는 생각으로 다시 코딩하기 시작함. 일단 dataloader에서 파일명을 알아야 할 때에는 다음과 같이 할 수 있다.

    dataloaders = torch.utils.data.DataLoader(
      torchvision.datasets.ImageFolder(
      root='/home/byun1114/JUPYTER/DATA', 
    transform=data_transforms))

    보통 이와 유사하게 코딩을 하게 된다. torch.utils.data.DataLoader의 기본 옵션은 batch_size는 1이고 shuffle=False 라는 것을 알아야 한다. 하나씩 비교할 것이기 때문에 불필요한 옵션은 생략하였다. 이런 식으로 코딩을 한다면 파일명은 다음과 같이 확인한다.

    dataloaders.dataset.imgs
  • 리스트에서 분할하여 중복 제거하기

    R에서는 조금 쉽게 할 수 있는데, Python에서는 조금 더 복잡하게 해야 한다. 텍스트 리스트에서 일괄적으로 분할하는 split을 이용할 수가 없었기 때문에 하나씩 split으로 분할한 후에 리스트를 새로 만들고, 중복을 제거시키도록 한다.

    ii = []
    

    ii 라는 빈 리스트를 만든다.

    for i in file_A:
        ii.append(i.split('_')[0])
    

    그 다음 file_A로 만들어둔 파일 목록을 불러온다. 증례 번호가 가장 앞에 있고, 그 다음에는 언더바가 있는 구조였기 때문에 ‘_’로 분할한 첫 번째 것을 선택하여 ii에 계속 입력한다.

    ii = list(set(ii))

    set()을 이용하면 중복을 제거할 수 있고, 이 것을 다시 리스트로 만들어야 한다.