Opencv 정보 ③
기본적으로 공식 문서를 확인하면서 물건.
메모 정보
Opencv에 대해 ①
Opencv 소개②
환경・사용 화상은 전회와 동일.
①리사이즈
cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])
cv2.resize(제1 인수, 제2 인수, 제3 인수)의 이미지
자신이 사용하는 이미지의 정상 시간
opencv.py
#通常画像
img = cv2,imread(cap_dir)
img.shape
>>>(340,255,3)
Opencv 자습서로
opencv 공식.py
import cv2
import numpy as np
img = cv2.imread(cap_dir)
res = cv2.resize(img,None,fx=1, fy=1, interpolation = cv2.INTER_CUBIC)
img : 디스플레이 이미지
None : 미사용
fx = 2 : 원본 이미지에 대해 x를 몇 배로 설정합니까?
fy = 2 : 원본 이미지에 대해 y를 몇 배로 설정합니까?
interpolation = cv2.INTER_CUBIC : 이미지 확대시 보간 방법
또는
opencv 공식.py
import cv2
import numpy as np
img = cv2.imread(cap_dir)
height, width = img.shape[:2]
res = cv2.resize(img,(2*width, 2*height), interpolation = cv2.INTER_CUBIC)
img.shape[:2]
에서 이미지의 x와 y 숫자를 캡처(2*width, 2*height)
로 원래 크기에 대해 몇 배를 결정하고 있다.둘 다 같은 일을 실시하고 있습니다.
원래 이미지를 바탕으로 변화시켜 가면 이쪽인가. (종횡비는 변하지 않는다)
종횡비를 신경쓰지 않고 확대·축소를 한다면
opencv.py
size = (300,200)
img_resize = cv2.resize(img,size)
#or
img_resize = cv2.resize(img,(300,200))
이것만으로도 가능합니다.
종횡비에 관해서는 매우 적당합니다.
이미지의 가로 세로 비율을 확인한 후 엉망진창보다는
.shape[:2]
로 캡처하는 것이 똑똑합니까?제3 인수로 기재하고 있는 부분에 관한 메소드
interpolation = method
INTER_NEAREST
INTER_LINEAR (기본 설정)
INTER_AREA
INTER_CUBIC
INTER_LANCZOS4
괜찮 았어.
확대시
interpolation=cv2.INTER_LINEAR(処理速い)
or cv2.INTER_CUBIC(処理遅い)
축소시 interpolation=cv2.INTER_AREA
라는 인식으로 좋을까…영어 표기이므로 세세한 뉘앙스를 읽을 수 없습니다 ...
② 이미지 평행 이동
opencv.py
img = cv2.imread(cap_dir)
h, w = img.shape[:2]
dx, dy = 30, 30
M = np.float32([[1,0,dx],[0,1,dy]])
img_afn = cv2.warpAffine(img,M,(w,h))
물체의 위치를 이동시키는 처리입니다. (x, y) 방향으로의 이동량이 $(t_x,t_y)$ 라고 하면, 이 병진을 나타내는 변환 행렬 $\textbf{M}$ 는 다음과 같이 됩니다.
M = \begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \end{bmatrix}
by 공식
opencv.py
img.shape
>>>(340, 255, 3)
afn_mat = np.float32([[1,0,dx],[0,1,dy]])
print(afn_mat)
[[ 1. 0. 30.]
[ 0. 1. 30.]]
np.float32([[1,0,dx],[0,1,dy]])
numpy 배열로 이동량을 설정.cv2.warpAffine (제 1 인수, 제 2 인수, 제 3 인수)
첫 번째 인수 : 이미지
두 번째 인수 : 이동량
제3 인수:출력 화상의 사이즈 ← 공식적으로 사이즈를 지정하지 않으면 에러 토한다고 표기 있어
이제 이미지가 이동합니다. (현시점에서 용도는 생각하지 않고)
③이미지 회전
opencv.py
img = cv2.imread(cap_dir,0)
h, w = img.shape
M = cv2.getRotationMatrix2D((w/2,h/2),45,1)
img_afn2 = cv2.warpAffine(img,M,(w,h))
cv2.getRotationMatrix2D((w/2,h/2),45,1)
(w/2,h/2): 회전 중심 위치. 수치를 변경하면 중심 위치가 어긋납니다.
45: 회전 각.
1: 확대. 2로 설정하면 표시 프레임은 그대로 이미지가 2배가 되었습니다.
컬러 표시도 문제 없게 할 수 있습니다만
칼라로 하면(세로, 가로, 색)과 정보가 늘어나므로
img.shape의 저장 수를 늘리면 컬러 이미지를 처리 할 수 있습니다.
h, w, c = img.shape
라는 것입니다.공식 씨 쾅
이미지를 회전 각도 $\theta$ 회전시키기 위한 변환 행렬은 다음과 같습니다.
M = \begin{bmatrix} cos\theta & -sin\theta \\ sin\theta & cos\theta \end{bmatrix}
OpenCV가 제공하는 회전은 스케일링도 동시에 수행하여 회전의 중심 위치를 변경할 수 있습니다. 이 변환을 나타내는 변환 행렬은 다음과 같습니다.
\begin{bmatrix} \alpha & \beta & (1- \alpha ) \cdot center.x - \beta \cdot center.y \\ - \beta & \alpha & \beta \cdot center.x + (1- \alpha ) \cdot center.y \end{bmatrix}
여기 :
\begin{array}{l} \alpha = scale \cdot \cos \theta , \\ \beta = scale \cdot \sin \theta \end{array}
이 변환 행렬을 계산하는 cv2.getRotationMatrix2D라는 함수가 있습니다. 다음 예제에서는 스케일링 없이 이미지 중심에 대해 90도 회전하는 변환을 시도합니다.
cv2.getRotationMatrix2D((w/2,h/2),45,1)는 위의 계산식을 사용하여 이미지 회전하고 있는 것 같습니다.
공식에는 상기와 같이 기재되어 있습니다만 식에 관해서는 정직 이해하고 있지 않습니다 n.
어디의 수치를 건드리면 이미지가 어떻게 변화하는지를 시도한 결과이므로
시도해보고 이미지로 이해할 수밖에 없을까 생각합니다.
④정리
사용 · 사용하지 않는 별도의 요약
화상 처리에 관해서는 상당히 많기 때문에 아마 사용할 것이다 물건을
별도로 정리합니다.
Reference
이 문제에 관하여(Opencv 정보 ③), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/bobrock/items/5150dd3040c775d23c6f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)