Ошибка libpng: неверные данные IHDR (сшивание 3 изображений) - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь сшить 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'

Я попробовал следующие методы, чтобы попытаться удалить ошибку:

  1. Я снова изменил размер изображений (используя команду cv2.resize) до размеров исходного изображения, но это не помогло.
  2. Я попытался поместить изображения в родительский каталог, но он не помогло.
  3. Я попытался найти размеры изображения с помощью формы. Размер составляет (4000,3000,3)
  4. Я использовал matplotlib.pyplot для построения изображения, изображение отображается в pyplot с конечными размерами, но сшиватель не может получить размеры.
  5. Я попытался найти в Google размеры IHDR, но не могу найти, что это такое.

Прошу вас прояснить некоторые из моих сомнений

  1. Что такое IHDR размеры и чем они отличаются от реальных размеров изображения?
  2. Требуется ли предварительная обработка изображений.

PS Я использовал учебный веб-сайт PyImage Search для этого кода. Изображение, предоставленное этим веб-сайтом, может работать в том же скрипте без каких-либо изменений в скрипте. (Это дало мне интуицию, что должна быть некоторая предварительная обработка, необходимая для сшивания изображения. Я попробовал Google, но не нашел соответствующего источника для того же самого.)

Мне очень жаль, что изображения большие, поэтому я предоставляю ссылку на Google Диск в папку изображений. Приносим извинения за доставленные неудобства. Изображения

РЕДАКТИРОВАНИЯ:

  1. Я использовал 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, я действительно не знаю, как это повлияет. Пожалуйста, объясните.

Спасибо.

...