Skip to content
Snippets Groups Projects
Commit 94b83691 authored by Hyunseok_Sang's avatar Hyunseok_Sang
Browse files

Image와 그것을 상속한 객체 작성

parent 046f3b67
No related branches found
No related tags found
No related merge requests found
from models.composited_image import CompositedImage
from models.builders.image_builder import ImageBuilder
class CompositedImageBuilder(ImageBuilder):
def create_image(self):
return CompositedImage()
def set_outer_image(self, outer_image):
self.image.outer_image = outer_image
return self
def set_inner_image(self, inner_image):
self.image.inner_image = inner_image
return self
def set_composited_image(self, composited_image):
self.image.composited_image = composited_image
return self
def set_x_offset(self, x_offset):
self.image.x_offset = x_offset
return self
def set_y_offset(self, y_offset):
self.image.y_offset = y_offset
return self
def build(self):
return self.image
\ No newline at end of file
from models.image import Image
from abc import ABC, abstractmethod
class ImageBuilder(ABC):
def __init__(self) -> None:
self.image = self.create_image()
@abstractmethod
def create_image(self):
pass
def set_np_image(self, np_image):
self.image.np_image = np_image
self.image.set_shape()
return self
def set_url(self, url):
self.image.url = url
return self
def set_id(self, id):
self.image.id = id
return self
def build(self):
return self.image
\ No newline at end of file
from models.mask import Mask
from models.builders.image_builder import ImageBuilder
class MaskBuilder(ImageBuilder):
def create_image(self):
return Mask()
def set_np_image(self, np_image):
super().set_np_image(np_image)
self.image.set_smallest_box()
self.image.check_touching_border()
'''
상태를 가질 책임은 본인에게 있다. 하지만 그 상태를 확인하기 위해 많은 자원이 필요하기에, 매번 확인하기 부담스럽다면
언제 그 상태를 확인하도록 해야하는가?
'''
return self
from models.image import Image
class CompositedImage(Image):
def __init__(self) -> None:
super().__init__()
self.outer_image = None
self.inner_image = None
self.composited_image = None
self.x_offset = None
self.y_offset = None
\ No newline at end of file
from abc import ABC, abstractmethod
class Image(ABC):
def __init__(self):
self.np_image = None
self.height = None
self.width = None
self.url = None
self.id = None
def set_shape(self):
self.height, self.width = self.np_image.shape[:2]
import cv2
import numpy as np
from models.image import Image
class Mask(Image):
def __init__(self):
super().__init__()
self.smallest_box_x = None
self.smallest_box_y = None
self.smallest_box_width = None
self.smallest_box_height = None
self.touch_border_left = None
self.touch_border_top = None
self.touch_border_right = None
self.touch_border_bottom = None
def set_smallest_box(self):
contours, _ = cv2.findContours(self.np_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 모든 객체의 윤곽선을 하나의 리스트로 병합
all_contours = np.concatenate(contours)
# 윤곽선을 감싸는 최소 사각형 좌표 계산
object_x, object_y, object_w, object_h = cv2.boundingRect(all_contours)
self.smallest_box_x = object_x
self.smallest_box_y = object_y
self.smallest_box_width = object_w
self.smallest_box_height = object_h
def get_long_side_length(self):
if self.smallest_box_height >= self.smallest_box_width:
return self.smallest_box_height
else:
return self.smallest_box_width
def check_touching_border(self, extra = 10):
if self.smallest_box_x <= extra + 0:
self.touch_border_left = True
else:
self.touch_border_left = False
if self.smallest_box_y <= extra + 0:
self.touch_border_top = True
else:
self.touch_border_top = False
if self.smallest_box_x + self.smallest_box_width >= self.width - extra:
self.touch_border_right = True
else:
self.touch_border_right = False
if self.smallest_box_y + self.smallest_box_height >= self.height - extra:
self.touch_border_bottom = True
else:
self.touch_border_bottom = False
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment