import cv2
# 이미지 읽기
img = cv2.imread('input.jpg')
# 이미지 표시
cv2.imshow('Image',img)
cv2.waitKey(0)
cv2.destoryAllWindow()
# 이미지 저장
cv2.imwrite('output.jpg',img)import cv2
# 이미지 읽기
img = cv2.imread('input.jpg')
# 그레이스케일 변환
gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 변환된 이미지 표시
cv2.imshow('Grayscale Image', gray_img)
cv2.waitKey(0)
cv2.destroyAllWindows()import cv2
# 이미지 읽기
img = cv2.imread('input.jpg')
# 이미지 리사이즈
resized_img = cv2.resize(img,(200,200))
# 리사이즈된 이미지 표시
cv2.imshow('Resized Image', resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()import cv2
# 이미지 읽기
img = cv2.imread('input.jpg')
# 이미지 중심을 기준으로 90도 회전
height, width = img.shape[:2] #print(img.shape) #(1666, 1930, 3)
center =(width/2, height/2)
rotate_matrix =
cv2.getRotationMatrix2D(center = center, angle = 90, scale = 1)
# rotate_matrix는 회전시킬 때 필요한 matrix
# scale 매개변수는 회전 후 이미지의 크기를 조절
rotated_img =
cv2.warpAffine( src = img, M = rotate_matrix, dsize = (width,height))
# 이미지의 이동, 회전, 크기 조절 및 기타 변환을 수행하는 함수
# 회전된 이미지 표시
cv2.imshow('회전된 이미지',rotated_img)
cv2.waitKey(0)
cv2.destroyAllWindows()import cv2
# 이미지 읽기
img = cv2.imread('input.jpg')
# 가우시안 블러 적용
blurred_img = cv2.GaussianBlur(img, (5,5), 0) # (src,ksize,sigmaX)
# sigmaX,ksize는 크기가 클수록 블러링의 효과가 강해지고,
# 작을수록 블러링의 효과가 약해짐
# (sigmaY를 생략하면, OpenCV는 자동으로 sigmaX와 동일한 값을 사용)
# 블러된 이미지 표시
cv2.imshow('블러된 이미지', blurred_img)
cv2.waitKey(0)
cv2.destroyAllWindows()import cv2
# 이미지 읽기
img = cv2.imread('input.jpg')
# 그레이스케일 변환
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Canny edge detection 적용
edges = cv2.Canny(image = gray_img, threshold1 = 100, threshold2 = 200)
# 경계가 감지된 이미지 표시
cv2.imshow('경계가 감지된 이미지', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
'''
Canny 엣지 검출은
먼저 전체 이미지에서 엣지 후보를 찾고,
그 다음에 낮은 임계값과 높은 임계값을 사용하여 이를 정리합니다.
Canny 엣지 검출에서 threshold는
엣지로 간주될 픽셀의 강도를 결정하는 임계값입니다.
이것은 두 가지 임계값으로 구성됩니다:
1.낮은 임계값 (Low Threshold):
이 임계값 이하의 엣지 픽셀은 엣지로 간주되지 않습니다.
이것은 약한 엣지를 식별하는 데 사용됩니다.
(약한 엣지는 주로 엣지가 될 가능성이 있는 픽셀이지만,
이웃 픽셀들과 비교하여 상대적으로 강도가 낮은 픽셀을 의미합니다.)
2.높은 임계값 (High Threshold):
이 임계값 이상의 엣지 픽셀은 강한 엣지로 간주됩니다.
이것은 실제 엣지로 간주되기 위해 충족해야하는 엣지 픽셀의 강도를 결정합니다.
'''import cv2
# 얼굴 감지를 위한 분류기 로드
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# 이미지 읽기
img = cv2.imread('input.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 얼굴 감지
faces = face_cascade.detectMultiScale(gray, 1.1, 4)
# 1.1은 이미지의 각 스케일에서
# 객체 크기를 얼마나 줄일지를 결정하는 스케일 팩터 (기본값은 1.3)
# 4는 이웃 사각형의 갯수를 나타냄 (기본값은 3)
# 높을수록 더 높은 신뢰성을 가지지만 처리 속도는 느려짐
# 감지된 얼굴 주위에 사각형 그리기
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
# 결과 이미지 표시
cv2.imshow('감지된 얼굴', img)
cv2.waitKey(0)
cv2.destroyAllWindows()import cv2
# 동영상 파일 열기
cap = cv2.VideoCapture('video.mp4')
# 출력 파일 설정
fourcc = cv2.VideoWriter_fourcc(*'MP4V') # 출력 파일의 코덱 설정
out = cv2.VideoWriter('output_video.mp4', fourcc, 20.0, (640, 480), isColor=False)
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# 프레임을 그레이스케일로 변환
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 변환된 프레임을 출력 파일에 쓰기
out.write(gray)
# 변환된 프레임을 화면에 표시
cv2.imshow('frame', gray)
if cv2.waitKey(1) == ord('q'):
break
# 작업 완료 후 해제
cap.release()
out.release()
cv2.destroyAllWindows()import cv2
img = cv2.imread('input.jpg')
cv2.imshow("주어진 컬러 이미지",img)
# 그레이스케일로 변환
grayscale_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow("그레이스케일로 변환한 이미지",grayscale_img)
cv2.waitKey(0)
cv2.destroyAllWindows()import cv2
img = cv2.imread('input.jpg')
cv2.imshow("given image",img)
# 이미지의 크기를 절반으로
width, height = img.shape[:2]
res_img = cv2.resize(img,(int(width/2),int(height/2)))
cv2.imshow("resized_image",res_img)
cv2.waitKey(0)
cv2.destroyAllWindows()import cv2
img = cv2.imread('input.jpg')
cv2.imshow('image',img)
# 90도 회전
width, height = img.shape[:2]
img_center = (width/2,height/2)
#회전시킬 때 필요한 행렬 rotate_matrix
rotate_matrix = cv2.getRotationMatrix2D(center = img_center, angle = 90, scale = 1.0)
rotated_img = cv2.warpAffine(src = img, M = rotate_matrix, dsize = (width,height))
cv2.imshow('rotated_img',rotated_img)
cv2.waitKey(0)
cv2.destroyAllWindows()import cv2
img = cv2.imread("input.jpg")
cv2.imshow('img',img)
# 가우시안 블러를 적용
Gaussian_img = cv2.GaussianBlur(src = img, ksize=(5,5),sigmaX=0)
cv2.imshow('Gaussian_img',Gaussian_img)
cv2.waitKey(0)
cv2.destroyAllWindows()import cv2
img = cv2.imread('input.jpg')
cv2.imshow('img',img)
# 잘 감지할 수 있도록 그레이스케일로 전처리
gray_img = cv2.cvtColor(src=img,code=cv2.COLOR_BGR2GRAY)
cv2.imshow('gray_img',gray_img)
# Canny 알고리즘을 사용하여 이미지의 경계를 감지
canny_img = cv2.Canny(image=img,threshold1=100,threshold2=200)
cv2.imshow('canny_img',canny_img)
cv2.waitKey(0)
cv2.destroyAllWindows()import cv2
import numpy as np
img = cv2.imread('input2.jpg')
cv2.imshow('img',img)
# 빨간색만 검출
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # BGR에서 HSV로 변환
# 빨간색의 범위 지정
lower_red = np.array([0, 100, 100])
upper_red = np.array([1, 255, 255])
# HSV 이미지에서 빨간색에 해당하는 영역을 마스킹
mask = cv2.inRange(hsv_img, lower_red, upper_red)
# 결과 이미지 생성
result = cv2.bitwise_and(img, img, mask=mask)
# 결과 출력
cv2.imshow("result ", result)
cv2.waitKey(0)
cv2.destroyAllWindows()import cv2
img = cv2.imread('input.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 얼굴 감지를 위한 분류기 로드
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# 얼굴 감지
faces = face_cascade.detectMultiScale(gray)
# 감지된 얼굴 주위에 사각형 그리기
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 5)
# 결과 이미지 표시
cv2.imshow('detected_faces', img)
cv2.waitKey(0)
cv2.destroyAllWindows()