Я пытаюсь сшить 3 изображения рядом.
Древовидная структура для моего каталога
.
├── image_stitching_simple.py
├── images
│ ├── fig_1.jpg
│ ├── fig_2.jpg
│ └── fig_3.jpg
└── output.png
Скрипт python:
from imutils import paths
import numpy as np
import argparse
import imutils
import cv2
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--images", type=str, required=True, help="path to input directory of images to stitch")
ap.add_argument("-o", "--output", type=str, required=True, help="path to the output image")
args = vars(ap.parse_args())
print("[INFO] loading images...")
imagePaths = sorted(list(paths.list_images(args["images"])))
images = []
for imagePath in imagePaths:
image = cv2.imread(imagePath)
images.append(image)
print("[INFO] stitching images...")
stitcher = cv2.createStitcher() if imutils.is_cv3() else cv2.Stitcher_create()
(status, stitched) = stitcher.stitch(images)
cv2.imwrite(args["output"], stitched)
cv2.imshow("Stitched", stitched)
Я использую следующую строку для запуска моего скрипта
python image_stitching_simple.py --images images/ --output output.png
Я получаю ошибку
libpng warning: Image width is zero in IHDR
libpng warning: Image height is zero in IHDR
libpng error: Invalid IHDR data
Traceback (most recent call last):
File "image_stitching_simple.py", line 44, in <module>
cv2.imshow("Stitched", stitched)
cv2.error: OpenCV(3.4.2) /opt/concourse/worker/volumes/live/9523d527-1b9e-48e0-7ed0-a36adde286f0/volume/opencv-suite_1535558719691/work/modules/highgui/src/window.cpp:356: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'imshow'
Я попробовал следующие методы, чтобы попытаться удалить ошибку:
- Я снова изменил размер изображений (используя команду cv2.resize) до размеров исходного изображения, но это не помогло.
- Я попытался поместить изображения в родительский каталог, но он не помогло.
- Я попытался найти размеры изображения с помощью формы. Размер составляет (4000,3000,3)
- Я использовал matplotlib.pyplot для построения изображения, изображение отображается в pyplot с конечными размерами, но сшиватель не может получить размеры.
- Я попытался найти в Google размеры IHDR, но не могу найти, что это такое.
Прошу вас прояснить некоторые из моих сомнений
- Что такое IHDR размеры и чем они отличаются от реальных размеров изображения?
- Требуется ли предварительная обработка изображений.
PS Я использовал учебный веб-сайт PyImage Search для этого кода. Изображение, предоставленное этим веб-сайтом, может работать в том же скрипте без каких-либо изменений в скрипте. (Это дало мне интуицию, что должна быть некоторая предварительная обработка, необходимая для сшивания изображения. Я попробовал Google, но не нашел соответствующего источника для того же самого.)
Мне очень жаль, что изображения большие, поэтому я предоставляю ссылку на Google Диск в папку изображений. Приносим извинения за доставленные неудобства. Изображения
РЕДАКТИРОВАНИЯ:
- Я использовал
print(imagePath)
, чтобы проверить, загружает ли скрипт правильные файлы.
вывод:
[INFO] loading images...
images/fig_1.jpg
images/fig_2.jpg
images/fig_3.jpg
Кажется, что скрипт загружает правильные файлы.
Я использовал
file images/fig_1.jpg
, чтобы найти тип файла.
Результат:
images/fig_1.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, Exif Standard: [TIFF image data, little-endian, direntries=12, height=3000, manufacturer=samsung, model=SM-M307F, orientation=upper-right, xresolution=210, yresolution=218, resolutionunit=2, software=M307FXXU3BTG1, datetime=2020:08:03 08:13:17, width=4000], baseline, precision 8, 4000x3000, frames 3
Файл в формате JPEG, я действительно не знаю, как это повлияет. Пожалуйста, объясните.
Спасибо.