, ... , . , , , , ; , , .
remap()
, , . remap()
, , , , . , , , . ( , ).
remap()
docs:
map1. (x,y)
, x
, CV_16SC2
, CV_32FC1
CV_32FC2
. . convertMaps()
.
map2. y
, CV_16UC1
, CV_32FC1
none ( , map1
(x,y)
) .
map1
" ..." . , , ... src
map_x(x, y), map_y(x, y)
, dst
x, y
. , . , :
dst(x,y) = src(map_x(x,y),map_y(x,y))
map_x(x, y)
map_x
, x, y
. . x, y
src
, x, y
dst
. , - . (0, 0)
map_x
map_y
, , (0, 0)
, . , remap()
; , , .
,
img = np.uint8(np.random.rand(8, 8)*255)
map_y = np.array([[0, 1], [2, 3]], dtype=np.float32)
map_x = np.array([[5, 6], [7, 10]], dtype=np.float32)
mapped_img = cv2.remap(img, map_x, map_y, cv2.INTER_LINEAR)
, ? , img
, , . :
map_y
=====
0 1
2 3
map_x
=====
5 6
7 10
, (0, 0) , map_y(0, 0), map_x(0, 0) = 0, 5
, 0 5 153. , mapped_img[0, 0] = 153
. , . (map_x[1, 1] = 10
, ), , 0
, .
, remap()
, . , true_dst
src
. , , , , , . remap()
.
import numpy as np
import cv2
true_dst = cv2.imread("img1.png")
src = cv2.imread("img2.png")
H = np.array([
[8.7976964e-01, 3.1245438e-01, -3.9430589e+01],
[-1.8389418e-01, 9.3847198e-01, 1.5315784e+02],
[1.9641425e-04, -1.6015275e-05, 1.0000000e+00]])
h, w = true_dst.shape[:2]
indy, indx = np.indices((h, w), dtype=np.float32)
lin_homg_ind = np.array([indx.ravel(), indy.ravel(), np.ones_like(indx).ravel()])
map_ind = H.dot(lin_homg_ind)
map_x, map_y = map_ind[:-1]/map_ind[-1]
map_x = map_x.reshape(h, w).astype(np.float32)
map_y = map_y.reshape(h, w).astype(np.float32)
dst = cv2.remap(src, map_x, map_y, cv2.INTER_LINEAR)
blended = cv2.addWeighted(true_dst, 0.5, dst, 0.5, 0)
cv2.imshow('blended.png', blended)
cv2.waitKey()

.