[배울랑교AI] 영상 처리

2024. 11. 27. 10:23컴퓨터비전&AI

반응형
  1. 명암도 영상 생성

import cv2

import numpy as np

image1 = np.zeros((50, 512), np.uint8)

image2 = np.zeros((50, 512), np.uint8)

image3 = np.zeros((50, 512), np.uint8)

rows, cols = image1.shape[:2]

for i in range(rows):

for j in range(cols):

image2.itemset((i, j), j // 2)

image3.itemset((i, j), j // 20 * 10)

cv2.imshow("image1", image1)

cv2.imshow("image2", image2)

cv2.imshow("image3", image3)

cv2.waitKey(0)

cv2.destroyAllWindows()

 

 

 

2. 영상 화소값 확인

import cv2

image = cv2.imread("images/pixel.jpg", cv2.IMREAD_GRAYSCALE)

if image is None:

raise Exception("영상 파일 읽기 오류")

(x,y),(w,h) = (180, 37), (15, 10)

roi_img = image[y:y+h, x:x+w]

print('roi_img =', '\n', roi_img)

cv2.rectangle(image, (x,y, w,h), 255, 1)

cv2.imshow("image", image)

cv2.waitKey(0)

cv2.destroyAllWindows()

 

 

 

 

3. 영상 밝기 변화

import cv2

import numpy as np

image = cv2.imread("images/bright.jpg", cv2.IMREAD_GRAYSCALE)

if image is None:

raise Exception("영상 파일 읽기 오류")

add_cv2 = cv2.add(image, 100) # 영상 밝게

sub_cv2 = cv2.subtract(image, 100) # 영상 어둡게

add_np = np.add(image, 100) # 영상 밝게

sub_np = np.subtract(image, 100) # 영상 어둡게

cv2.imshow("image", image)

cv2.imshow("add_cv2(bright) : Saturation", add_cv2)

cv2.imshow("sub_cv2(dark) : Saturation", sub_cv2)

cv2.imshow("add_np(bright) : Modulo", add_np)

cv2.imshow("sub_np(dark) : Modulo", sub_np)

cv2.waitKey(0)

cv2.destroyAllWindows()

 

 

 

4. 영상합성

import cv2

import numpy as np

win_name = 'Alpha blending'

trackbar_name = 'fade'

def onChange(x):

alpha = x/100

dst = cv2.addWeighted(img1, 1-alpha, img2, alpha, 0)

cv2.imshow(win_name, dst)

img1 = cv2.imread('images/man_face.jpg')

img2 = cv2.imread('images/lion_face.jpg')

if img1 is None or img2 is None:

raise Exception("영상 파일 읽기 오류 발생")

cv2.imshow(win_name, img1)

cv2.createTrackbar(trackbar_name, win_name, 0, 100, onChange)

cv2.waitKey()

cv2.destroyAllWindows()

cv2.destroyAllWindows()

 

 

5. 영상 대비변경

import cv2

import numpy as np

image = cv2.imread("images/contrast.jpg",cv2.IMREAD_GRAYSCALE) #이미지를 Grayscale로 읽어 들입니다

if image is None:

raise Exception("영상 파일 읽기 오류 발생")

noimage = np.zeros(image.shape[:2], image.dtype)

#image.shape[:2] : 각 차원의 크기, [:2]를 해주는 이유는 컬러 이미지 shape 에는 가로 세로 말고도 차원 수가 적혀있기 때문

#dtype : 원소의 데이터 타입. 영상 데이터는 uint8

print(image.dtype)

dec_cont = cv2.scaleAdd(image, 0.2, noimage)# cv.scaleAdd(img, scale, add)->명암->img*scale+add

inc_cont = cv2.scaleAdd(image, 2.0, noimage)# cv.scaleAdd(img, scale, add)->명암->img*scale+add

cv2.imshow("image", image)

cv2.imshow("dec_cont", dec_cont)#명암 작아짐 (scale: 0.2이라서)

cv2.imshow("inc_cont", inc_cont)# 명암 커짐 (scale: 2.0이라서)

cv2.waitKey(0)

cv2.destroyAllWindows()

 

 

 

 

6. 컬러 히스토그램 그래프

import cv2

import numpy as np

import matplotlib.pylab as plt #pylab은 pyplot와 numpy를 단일 네임스페이스로 결합한 것

img = cv2.imread('images/mountain.jpg', cv2.IMREAD_COLOR) #사진의 색깔읽기

if img is None:

raise Exception("영상 파일 읽기 오류")

b, g, r = cv2.split(img) # b,g,r로 img를 나눠라

histo1 = cv2.calcHist([b], [0], None, [256], [0, 255])

histo2 = cv2.calcHist([g], [0], None, [256], [0, 255])

histo3 = cv2.calcHist([r], [0], None, [256], [0, 255])

# cv2.calcHist([입력이미지 배열], [인덱스], Mask이미지, [X축요소개수], [Y축 요소 범위 0~255])

plt.figure(figsize=(6,4))

plt.plot(histo1, color='b')

plt.plot(histo2, color='g')

plt.plot(histo3, color='r')

plt.show()

cv2.imshow('img', img)

cv2.waitKey(0)

cv2.destroyAllWindows()

 

 

 

 

6-1. 컬러 히스토그램 그래프

import cv2

import numpy as np

import matplotlib.pylab as plt

img = cv2.imread('images/mountain.jpg', cv2.IMREAD_COLOR)

if img is None:

raise Exception("영상 파일 읽기 오류")

b, g, r = cv2.split(img)

plt.figure(figsize=(6,4))

plt.hist(b.ravel(), 256, [0,255], color='b')

plt.hist(g.ravel(), 256, [0,255], color='g')

plt.hist(r.ravel(), 256, [0,255], color='r')

plt.show()

cv2.imshow('img', img)

cv2.waitKey(0)

cv2.destroyAllWindows()

 

 

 

 

 

6-2. 컬러 히스토그램 그래프

import cv2

import numpy as np

import matplotlib.pylab as plt

img = cv2.imread('images/mountain.jpg', cv2.IMREAD_COLOR)

if img is None:

raise Exception("영상 파일 읽기 오류")

b, g, r = cv2.split(img)

plt.figure(figsize=(6,4))

plt.hist(b.ravel(), 256, [0,255], color='b', alpha=0.8)

plt.hist(g.ravel(), 256, [0,255], color='g', alpha=0.8)

plt.hist(r.ravel(), 256, [0,255], color='r', alpha=0.8)

plt.show()

cv2.imshow('img', img)

cv2.waitKey(0)

cv2.destroyAllWindows()

 

 

 

 

 

6-3 컬러 히스토그램 그래프 저장

import cv2

import numpy as np

import matplotlib.pylab as plt

img = cv2.imread('images/mountain.jpg', cv2.IMREAD_COLOR)

if img is None:

raise Exception("영상 파일 읽기 오류")

b, g, r = cv2.split(img)

plt.figure(figsize=(6,4))

plt.hist(b.ravel(), 256, [0,255], color='b', alpha=0.5)

plt.hist(g.ravel(), 256, [0,255], color='g', alpha=0.3)

plt.hist(r.ravel(), 256, [0,255], color='r', alpha=0.8)

plt.savefig('images/fill_ex.jpg')

plt.savefig('images/fill_ex.pdf', dpi=300) #plt show() 이후에 저장하면 이미지가 안뜬다.

plt.show()

cv2.imshow('img', img)

cv2.waitKey(0)

cv2.destroyAllWindows()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형