본문 바로가기

OpenCV

OpenCV 파이선 강의 실습 코드 3

반응형

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)

 

 

 

 

 

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

귀사가 성공하기까지의 긴 고난의 시간을 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩