open CV 4_ 이미지 특징

chi yeong Yu·2022년 2월 16일
0

opencv

목록 보기
4/12

이미지 특징을 알아보자

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()

끝 !!!! :)

profile
호기심천국

0개의 댓글