Перед строкой кода stitcher = cv2.Stitcher_create()
вы должны добавить еще несколько алгоритмов, которые преобразуют ваше трапециевидное изображение в прямоугольное изображение через метод гомографии.
использовать: cv2.findHomography(srcPoints, dstPoints[, method[, ransacReprojThreshold[, mask]]])
- srcPoints — координаты точек исходной плоскости, матрица типа CV_32FC2 или вектор.
- dstPoints — координаты точек на целевой плоскости, матрица типа CV_32FC2 или вектор.
См. также здесь для findHomography
в OpenCV.
В частности: в вашем случае база (нижняя сторона изображения) показывает большую часть информации, тогда как верхняя сторона содержит больше нерелевантной информации. Здесь вы должны сохранить одинаковое соотношение сторон сверху и сузить низ. Это должно быть сделано для каждого изображения. После этого вы можете попробовать сшить их снова.
Пример подхода к преобразованию информации об изображении на основе Trapezium, например. квадратное изображение:
(information ratio x)
----+++++++---- (1)
---+++++++++--- (1)
--+++++++++++-- (1)
-+++++++++++++- (1)
+++++++++++++++ (1)
в квадратную информацию об изображении:
(information ratio x)
----+++++++---- (1)
----+++++++---- (1.1)
----+++++++---- (1.2)
----+++++++---- (1.3)
----+++++++---- (1.4; most compressed information ratio)
Как только это будет сделано, вы можете сшить его. Не забудьте опубликовать результат ;-)
Другой подход состоит в том, чтобы обращаться с камерой как с линейным инспектором. Этот метод вы используете, когда берете информацию из каждого изображения, скажем, для строки от y1060 до 1080 (например, размер изображения 1920x1080 пикселей), а затем заполняете новый массив информацией из этих 20 строк в порядке возрастания.
Обновление от января 2019 г.:
Поскольку гомография, похоже, не выполняет работу на 100% из-за крутого угла в 60 градусов, вы можете попытаться исправить угол, выполнив сначала PerspectiveTransform
.
# you can add a for-loop + image counter here to perform action on all images taken from
# the movie-file. Then its easily replacing numbers in the next part for the name
# of the image.
scr_array = [] # source e.g. pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
dest_array = [] # destination e.g. pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]])
Matrix1 = cv2.getPerspectiveTransform(scr_array,dest_array)
dst = cv2.warpPerspective(image, Matrix1 , (cols, rows))
label = 'CarImage1' # use ('CarImage%s' % labelnr) here for automated annotation.
# cv2.imshow(label , dst) # check the image
# cv2.imwrite(('%s.jpg' % label), dst)
См. также документы здесь по PerspectiveTransform.
person
ZF007
schedule
17.12.2019
ffmpeg -i first.mp4 -vf fps=15 preview%05d.jpg
- person a.masri   schedule 14.12.2019