이미지 특징을 알아보자
import cv2
from matplotlib import pyplot as plt
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE) # color는 error가 발생.. 왜그럴까..
max_value = 255 # 픽셀 강도의 최대값을 결정
n_size = 99
subtract = 10
binary_image = cv2.adaptiveThreshold(image,
max_value,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C, # 픽셀 임계값을 주변 픽셀 강도의 가중치 합
cv2.THRESH_BINARY,
n_size,
subtract)
plt.imshow(binary_image, 'gray')
plt.axis('off')
plt.show()
import cv2
from matplotlib import pyplot as plt
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
max_value = 255 # 픽셀 강도의 최대값을 결정
n_size = 99
subtract = 10
mean_image = cv2.adaptiveThreshold(image,
max_value,
cv2.ADAPTIVE_THRESH_MEAN_C, # 픽셀 임계값을 주변 픽셀의 평균으로 설정
cv2.THRESH_BINARY,
n_size,
subtract)
plt.imshow(mean_image, 'gray')
plt.axis('off')
plt.show()
import cv2
import numpy as np
from matplotlib import pyplot as plt
image = cv2.imread('image.jpg')
median_image = np.median(image) # 픽셀 강도의 중간값
#중간 픽셀 강도에서 위아래 1 표준 편차를 구해 떨어진 값을 임계값으로 설정
lower_threshold = int(max(0, (1.0-0.33) * median_image))
upper_threshold = int(min(250, (1.0 + 0.33) * median_image))
image_canny = cv2.Canny(image, lower_threshold, upper_threshold)
# canny -> 경계선 구하는 방법 !!!! 비전에 주요 관심사라 하니 중요하게 생각하자.
plt.imshow(image_canny,'gray')
plt.axis('off')
plt.show()
import cv2
import numpy as np
from matplotlib import pyplot as plt
image = cv2.imread('image.jpg', cv2.IMREAD_COLOR)
rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # RGB로 변환
rectangle = (0, 56, 800, 500) # 시작점 x, 시작점 y, 너비, 높이
mask = np.zeros(rgb_image.shape[:2], np.uint8)
bgdmodel = np.zeros((1, 65), np.float64)
fgdmodel = np.zeros((1, 65), np.float64)
cv2.grabCut(rgb_image, # 원본 이미지
mask,# 마스크
rectangle,# 사각형
bgdmodel,# 배경을 위한 임시 배열
fgdmodel,# 배경제외를 위한 임시 배열
3,# 반복 횟수
cv2.GC_INIT_WITH_RECT) # 사각형을 사용한 초기화
# 배경인 곳은 0, 배경 제외는 1로 설정
mask2 = np.where((mask==2) | (mask==0), 0, 1).astype('uint8')
# 이미지에 새로운 마스크를 곱해 배경을 제외
image_nobg = rgb_image * mask2[:,:, np.newaxis]
plt.imshow(image_nobg)# 이미지
plt.axis('off')
plt.show()
plt.imshow(mask, 'gray') # 마스크
plt.axis('off')
plt.show()
plt.imshow(mask2, 'gray') # 완전한 마스크
plt.axis('off')
plt.show()
import cv2
import numpy as np
from matplotlib import pyplot as plt
image = cv2.imread('image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
image_gray = np.float32(gray)
block_size = 2 # 모서리 감지 변수
aperture = 29 # 29 밑, 위로 error 발생
free_parameter=0.07 # 파라미터 수가 커질 수록 오래 걸림
detector = cv2.cornerHarris(image_gray,
block_size,
aperture,
free_parameter)
detector = cv2.dilate(detector, None) # 모서리 부각 시키기
threshold = 0.05 # 임계값 설정
image[detector > threshold * detector.max()] = [255, 255, 255]
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
plt.imshow(image_gray, 'gray')
plt.axis('off')
plt.show()
plt.imshow(detector, 'gray')
plt.axis('off')
plt.show()
import cv2
from matplotlib import pyplot as plt
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
# 이미지가 흑백 일 때 각 픽셀은 하나의 값으로 표현 됨
image_10 = cv2.resize(image, (50, 50)) # 50x50 픽셀 크기로 변환
image_10.flatten() # 1차원으로 변환
plt.imshow(image_10, 'gray')
plt.axis('off')
plt.show()