fourcc 비디오 코덱 문자
- cv2.VideoWriter_fourcc(*'PIM1') : MPEG-1
- cv2.VideoWriter_fourcc(*'MJPG'): Motion-JPEG
- cv2.VideoWriter_fourcc(*/DIVX’) : DIVX 4.0이후 버전
- cv2.VideoWriter_fourcc(*'XVID') : XVID, MPEG-4
- cv2.VideoWriter_fourcc(*'MPEG') : MPEG
- cv2.VideoWriter_fourcc(*'X264') : H.264/AVC
문제 이해
주어진 문제에 대한 직관적이고 철저한 이해 중요
▶ 합리적 제약 조건 수립 필요
- 얼굴 인식기
- 크기의 일정한 정면 얼굴 VS 자연 영상 속의 얼굴
- 전자는 제작이 쉽지만 응용 분야의 한정되고 보안 장치에 활용 가능하지만 사진 분류 응용에 적용이 불가능하다.
데이터 베이스 수집
질적으로 양적으로 우수해야 고성능 시스템 제작 가능
데이터 베이스 학습 집합 테스트 집합
▶ 수집 방법
- 직접 수집(많은 비용을 부담, 개발자에게 자산이됨)
- 인터넷에서 다운로드(고품질의 데이터 베이스 풍부)
알고리즘 설계와 구현
알고리즘 선택의 중요성과 어려움
▶ 새로운 알고리즘 개발 또는 기존 알고리즘 중에서 주어진 문제에 적합한 것을 선택
- 예) 손 동작 인식기 제작
- 에지, 영역, 지역 특징 중에 어떤 것을 사용할지
- 영역을 사용한다면, 어떤 영상 분할 알고리즘을 사용할지
- 어떤 추적 알고리즘을 사용할지
▶ 선택 방법
- 데이터 베이스를 이용하여 성능 실험 (설계자의 경험과 직관이 중요)
- 성능 비교 분석 논문을 참조
영상 접근법
- 관심영역(ROI)
- 슬라이싱 이용
- (cy, cx) = (h//2, w//2)
- ti = image[0:cy, 0:cx]
- 마우스를 이용한 ROI 설정
- selectROI (winname, img[, showCrosshair[,fromCenter]]) -> (x, y, w, h)
- showCrosshair : 격자 표시 여부
- fromCenter : 마우스 클릭 위치 설정
- selectROIs(winname, img[, showCrosshair[,fromCenter]]) -> (x, y, w, h) -> boundingBoxes
- selectROI (winname, img[, showCrosshair[,fromCenter]]) -> (x, y, w, h)
영상 기하 변환
- 변환 함수
- cv2.getRotationMatrix2D
- Affine transformation matrix 반환
- parameter : center, angle, scale -> M
- angle > 0이면 반 시계 반향 회전
- cv2.wrapAffine
- 변환을 영상에 적용
- parameter : src, M, dsize[,dst[,flags[, borderMode[, borderValue]]]]) -> dst
- borderMode : cv2.BORDER_CONSTANT
- cv2.getRotationMatrix2D
▶ 정리
- 영상 처리 목적 입력 영상에서 특정 영역을 지정한 것을 관심 영역(ROI).
- openCV를 이용하여 관심 영역을 쉽게 지정.
- 영상에 기하학적 변환을 적용하여 영상을 변경.
- 영상 간 산술 연산 및 비트 연산을 적용.
import cv2
import numpy as np
img = cv2.imread("./image/lena.jpg")
print('img.ndm =', img.ndim)
print('img.shape =', img.shape)
print('img.dtype =', img.dtype)
img = img.astype(np.int32)
print('img.dtype =', img.dtype)
img=np.uint8(img)
print('img.dtype =', img.dtype)
img.ndm = 3
img.shape = (512, 512, 3)
img.dtype = uint8
img.dtype = int32
img.dtype = uint8
데이터 프레임으로 시각화
import pandas as pd
img = cv2.imread('./image/Lena2.jpg', 0)
df = pd.DataFrame(img)
df
0 | 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 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | ... | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 163 | 162 | 161 | 160 | 163 | 156 | 164 | 162 | 165 | 160 | 163 | 161 | 154 | 165 | 157 | 154 | 159 | 153 | 164 | 161 | 154 | 158 | 156 | 157 | 155 | 158 | 156 | 152 | 155 | 156 | 154 | 154 | 153 | 159 | 153 | 163 | 156 | 167 | 160 | 166 | ... | 125 | 128 | 123 | 126 | 124 | 125 | 117 | 118 | 129 | 119 | 130 | 124 | 123 | 131 | 121 | 129 | 126 | 119 | 130 | 125 | 125 | 130 | 117 | 124 | 114 | 122 | 116 | 116 | 117 | 115 | 123 | 124 | 136 | 166 | 167 | 173 | 173 | 168 | 156 | 129 |
1 | 162 | 162 | 162 | 161 | 164 | 156 | 163 | 162 | 165 | 161 | 162 | 161 | 154 | 165 | 158 | 154 | 158 | 153 | 163 | 161 | 153 | 156 | 156 | 157 | 155 | 158 | 155 | 152 | 155 | 156 | 154 | 154 | 154 | 159 | 153 | 163 | 157 | 167 | 161 | 167 | ... | 125 | 127 | 122 | 125 | 123 | 125 | 118 | 119 | 129 | 120 | 130 | 125 | 125 | 132 | 123 | 130 | 126 | 119 | 130 | 125 | 125 | 129 | 118 | 124 | 114 | 122 | 117 | 118 | 118 | 115 | 121 | 122 | 141 | 165 | 163 | 169 | 174 | 173 | 157 | 125 |
2 | 162 | 163 | 163 | 161 | 163 | 156 | 164 | 162 | 166 | 161 | 161 | 161 | 154 | 165 | 159 | 155 | 158 | 155 | 163 | 161 | 154 | 156 | 156 | 157 | 155 | 158 | 155 | 153 | 155 | 156 | 154 | 155 | 154 | 159 | 154 | 162 | 158 | 167 | 162 | 167 | ... | 126 | 127 | 121 | 125 | 122 | 124 | 118 | 119 | 130 | 121 | 128 | 125 | 126 | 131 | 123 | 127 | 125 | 120 | 130 | 126 | 125 | 129 | 119 | 123 | 113 | 122 | 117 | 119 | 120 | 116 | 122 | 124 | 139 | 166 | 168 | 169 | 169 | 169 | 156 | 127 |
3 | 162 | 164 | 163 | 160 | 163 | 156 | 164 | 162 | 166 | 162 | 159 | 161 | 155 | 163 | 160 | 155 | 158 | 157 | 162 | 162 | 155 | 155 | 157 | 157 | 156 | 158 | 155 | 153 | 156 | 155 | 154 | 156 | 153 | 157 | 154 | 161 | 160 | 166 | 162 | 165 | ... | 127 | 126 | 122 | 126 | 122 | 124 | 118 | 118 | 129 | 121 | 127 | 125 | 126 | 131 | 124 | 126 | 123 | 121 | 130 | 127 | 126 | 128 | 119 | 122 | 113 | 121 | 116 | 119 | 119 | 115 | 121 | 124 | 134 | 161 | 171 | 171 | 170 | 170 | 158 | 132 |
4 | 164 | 164 | 162 | 159 | 162 | 156 | 164 | 162 | 164 | 162 | 158 | 161 | 154 | 160 | 160 | 154 | 156 | 158 | 160 | 160 | 155 | 154 | 157 | 156 | 156 | 157 | 155 | 154 | 156 | 155 | 154 | 157 | 155 | 157 | 153 | 157 | 159 | 164 | 163 | 165 | ... | 127 | 126 | 123 | 128 | 123 | 124 | 118 | 117 | 128 | 122 | 126 | 126 | 128 | 131 | 126 | 126 | 124 | 123 | 129 | 126 | 125 | 126 | 120 | 122 | 114 | 120 | 114 | 117 | 119 | 114 | 120 | 123 | 143 | 160 | 170 | 172 | 175 | 172 | 154 | 124 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
507 | 52 | 50 | 55 | 48 | 52 | 51 | 51 | 54 | 56 | 56 | 53 | 53 | 60 | 65 | 96 | 121 | 157 | 194 | 194 | 193 | 195 | 200 | 198 | 201 | 201 | 199 | 196 | 195 | 186 | 184 | 174 | 133 | 104 | 114 | 117 | 122 | 137 | 145 | 151 | 162 | ... | 122 | 125 | 129 | 131 | 127 | 128 | 127 | 124 | 121 | 109 | 110 | 104 | 91 | 89 | 84 | 78 | 67 | 59 | 54 | 50 | 56 | 54 | 53 | 52 | 52 | 52 | 51 | 53 | 55 | 52 | 55 | 66 | 66 | 77 | 84 | 88 | 95 | 97 | 93 | 91 |
508 | 49 | 46 | 51 | 44 | 51 | 49 | 49 | 51 | 57 | 58 | 49 | 56 | 56 | 64 | 88 | 117 | 155 | 193 | 195 | 195 | 197 | 201 | 198 | 199 | 200 | 197 | 194 | 193 | 184 | 182 | 172 | 133 | 101 | 109 | 115 | 124 | 137 | 145 | 152 | 161 | ... | 126 | 126 | 131 | 131 | 128 | 127 | 129 | 124 | 124 | 106 | 105 | 97 | 83 | 82 | 80 | 73 | 62 | 57 | 53 | 47 | 50 | 47 | 49 | 51 | 55 | 51 | 49 | 56 | 60 | 55 | 60 | 73 | 71 | 82 | 90 | 94 | 100 | 102 | 98 | 95 |
509 | 43 | 41 | 51 | 46 | 55 | 50 | 49 | 49 | 58 | 58 | 46 | 57 | 54 | 62 | 85 | 115 | 150 | 191 | 195 | 196 | 198 | 201 | 198 | 199 | 201 | 197 | 193 | 193 | 183 | 179 | 167 | 128 | 103 | 109 | 119 | 128 | 137 | 145 | 153 | 160 | ... | 127 | 125 | 132 | 130 | 128 | 124 | 127 | 120 | 120 | 102 | 98 | 90 | 76 | 74 | 70 | 64 | 54 | 55 | 56 | 54 | 52 | 45 | 43 | 45 | 44 | 46 | 46 | 50 | 56 | 60 | 65 | 73 | 78 | 85 | 92 | 96 | 101 | 102 | 100 | 99 |
510 | 41 | 42 | 55 | 50 | 57 | 49 | 49 | 51 | 55 | 50 | 42 | 49 | 51 | 53 | 79 | 108 | 144 | 187 | 194 | 195 | 197 | 199 | 197 | 198 | 202 | 196 | 192 | 193 | 183 | 177 | 162 | 120 | 107 | 111 | 122 | 132 | 136 | 144 | 155 | 160 | ... | 127 | 122 | 131 | 130 | 128 | 122 | 125 | 117 | 114 | 100 | 96 | 86 | 72 | 67 | 61 | 59 | 60 | 58 | 52 | 48 | 42 | 42 | 46 | 55 | 47 | 53 | 55 | 58 | 66 | 73 | 78 | 82 | 92 | 93 | 98 | 104 | 104 | 104 | 105 | 107 |
511 | 42 | 44 | 58 | 50 | 53 | 45 | 48 | 54 | 60 | 52 | 47 | 48 | 56 | 52 | 81 | 109 | 141 | 186 | 194 | 195 | 196 | 199 | 197 | 199 | 199 | 194 | 191 | 193 | 184 | 177 | 160 | 118 | 106 | 108 | 121 | 132 | 133 | 142 | 156 | 161 | ... | 129 | 122 | 131 | 130 | 130 | 122 | 127 | 119 | 112 | 101 | 97 | 86 | 71 | 63 | 58 | 59 | 58 | 57 | 52 | 50 | 43 | 41 | 41 | 49 | 47 | 50 | 54 | 60 | 69 | 73 | 76 | 83 | 96 | 93 | 98 | 104 | 103 | 101 | 105 | 109 |
512 rows × 512 columns
타입을 변경하여 이미지 변경 유무 확인¶
import cv2
import numpy as np
img = cv2.imread("./image/lena.jpg", cv2.IMREAD_GRAYSCALE)
img = img.flatten()
img = img.reshape(512, 512)
cv2.imshow('img', img)
cv2.waitKey()
cv2.destroyAllWindows()
위치의 밝기값 조정¶
img = cv2.imread("./image/lena.jpg", 0)
img_bgr = cv2.imread()
img[30, 20]
161
import numpy as np
import cv2
img = cv2.imread('./image/Lena2.jpg', cv2.IMREAD_GRAYSCALE)
(h, w) = img.shape
print(h, w)
(cy, cx) = (h//2, w//2)
print(cy, cx)
roi = img[0:cy, 0:cx]
cv2.imshow('img', img)
cv2.imshow('ROI', roi)
cv2.waitKey()
cv2.destroyAllWindows()
512 512
256 256
특정한 영역 display¶
얼굴 영역만 추출
import numpy as np
import cv2
img = cv2.imread('./image/Lena2.jpg', cv2.IMREAD_GRAYSCALE)
roi = img[180:400, 180:400]
cv2.imshow('img', img)
cv2.imshow('ROI', roi)
cv2.waitKey()
cv2.destroyAllWindows()
import numpy as np
import cv2
src = cv2.imread('./image/Lena2.jpg', cv2.IMREAD_GRAYSCALE)
dst = src.copy()
dst[180:400, 180:400] = 0
cv2.imshow('src', src)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()
흑백 레나 영상 밝기값 복사¶
import numpy as np
import cv2
src = cv2.imread('./image/lena2.jpg', cv2.IMREAD_GRAYSCALE)
dst = np.zeros([512, 512, 3])
dst[:, :, 0] = src.copy()
dst[:, :, 1] = src.copy()
dst[:, :, 2] = src.copy()
dst[180:400, 180:400] = [255, 255, 255]
cv2.imshow('dst', np.uint8(dst))
cv2.waitKey()
cv2.destroyAllWindows()
R 값 수정¶
import numpy as np
import cv2
src = cv2.imread('./image/lena2.jpg', cv2.IMREAD_GRAYSCALE)
dst = np.zeros([512, 512, 3])
dst[:, :, 0] = src.copy()
dst[:, :, 1] = src.copy()
dst[:, :, 2] = src.copy()
dst[180:400, 180:400] = [255, 255, 255]
for x in range(len(dst[0])):
for y in range(len(dst[:,0])):
dst[x,y] = [dst[x, y,0], dst[x, y, 1], np.random.randint(0,255)]
cv2.imshow('dst', np.uint8(dst))
cv2.waitKey()
cv2.destroyAllWindows()
컬러 영상 채널 분리와 병합¶
채널 분리 cv2.split()
채널 병합 cv2.merge()
YCbCr의 y는 휘도 성분, cb와 cr은 색차 성분
HSV = Hue(색상), Saturation(채도), 명도(Value)
import numpy as np
import cv2
src = cv2.imread('./image/lena.jpg')
b, g, r = cv2.split(src)
cv2.imshow('b', b)
cv2.imshow('g', g)
cv2.imshow('r', r)
cv2.waitKey()
cv2.destroyAllWindows()
import numpy as np
import cv2
src = cv2.imread('./image/lena.jpg')
b, g, r = cv2.split(src)
zeros = np.zeros([src.shape[0], src.shape[1]], dtype="uint8")
b = cv2.merge([b, zeros, zeros])
g = cv2.merge([zeros, g, zeros])
r = cv2.merge([zeros, zeros, r])
cv2.imshow('b', b)
cv2.imshow('g', g)
cv2.imshow('r', r)
cv2.waitKey()
cv2.destroyAllWindows()
import numpy as np
import cv2
src = cv2.imread('./image/lena.jpg')
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
yCrCv = cv2.cvtColor(src, cv2.COLOR_BGR2YCrCb)
hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
cv2.imshow('src', src)
cv2.imshow('gray', gary)
cv2.imshow('yCrCv', yCrCv)
cv2.imshow('hsv', hsv)
cv2.waitKey()
cv2.destroyAllWindows()
영상 기하 변환¶
cv2.resize
영상의 크기 변환 - 확대 축소
cv2.rotate
영상을 90도 간격으로 회전 시킴
src = cv2.imread('./image/lena.jpg', cv2.IMREAD_GRAYSCALE)
dst = cv2.resize(src, dsize=(320, 240))
dst2 = cv2.resize(src, dsize=(0, 0), fx=1.5, fy=1.2)
cv2.imshow("dst", dst)
cv2.imshow("dst2", dst2)
cv2.waitKey()
cv2.destroyAllWindows()
src = cv2.imread('./image/lena.jpg', cv2.IMREAD_GRAYSCALE)
dst = cv2.rotate(src, cv2.ROTATE_90_CLOCKWISE)
dst2 = cv2.rotate(src, cv2.ROTATE_180)
dst3 = cv2.rotate(src, cv2.ROTATE_90_COUNTERCLOCKWISE)
cv2.imshow("dst", dst)
cv2.imshow("dst2", dst2)
cv2.imshow("dst3", dst3)
cv2.waitKey()
cv2.destroyAllWindows()
변환 함수¶
cv2.getRotationMatrix2D()
cv2.warpAffine()
src = cv2.imread('./image/lena.jpg')
rows, cols, channels = src.shape
M1 = cv2.getRotationMatrix2D((rows/2, cols/2), 45, 0.5)
M2 = cv2.getRotationMatrix2D((rows/2, cols/2), 45, 1.5)
dst1 = cv2.warpAffine(src, M1, (rows, cols))
dst2 = cv2.warpAffine(src, M2, (rows, cols))
cv2.imshow("dst1", dst1)
cv2.imshow("dst2", dst2)
cv2.imshow("dst3", dst3)
cv2.waitKey()
cv2.destroyAllWindows()
영상 기하 변환¶
imutils (많이 사용)
!pip install imutils
Collecting imutils
Downloading imutils-0.5.4.tar.gz (17 kB)
Preparing metadata (setup.py) ... done
Building wheels for collected packages: imutils
Building wheel for imutils (setup.py) ... done
Created wheel for imutils: filename=imutils-0.5.4-py3-none-any.whl size=25836 sha256=7304f5b5eb8ad0b07ad84350a72260a6ea5992629d19a8bc41aff0be374d9336
Stored in directory: /Users/werther/Library/Caches/pip/wheels/4b/a5/2d/4a070a801d3a3d93f033d3ee9728f470f514826e89952df3ea
Successfully built imutils
Installing collected packages: imutils
Successfully installed imutils-0.5.4
import imutils
imutils로 x + 10, y + 30 이동
src = cv2.imread('./image/lena.jpg')
rows, cols, channels = src.shape
src=imutils.translate(src, 10, 30)
cv2.imshow("src", src)
cv2.waitKey()
cv2.destroyAllWindows()
center 중심 10도 만큼 회전
src = cv2.imread('./image/lena.jpg')
rows, cols, channels = src.shape
src = imutils.rotate(src, angle=10, center=rows/2, cols/2)
cv2.imshow("src", src)
cv2.waitKey()
cv2.destroyAllWindows()
사이즈 수정
src = cv2.imread('./image/lena.jpg')
rows, cols, channels = src.shape
src = imutils.resize(src, width=10, height=10)
cv2.imshow("src", src)
cv2.waitKey()
cv2.destroyAllWindows()
사칙연산¶
영상과 영상을 사칙연산한다. np+np
add, addWeighted, subract, scaleAdd, multiply, divide..
addWeighted 가 많이 사용
src1 = cv2.imread('./image/lena.jpg', cv2.IMREAD_GRAYSCALE)
src2 = np.zeros(shape=(512, 512), dtype=np.uint8) + 100
dst1 = src1 + src2
dst2 = cv2.add(src1, src2)
cv2.imshow("dst1", dst1)
cv2.imshow("dst2", dst2)
cv2.waitKey()
cv2.destroyAllWindows()
src1 = cv2.imread('./image/lena.jpg')
src2 = cv2.imread('./image/baboon.jpg')
dst = cv2.addWeighted(src1, 0.5, src2, 0.5, 0)
cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()
임계값을 이용한 영상변환¶
cv2.THRESH_BINARY
cv2.THRESH_BINARY_INV
cv2.THRESH_TRUNC
cv2.THRESH_TOZERO
cv2.THRESH_TOZERO_INV
src = cv2.imread('./image/lena.jpg', cv2.IMREAD_GRAYSCALE)
ret, dst = cv2.threshold(src,
120, ## 임계치
255,
cv2.THRESH_BINARY)
print('ret=', ret)
cv2.imshow('src', src)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()
ret= 120.0
src = cv2.imread('./image/cup.png')
ret, dst = cv2.threshold(src,
170,
255,
cv2.THRESH_BINARY_INV)
print('ret=', ret)
cv2.imshow('src', src)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()
opencv logo에서 logo만 검정색으로 추출¶
src = cv2.imread('./image/opencv_logo.png', cv2.IMREAD_GRAYSCALE)
ret, dst = cv2.threshold(src,
230,
255,
cv2.THRESH_BINARY)
print('ret=', ret)
cv2.imshow('src', src)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()
import cv2
import numpy as np
src1 = cv2.imread('./image/lena.jpg', 0)
src2 = np.zeros(shape=(512, 512), dtype=np.uint8) +255
dst1 = 255 - src1
print(src1[0, :10])
print(dst1[0, :10])
dst2 = cv2.subtract(src2, src1)
print(src1[0, :10])
print(dst2[0, :10])
dst3 = cv2.compare(dst1, dst2, cv2.CMP_EQ)
print(src1[0, :10])
print(dst3[0, :10])
dst4 = cv2.compare(dst1, dst2, cv2.CMP_NE)
print(src1[0, :10])
print(dst4[0, :10])
dst5 = cv2.compare(dst1, dst2, cv2.CMP_GT)
print(src1[0, :10])
print(dst5[0, :10])
dst6 = cv2.compare(dst1, dst2, cv2.CMP_GE)
print(src1[0, :10])
print(dst6[0, :10])
dst7 = cv2.compare(dst1, dst2, cv2.CMP_LT)
print(src1[0, :10])
print(dst7[0, :10])
dst8 = cv2.compare(dst1, dst2, cv2.CMP_LE)
print(src1[0, :10])
print(dst8[0, :10])
cv2.imshow("dst1", dst1)
cv2.imshow("dst2", dst2)
cv2.imshow("dst3", dst3)
cv2.imshow("dst4", dst4)
cv2.imshow("dst5", dst5)
cv2.imshow("dst6", dst6)
cv2.imshow("dst7", dst7)
cv2.imshow("dst8", dst8)
cv2.waitKey()
cv2.destroyAllWindows()
import cv2
import numpy as np
src1 = cv2.imread('./image/lena.jpg', 0)
src2 = np.zeros(shape=(512, 512), dtype=np.uint8) +255
dst1 = 255 - src1
print(src1[0, :10])
print(dst1[0, :10])
dst2 = cv2.subtract(src2, src1)
print(src1[0, :10])
print(dst2[0, :10])
dst3 = cv2.compare(src1, dst1, cv2.CMP_EQ)
print(src1[0, :10])
print(dst3[0, :10])
dst4 = cv2.compare(src1, dst1, cv2.CMP_NE)
print(src1[0, :10])
print(dst4[0, :10])
dst5 = cv2.compare(src1, dst1, cv2.CMP_GT)
print(src1[0, :10])
print(dst5[0, :10])
dst6 = cv2.compare(src1, dst1, cv2.CMP_GE)
print(src1[0, :10])
print(dst6[0, :10])
dst7 = cv2.compare(src1, dst1, cv2.CMP_LT)
print(src1[0, :10])
print(dst7[0, :10])
dst8 = cv2.compare(src1, dst1, cv2.CMP_LE)
print(src1[0, :10])
print(dst8[0, :10])
cv2.imshow("dst1", dst1)
cv2.imshow("dst2", dst2)
cv2.imshow("dst3", dst3)
cv2.imshow("dst4", dst4)
cv2.imshow("dst5", dst5)
cv2.imshow("dst6", dst6)
cv2.imshow("dst7", dst7)
cv2.imshow("dst8", dst8)
cv2.waitKey()
cv2.destroyAllWindows()
'Python' 카테고리의 다른 글
[Python] openCV : Histogram (0) | 2022.11.10 |
---|---|
[Python] openCV : normalization (0) | 2022.11.10 |
[Python] openCV : Event (0) | 2022.11.10 |
[Python] openCV : Text (0) | 2022.11.10 |
[Python] openCV : Writer (0) | 2022.11.10 |