• 카테고리

    질문 & 답변
  • 세부 분야

    컴퓨터 비전

  • 해결 여부

    미해결

인식한 객체를 이미지에서 잘라내고, 다른 이미지로 대체할 수 있는지 궁금합니다.

22.10.05 07:29 작성 조회수 189

0

안녕하세요 선생님,

혹시 segmentation 진행 후, 해당 객체를 이미지로부터 잘라내고, 다른 이미지를 삽입하는 방법이 있는지,

어떻게 하는지 궁금합니다!!

답변 2

·

답변을 작성해보세요.

0

hgene0929님의 프로필

hgene0929

질문자

2022.10.05

빠른 답변 감사합니다!!
바로 시도해본 후에 더욱 상세하게 남기겠습니다!!
정말 감사합니다!!

0

안녕하십니까,

이게 opencv에서 한번에 가능한 함수가 있는지 잘 모르겠군요.

제 생각에 이렇게 하시면 될것 같은데 테스트는 해보지 않았습니다.

먼저 segmentation inference 결과인 mask 이미지 array가 있을 때

mask_array = inference_segentation결과 반환 array

해당 mask_array에서 값이 0 이상인 위치 인덱스를 뽑아내서 non_zero_indexes에 저장합니다.

non_zero_indexes = np.where(mask_array > 0 )

다음에 원본 이미지 array를 org_img_array라고 하면 원본 이미지의 해당 non_zero_indexes 위치에 있는 원소값을 모두 0으로 만듭니다.

org_img_array[non_zero_indexes] = 0

이렇게 하면 원본 이미지에서 segmentation mask결과 영역만 검은색으로 표시됩니다.

이제 덮어 씌우려는 새로운 이미지를 해당 영역만 제외하고 나머지 영역은 mask를 적용하듯이 모두 0으로 만듭니다. 이렇게 만든 새로운 이미지를 new_img_array라고 하겠습니다.

그런 다음 opencv의 add() 연산을 이용하여 org_img_array와 new_img_array를 더하면 원하시는 이미지가 만들어 질것 같습니다.

added_new_img_array = cv2.add(org_img, array, new_img_array)

감사합니다.