소스 뷰어
import numpy as np, cv2, time
import matplotlib.pyplot as plt
def pixel_access_1_direct_access(image):
image1 = np.zeros(image.shape[:2], image.dtype)
for i in range(image.shape[0]):
for j in range(image.shape[1]):
pixel = image[i,j] # 화소 접근
image1[i, j] = 255 - pixel # 화소 할당
return image1
def pixel_access_2_lut(image):
lut = [255 - i for i in range(256)] # 룩업테이블 생성
lut = np.array(lut, np.uint8)
image3 = lut[image]
return image3
def pixel_access_3_numpy(image):
image5 = 255 - image
return image5
def pixel_access_4_opencv(image):
image4 = cv2.subtract(255, image)
return image4
image_org_gray = cv2.imread("example.jpg", cv2.IMREAD_GRAYSCALE)
# 수행시간 체크
def time_check(func, msg):
start_time = time.perf_counter()
ret_img = func( image_org_gray )
elapsed = (time.perf_counter() - start_time) * 1000
print(msg, "수행시간 : %.2f ms" % elapsed)
return ret_img
pass
image_1_direct_access = time_check( pixel_access_1_direct_access, "[방법 1] 직접 접근 방식" )
image_2_lut = time_check( pixel_access_2_lut, "[방법 2] 룩업 테이블 방식" )
image_3_numpy = time_check( pixel_access_3_numpy, "[방법 3] Numpy 연산 방식" )
image_4_opencv = time_check( pixel_access_4_opencv, "[방법 4] OpenCV 함수 방식" )
plt.figure(figsize=(16, 8))
# 원본 이미지 (RGB)
plt.subplot(2, 3, 1)
plt.title('image - original')
plt.imshow(image_org_gray, cmap='gray', vmin=0, vmax=255)
plt.subplot(2, 3, 2)
plt.title('image1 - directly access to pixel')
plt.imshow(image_1_direct_access, cmap='gray', vmin=0, vmax=255)
plt.subplot(2, 3, 3)
plt.title('image2 - LUT')
plt.imshow(image_2_lut, cmap='gray', vmin=0, vmax=255)
plt.subplot(2, 3, 4)
plt.title('image3 - Numpy' )
plt.imshow(image_3_numpy, cmap='gray', vmin=0, vmax=255)
plt.subplot(2, 3, 5)
plt.title('image4 - OpenCV')
plt.imshow(image_4_opencv, cmap='gray', vmin=0, vmax=255)
plt.axis('off')
plt.tight_layout()
plt.show()