줘이리의 인생적기

CV - opencv(Python) addImage, addWeightedImage, imageThreshold 본문

공부/Computer Vision(py)

CV - opencv(Python) addImage, addWeightedImage, imageThreshold

줘이리 2020. 7. 16. 08:00
728x90

addImage, addWeightedImage, imageThreshold에 대해 알아보도록 하겠습니다.

 

1번 addImage - 이미지합치기

 

2번 addWeightedImage - 각 이미지에 가중치 조절하기

 

 

3번 imageThreshold 

-THRESH_BINARY : 픽셀 값이 설정 값보다 크면 설정 값, 작으면 0으로 할당.

-THRESH_BINARY_INV : 픽셀 값이 설정 값보다 크면 0, 작으면 설정 값으로 할당.

-THRESH_TRUNC : 픽셀 값이 설정 값보다 크면 설정 값, 작으면 픽셀 값으로 할당.

-THRESH_TOZERO : 픽셀 값이 설정 값보다 크면 픽셀 값, 작으면 0으로 할당.

-THRESH_TOZERO_INV : 픽셀 값이 설정 값보다 크면 0, 작으면 픽셀 값 할당.

 

 

코드 원형 설명

#두 이미지 더하기
def addImage(image1, image2):
    return cv2.add(image1, image2)

#각 이미지에 가중치 조절하기
def addWeightedImage(image1, w1, imagw2, w2=None):
    if w2 is None:
        return cv2.addWeighted(image1, float(w1) * 0.01, imagw2, float(100 - w1) * 0.01, 0)
    else:
        return cv2.addWeighted(image1, w1 * 0.01, imagw2, w2 * 0.01, 0)

#threshold 설정하기
def imageThreshold(image, thresh=128, maxval=255, type=cv2.THRESH_BINARY):
    _, res = cv2.threshold(image, thresh=thresh, maxval=maxval, type=type)
    return res

 

1번 코드 설명

더보기
# -*- coding: utf-8 -*-
from OpenCV_Functions import *

#이미지 불러오기
imagePath_1 = "<사진경로>"
imagePath_2 = "<사진경로>"
image_1 = imageRead(imagePath_1) 
image_2 = imageRead(imagePath_2) 

#이미지 합치기
image_sum_1 = addImage(image_1, image_2)
image_sum_2 = image_1 + image_2

#창 설정
print("image_1, value at (463, 175)", getPixel(image_1, 463, 175))
print("image_2, value at (463, 175)", getPixel(image_2, 463, 175))
print("image_sum_1, value at (463, 175)", getPixel(image_sum_1, 463, 175))
print("image_sum_2, value at (463, 175)", getPixel(image_sum_2, 463, 175))

#창 띄우기
imageShow('image_1', image_1)
imageShow('image_2', image_2)
imageShow("image_sum_1", image_sum_1)
imageShow("image_sum_2", image_sum_2)

cv2.destroyAllWindows()

 

2번 코드 설명

더보기
# -*- coding: utf-8 -*-
from OpenCV_Functions import *

def nothing(x):
    pass

#이미지 불러오기
imagePath_1 = "<이미지경로>"
imagePath_2 = "<이미지경로>"
image_1 = imageRead(imagePath_1) 
image_2 = imageRead(imagePath_2) 

#트랙바 설정
cv2.namedWindow('dst', cv2.WINDOW_GUI_EXPANDED)
cv2.createTrackbar('Weighted1', 'dst', 0, 100, nothing)
cv2.createTrackbar('Weighted2', 'dst', 0, 100, nothing)

switch = '0:W2 OFF\n1:W2 On'
cv2.createTrackbar(switch, 'dst', 1, 1, nothing)
dst = imageCopy(image_1)

while True:
    cv2.imshow('dst', dst)

    if cv2.waitKey(1) & 0xFF == 27:
        break

    w1 = cv2.getTrackbarPos('Weighted1', 'dst')
    w2 = cv2.getTrackbarPos('Weighted2', 'dst')
    s = cv2.getTrackbarPos(switch, 'dst')
    
    if s==0:
        dst = addWeightedImage(image_1, w1, image_2)
    else:
        dst = addWeightedImage(image_1, w1, image_2, w2)

cv2.destroyAllWindows()

 

3번 코드 설명

더보기
# -*- coding: utf-8 -*-
from OpenCV_Functions import *

image = np.zeros((512, 512), np.uint8)
for i in range(0, 512):
    for j in range(0, 256):
        image = setPixel(image, i, j, j)
    for j in range(256, 512):
        image = setPixel(image, i, j, 256-j)
imageShow("image", image)

#threshold의 여러 flag
image_THRESH_BINARY = imageThreshold(image, 128, 255, cv2.THRESH_BINARY)
imageShow("THRESH_BINARY", image_THRESH_BINARY)

image_THRESH_BINARY_INV = imageThreshold(image, 128, 255, cv2.THRESH_BINARY_INV)
imageShow("THRESH_BINARY_INV", image_THRESH_BINARY_INV)

image_THRESH_TRUNC = imageThreshold(image, 128, 255, cv2.THRESH_TRUNC)
imageShow("THRESH_TRUNC", image_THRESH_TRUNC)

image_THRESH_TOZERO = imageThreshold(image, 128, 255, cv2.THRESH_TOZERO)
imageShow("THRESH_TOZERO", image_THRESH_TOZERO)

image_THRESH_TOZERO_INV = imageThreshold(image, 128, 255, cv2.THRESH_TOZERO_INV)
imageShow("THRESH_TOZERO_INV", image_THRESH_TOZERO_INV)

cv2.destroyAllWindows()