이미지 스무더

2659 단어 leetcodetheabbiedsa
이미지 스무더는 이미지의 각 셀과 주변 8개 셀의 평균(즉, 파란색 스무더의 9개 셀 평균)을 내림하여 이미지의 각 셀에 적용할 수 있는 크기3 x 3의 필터입니다. 세포의 주변 세포 중 하나 이상이 존재하지 않는 경우 평균(즉, 빨간색 평활기의 4개 세포의 평균)에서 고려하지 않습니다.



이미지의 회색조를 나타내는 m x n 정수 행렬img이 주어지면 이미지의 각 셀에 smoother를 적용한 후 이미지를 반환합니다.

예 1:



입력: img = [[1,1,1],[1,0,1],[1,1,1]]
출력: [[0,0,0],[0,0,0],[0,0,0]]
설명:
포인트 (0,0), (0,2), (2,0), (2,2): floor(3/4) = floor(0.75) = 0
포인트 (0,1), (1,0), (1,2), (2,1): floor(5/6) = floor(0.83333333) = 0
점 (1,1)의 경우: floor(8/9) = floor(0.88888889) = 0

예 2:



입력: img = [[100,200,100],[200,50,200],[100,200,100]]
출력: [[137,141,137],[141,138,141],[137,141,137]]
설명:
포인트 (0,0), (0,2), (2,0), (2,2): floor((100+200+200+50)/4) = floor(137.5) = 137
포인트 (0,1), (1,0), (1,2), (2,1): floor((200+200+50+200+100+100)/6) = floor(141.666667) = 141
점 (1,1)의 경우: floor((50+200+200+200+200+100+100+100+100)/9) = floor(138.888889) = 138

제약:
  • m == img.length
  • n == img[i].length
  • 1 <= m, n <= 200
  • 0 <= img[i][j] <= 255

  • 해결책:

    class Solution:
        def getNeighbors(self, row, col, m, n):
            neighbors = []
            for i in range(row - 1, row + 2):
                for j in range(col - 1, col + 2):
                    if i == row and j == col:
                        continue
                    if i < 0 or i >= m:
                        continue
                    if j < 0 or j >= n:
                        continue
                    neighbors.append((i, j))
            return neighbors
    
        def imageSmoother(self, img: List[List[int]]) -> List[List[int]]:
            imgcp = [row[:] for row in img]
            m = len(img)
            n = len(img[0])
            for i in range(m):
                for j in range(n):
                    nb = self.getNeighbors(i, j, m, n)
                    total = sum([imgcp[a][b] for a, b in nb]) + imgcp[i][j]
                    num = len(nb) + 1
                    img[i][j] = int(total/num)
            return img
    

    좋은 웹페이지 즐겨찾기