Opencv 정보 ③

Opencv3 시스템에 대한 메모

기본적으로 공식 문서를 확인하면서 물건.

메모 정보
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.
어디의 수치를 건드리면 이미지가 어떻게 변화하는지를 시도한 결과이므로
시도해보고 이미지로 이해할 수밖에 없을까 생각합니다.

④정리



사용 · 사용하지 않는 별도의 요약
화상 처리에 관해서는 상당히 많기 때문에 아마 사용할 것이다 물건을
별도로 정리합니다.

좋은 웹페이지 즐겨찾기