OpenCV – Python 영상처리 프로그래밍
강의 슬라이드 199 - OpenCV 점 기반 처리 1
컬러 영상에 대하여 RGB로 구분한 후에 히스토그램을 계산
import cv2
import numpy as np
from matplotlib import pyplot as plt
c_image = cv2.imread('rena.jpg', cv2.IMREAD_UNCHANGED)
c_hist_b = cv2.calcHist([c_image], [0], None, [256], [0, 256])
c_hist_g = cv2.calcHist([c_image], [1], None, [256], [0, 256])
c_hist_r = cv2.calcHist([c_image], [2], None, [256], [0, 256])
plt.title('Histogram')
plt.plot(c_hist_r, color='r')
plt.plot(c_hist_g, color='g')
plt.plot(c_hist_b, color='b')
cv2.imshow("Color image", c_image)
plt.show()
cv2.waitKey(0)
회색조 영상에 대하여 히스토그램을 계산하고 matplotlib 라이브러리를 통하여 그래프로 출력
import cv2
import numpy as np
from matplotlib import pyplot as plt
c_image = cv2.imread('lena-gray.jpg', cv2.IMREAD_GRAYSCALE)
g_hist = cv2.calcHist([c_image], [0], None, [256], [0, 256])
plt.title('Histogram')
plt.plot(g_hist, color='black')
cv2.imshow("Color image", c_image)
plt.show()
cv2.waitKey(0)
회색조 영상에 대하여 ‘a’ 키를 누를 때 마다 밝기 값을 증가시키고, ‘s’ 키를 누를 때 마다 밝기값을 감소
완전 힌색을 만들고 나면 다시 안 돌아옴
import cv2
import numpy as np
from matplotlib import pyplot as plt
g_image = cv2.imread('figures100.jpg', cv2.IMREAD_GRAYSCALE)
while True:
cv2.imshow('Image', g_image)
key = cv2.waitKey(0)
if key == ord('a'):
g_image = cv2.add(g_image, 10)
elif key == ord('s'):
g_image = cv2.subtract(g_image, 10)
else:
break
단순한 대수 연산으로 밝기값을 10씩 증가시키거나 10씩 감소시켜서 오버플로우와 언더플로우가 발생
import cv2
g_image = cv2.imread('figures100.jpg', cv2.IMREAD_GRAYSCALE)
while True:
cv2.imshow('Image', g_image)
key = cv2.waitKey(0)
if key == ord('a'):
g_image = g_image + 10
elif key == ord('s'):
g_image = g_image - 10
else:
break
회색조 영상에 대하여 ‘m’ 키를 누를 때 마다 명암 대비를 증가시키고, ‘d’ 키를 누를 때 마다 명암 대비를 감소
import cv2
g_image = cv2.imread('figures100.jpg', cv2.IMREAD_GRAYSCALE)
while True:
cv2.imshow('Image', g_image)
key = cv2.waitKey(0)
if key == ord('m'):
g_image = cv2.multiply(g_image, 2)
elif key == ord('d'):
g_image = cv2.divide(g_image, 2)
else:
break
회색조 영상에 대하여 수학적으로 반전하거나 비 트 단위 NOT 연산을 적용하여 반전한 영상을 생성
import cv2
g_image = cv2.imread('figures-gray.jpg', cv2.IMREAD_GRAYSCALE)
image1 = cv2.subtract(255, g_image)
image2 = cv2.bitwise_not(g_image)
cv2.imshow('Image', g_image)
cv2.imshow('Inverse Image1', image1)
cv2.imshow('Inverse Image2', image2)
cv2.waitKey(0)
원형의 마스크를 생성하고 입력 영상에 마스크 적용을 통하여 마스크 위치에 해당하는 영상 내용만 출력
import cv2
import numpy as np
org_image = cv2.imread('figures100.jpg', cv2.IMREAD_UNCHANGED)
h, w, c = org_image.shape
#mask
mask = np.zeros((h, w, 3), np.uint8)
cv2.circle(mask, (256, 256), 64, (255, 255, 255), -1) #filled
rst_image = cv2.bitwise_and(org_image, mask)
cv2.imshow('Original', org_image)
cv2.imshow('Mask', mask)
cv2.imshow('Result', rst_image)
cv2.waitKey(0)
원형 마스크 생성, 입력 영상 마스크 적용, 마스크 적용된 영역만 출력 사용자가 j,k,i,m 키보드 누르는 것에 따라서 마스크 위치 20씩 이동
import cv2
import numpy as np
org_image = cv2.imread('figures100.jpg', cv2.IMREAD_UNCHANGED)
h, w, c = org_image.shape
x, y = 255, 255
#mask
while True:
mask = np.zeros((h, w, 3), np.uint8)
cv2.circle(mask, (x, y), 64, (255, 255, 255), -1) #filled
rst_image = cv2.bitwise_and(org_image, mask)
cv2.imshow('Mask', mask)
cv2.imshow('Result', rst_image)
key = cv2.waitKey(0)
if key == ord('j'):
x -= 20
elif key == ord('k'):
x += 20
elif key == ord('i'):
y -= 20
elif key == ord('m'):
y += 20
else:
break
두 장의 컬러 영상에 대하여 ‘1’을 누르면 1번 영 상에 가깝게, ‘2’를 누르면 2번 영상에 가깝게 영상을 합성
import cv2
import numpy as np
f1_image = cv2.imread('fruit1-512.jpg', cv2.IMREAD_UNCHANGED)
f2_image = cv2.imread('fruit2-512.jpg', cv2.IMREAD_UNCHANGED)
alpha = 0.5
while True:
cv2.imshow("f1 image", f1_image)
cv2.imshow("f2 image", f2_image)
key = cv2.waitKey(0)
if key == ord('1'):
alpha -= 0.1
alpha = max(alpha, 0.0)
elif key == ord('2'):
alpha += 0.1
alpha = min(alpha, 1.0) #clipping
else:
break
b_image = cv2.addWeighted(f1_image, 1.0-alpha, f2_image, alpha, 0)
cv2.imshow("Blended Image", b_image)
회색조 영상에 대하여 히스토그램 평준화하여 히 스토그램과 영상을 출력
import cv2
from matplotlib import pyplot as plt
import numpy as np
g_image = cv2.imread('lena-gray.jpg', cv2.IMREAD_GRAYSCALE)
#stretching
n_image = cv2.normalize(g_image, None, 0, 255, cv2.NORM_MINMAX)
g_hist = cv2.calcHist([g_image], [0], None, [256], [0, 256])
n_hist = cv2.calcHist([n_image], [0], None, [256], [0, 256])
plt.title('Histogram')
plt.plot(g_hist, color='gray')
plt.plot(n_hist, color='blue')
cv2.imshow('Gray Image', g_image)
cv2.imshow('Stretch image', n_image)
plt.show()
cv2.waitKey(0)
회색조 영상에 대하여 히스토그램 평준화하여 히 스토그램과 영상을 출력
import cv2
from matplotlib import pyplot as plt
import numpy as np
g_image = cv2.imread('lena-gray.jpg', cv2.IMREAD_GRAYSCALE)
#equalization
n_image = cv2.equalizeHist(g_image)
g_hist = cv2.calcHist([g_image], [0], None, [256], [0, 256])
n_hist = cv2.calcHist([n_image], [0], None, [256], [0, 256])
plt.title('Histogram')
plt.plot(g_hist, color='gray')
plt.plot(n_hist, color='blue')
cv2.imshow('Gray Image', g_image)
cv2.imshow('Stretch image', n_image)
plt.show()
cv2.waitKey(0)
회색조 영상에 대하여 임계값 필터링을 수행
import cv2
from matplotlib import pyplot as plt
import numpy as np
g_image = cv2.imread('fruit1-512.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('Original Image', g_image)
ret, tb_image = cv2.threshold(g_image, 128, 255, cv2.THRESH_BINARY)
ret, bi_image = cv2.threshold(g_image, 128, 255, cv2.THRESH_BINARY_INV)
ret, tr_image = cv2.threshold(g_image, 128, 255, cv2.THRESH_TRUNC)
ret, tz_image = cv2.threshold(g_image, 128, 255, cv2.THRESH_TOZERO)
ret, os_image = cv2.threshold(g_image, 128, 255, cv2.THRESH_OTSU)
cv2.imshow('THRESH_BINARY', tb_image)
cv2.imshow('THRESH_BINARY_INV', bi_image)
cv2.imshow('THRESH_TRUNC', tr_image)
cv2.imshow('THRESH_TOZERO', tz_image)
cv2.imshow('THRESH_OTSU', os_image)
cv2.waitKey(0)
적응적 임계값 필터
입력 영상에 대하여 가로 방향으로 조명 노출된 영상을 생성하고 임계 값 필터링을 수행. ppt 267 page
import cv2
from matplotlib import pyplot as plt
import numpy as np
g_image = cv2.imread('fruit-512-256.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('Original Image', g_image)
h, w = g_image.shape
e_image = g_image.copy()
for i in range(0, 512):
for j in range(0, 256):
value = e_image[j, i] * 0.006 * i
if value > 255:
e_image[j, i] = 255
else:
e_image[j, i] = value
cv2.imshow('Exposed image', e_image)
ret, tb_image = cv2.threshold(e_image, 128, 255, cv2.THRESH_BINARY)
at_image = cv2.adaptiveThreshold(e_image, 255, cv2.ADAPTIVE_THRESH_MEAN_C,
cv2.THRESH_BINARY, 15, 2)
cv2.imshow('Single Threshhold image', tb_image)
cv2.imshow('Adaptive Threshold image', at_image)
cv2.waitKey(0)
'OpenCV' 카테고리의 다른 글
OpenCV Example 36강 (0) | 2024.06.27 |
---|---|
OpenCV Python 고급 활용 강좌 소스 코드 1 (1) | 2023.12.05 |
OpenCV Python 고급 활용 강좌 소스 코드 4 (0) | 2023.12.05 |
OpenCV Python 고급 활용 강좌 소스 코드 3 (0) | 2023.12.05 |
OpenCV Python 고급 활용 강좌 소스 코드 2 (0) | 2023.12.05 |
OpenCV 파이선 강의 실습 코드 4 (2) | 2023.11.29 |
OpenCV 파이선 강의 실습 코드 2 (2) | 2023.11.22 |
OpenCV 파이선 강의 실습 코드 1 (1) | 2023.11.22 |
더욱 좋은 정보를 제공하겠습니다.~ ^^