일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- opencv
- AWS
- matplotlib
- javascript
- Method
- tensorflow
- analyzing
- ECS
- instance
- data
- Project
- DANAWA
- 애자일
- 크롤링
- angular
- Crawling
- 프로젝트
- data analyze
- 자바스크립트
- visualizing
- webcrawling
- 다나와
- Agile
- pandas
- TypeScript
- python
- Scrum
- algorithm
- keras
- adaptive life cycle
Archives
- Today
- Total
LiJell's 성장기
07. OpenCV Point Processing (7편) 본문
반응형
2022.01.28 - [Bigdata/OpenCV] - 08. OpenCV Histogram Modification (8편)
2022.01.27 - [Bigdata/OpenCV] - 06. OpenCV 키보드 마우스 이벤트 처리 (6편)
7. OpenCV Point Processing
7.1. histogram sliding
import numpy as np
import sys
import cv2
7.1.1. 흑백 GrayScale
src = cv2.imread('./fig/lenna.bmp', cv2.IMREAD_GRAYSCALE)
if src is None:
print('image read failed')
sys.exit()
# histogram sliding 0보다 작으면 0으로 255보다 크면 255로
# cliping 은 float 연산만 가능하기 때문에 float 값을 입력하고 다시 uint8로 변환해줘야 함
dst = np.clip(src + 100., 0, 255).astype(np.uint8)
cv2.imshow('src',src)
cv2.imshow('dst',dst)
cv2.waitKey()
cv2.destroyAllWindows()
- 더 쉬운 방법
src = cv2.imread('./fig/lenna.bmp', cv2.IMREAD_GRAYSCALE)
if src is None:
print('image read failed')
sys.exit()
# 원큐에 가능 clipping 까지 해줌
dst = cv2.add(src, 100)
cv2.imshow('src',src)
cv2.imshow('dst',dst)
cv2.waitKey()
cv2.destroyAllWindows()
7.1.2. 컬러 Color
src = cv2.imread('./fig/lenna.bmp', cv2.IMREAD_COLOR)
if src is None:
print('image read failed')
sys.exit()
# 원큐에 가능 clipping 까지 해줌
# 하지만, 이렇게 하면 앞에만 더해짐 B 만.
dst = cv2.add(src, 100)
cv2.imshow('src',src)
cv2.imshow('dst',dst)
cv2.waitKey()
cv2.destroyAllWindows()
- 따라서 아래와 같은 방법으로 해야한다
src = cv2.imread('./fig/lenna.bmp', cv2.IMREAD_COLOR)
if src is None:
print('image read failed')
sys.exit()
# 원큐에 가능 clipping 까지 해줌
dst = cv2.add(src, (100, 100, 100, 0)) # 이케 해줘야함
# 사실 이렇게 가능하지만 color space를 바꿔서 변환해줘야함
cv2.imshow('src',src)
cv2.imshow('dst',dst)
cv2.waitKey()
cv2.destroyAllWindows()
7.1.3. 여러가지 연산
import numpy as np
import sys
import cv2
import matplotlib.pyplot as plt
src1 = cv2. imread('./fig/lenna256.bmp', cv2.IMREAD_GRAYSCALE)
# h, w = src1.shape[:2] 이렇게 하면 사실 좋음
src2 = np.zeros_like(src1, dtype = np.uint8)
cv2.circle(src2, (128,128), 100, 200, -1)
cv2.circle(src2, (128,128), 50, 50, -1)
dst1 = cv2.add(src1, src2)
dst2 = cv2.addWeighted(src1, 0.5, src2, 0.5, 0.0)
dst3 = cv2.subtract(src1, src2) # 순서 중요
dst4 = cv2.absdiff(src1, src2)
cv2.imshow('src1', src1)
cv2.imshow('src2', src2)
cv2.imshow('dst1', dst1)
cv2.imshow('dst2', dst2)
cv2.imshow('dst3', dst3)
cv2.imshow('dst4', dst4)
cv2.waitKey()
cv2.destroyAllWindows()
7.1.4. matplotlib로 해보기
import numpy as np
import sys
import cv2
import matplotlib.pyplot as plt
src1 = cv2. imread('./fig/lenna256.bmp', cv2.IMREAD_GRAYSCALE)
# h, w = src1.shape[:2] 이렇게 하면 사실 좋음
src2 = np.zeros_like(src1, dtype = np.uint8)
cv2.circle(src2, (128,128), 100, 200, -1)
cv2.circle(src2, (128,128), 50, 50, -1)
dst1 = cv2.add(src1, src2)
# dst2 = cv2.addWeighted(src1, 0.5, src2, 0.5, 0.0)
dst2 = cv2.addWeighted(src1, 0.7, src2, 0.3, 0.0)
dst3 = cv2.subtract(src1, src2) # 순서 중요
dst4 = cv2.absdiff(src1, src2)
plt.figure(figsize = (12, 6))
# 2행 3열에 1번째
plt.subplot(231), plt.imshow(src1, cmap = 'gray'), plt.axis('off'),plt.title('src1')
plt.subplot(232), plt.imshow(src2, cmap = 'gray'), plt.axis('off'),plt.title('src2')
plt.subplot(233), plt.imshow(dst1, cmap = 'gray'), plt.axis('off'),plt.title('add')
plt.subplot(234), plt.imshow(dst2, cmap = 'gray'), plt.axis('off'),plt.title('addweighted')
plt.subplot(235), plt.imshow(dst3, cmap = 'gray'), plt.axis('off'),plt.title('subtract')
plt.subplot(236), plt.imshow(dst4, cmap = 'gray'), plt.axis('off'),plt.title('absdiff')
plt.show()
7.1.5. bitwise
src1 = np.zeros((256, 256), np.uint8)
cv2.rectangle(src1, (10, 10), (127, 248), 255, -1)
src2 = np.zeros((256, 256), np.uint8)
cv2.circle(src2, (128, 128), 100, 255, -1)
cv2.imshow('src1', src1)
cv2.imshow('src2', src2)
cv2.waitKey()
cv2.destroyAllWindows()
src1 = np.zeros((256, 256), np.uint8)
cv2.rectangle(src1, (10, 10), (127, 248), 255, -1)
src2 = np.zeros((256, 256), np.uint8)
cv2.circle(src2, (128, 128), 100, 255, -1)
dst_bit_and = cv2.bitwise_and(src1, src2)
dst_bit_or = cv2.bitwise_or(src1, src2)
dst_bit_xor = cv2.bitwise_xor(src1, src2) # 둘중 한군데만 있을 때
dst_bit_not = cv2.bitwise_not(src1) # 아닌 부분
plt.figure(figsize = (12, 6))
plt.subplot(231), plt.axis('off'), plt.imshow(src1, 'gray'), plt.title('src1')
plt.subplot(232), plt.axis('off'), plt.imshow(src2, 'gray'), plt.title('src2')
plt.subplot(233), plt.axis('off'), plt.imshow(dst_bit_and, 'gray'), plt.title('dst_bit_and')
plt.subplot(234), plt.axis('off'), plt.imshow(dst_bit_or, 'gray'), plt.title('dst_bit_or')
plt.subplot(235), plt.axis('off'), plt.imshow(dst_bit_xor, 'gray'), plt.title('dst_bit_xor')
plt.subplot(236), plt.axis('off'), plt.imshow(dst_bit_not, 'gray'), plt.title('dst_bit_not_src1')
plt.show()
cv2.waitKey()
cv2.destroyAllWindows()
7.1.6. 컬러영상 연산하기
src = cv2.imread('./fig/flowers.jpg')
print(src.shape)
cv2.imshow('src', src)
b, g, r = cv2.split(src)
print(type(b))
'''
<class 'numpy.ndarray'>
'''
# 즉 각각 grayscale로 나옴
cv2.imshow('b', b)
cv2.imshow('g', g)
cv2.imshow('r', r)
cv2.waitKey()
cv2.destroyAllWindows()
- b, g ,r 순 ( 모든 b, g , r 값이 높아야 흰색이 나오기 때문에 흰 부분도 값이 높게 나온다)
7.1.7. 컬러영상 합치기
src = cv2.imread('./fig/flowers.jpg')
print(src.shape)
cv2.imshow('src', src)
b, g, r = cv2.split(src)
print(type(b))
'''
<class 'numpy.ndarray'>
'''
# 즉 각각 grayscale로 나옴
dst = cv2.merge((b, g, r))
# cvtColor 메뉴얼로 하는 방식임
dst1 = cv2.merge((r, g, b))
dst2 = cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)
cv2.imshow('src', src)
cv2.imshow('dst', dst)
cv2.imshow('dst1', dst1)
cv2.imshow('dst2', dst2)
cv2.waitKey()
cv2.destroyAllWindows()
7.2. 영상 히스토그램 그리기
7.2.1. hsv로 변환하기
- h: 색상
- s: 채도
- v: 명도
src = cv2.imread('./fig/flowers.jpg', cv2.IMREAD_COLOR)
if src is None:
print('image read failed')
sys.exit()
src_hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(src_hsv)
# h = 0~ 179 까지
dst = cv2.merge((h, s, v))
cv2.imshow('src', src)
cv2.imshow('h', h)
cv2.imshow('s', s)
cv2.imshow('v', v)
cv2.waitKey()
cv2.destroyAllWindows()
7.2.2. Grayscale histogram 그려보기
src = cv2.imread('./fig/lenna.bmp', 0)
# cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]]) -> hist
# images: 입력영상 리스트(리스트로 입력)
# channels: 채널리스트, 3 채널의 경우 [0,1,2]
# mask: 마스크 영상입력, 영상전체는 None으로 지정
# histSize: 히스터그램 빈의 크기 # 256하면 하니싹 나오고 128하면 0~1 은 1, 2~3은 2 이런식
# range: 히스토그램의 최솟값과 최댓값
# hist: 계산된 히스토그램, numpy.ndarray 타입
# accumulate: 기존의 히스토그램을 누적할경우 True
# images 라서 리스트로 묶어서 넣어줘야함
hist= cv2.calcHist([src], [0], None, [256], [0, 256])
cv2.imshow('src', src)
plt.plot(hist)
plt.show()
cv2.waitKey()
cv2.destroyAllWindows()
7.2.3. Color histogram 그려보기
# 컬러 영상의 히스토그램
src = cv2.imread('fig/lenna.bmp')
if src is None:
print('Image load failed!')
sys.exit()
# b, g, r = cv2.split(src)
hist_b = cv2.calcHist([src], [0], None, [256], [0, 256])
hist_g = cv2.calcHist([src], [1], None, [256], [0, 256])
hist_r = cv2.calcHist([src], [2], None, [256], [0, 256])
plt.plot(hist_b, color = "b")
plt.plot(hist_g, color = "g")
plt.plot(hist_r, color = "r")
plt.show()
반응형
'Bigdata > OpenCV' 카테고리의 다른 글
08. OpenCV Histogram Modification (8편) (0) | 2022.01.28 |
---|---|
06. OpenCV 키보드 마우스 이벤트 처리 (6편) (0) | 2022.01.27 |
05. OpenCV Basic 두번째 (5편) (0) | 2022.01.26 |
04. OpenCV Basic Review + α (4편) (0) | 2022.01.26 |
03. OpenCV_Basic (3편) (0) | 2022.01.25 |
Comments