작성
·
291
0
안녕하세요 선생님,
혹시 segmentation 진행 후, 해당 객체를 이미지로부터 잘라내고, 다른 이미지를 삽입하는 방법이 있는지,
어떻게 하는지 궁금합니다!!
답변 2
0
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)
감사합니다.