cv2.connectedComponents аварийно завершает работу при повторном вызове после печати его результата - PullRequest
0 голосов
/ 06 сентября 2018

При вызове cv2.connectedComponents, распечатывании его результата и последующем вызове, я получаю ошибку сегментации при втором вызове. Мне удалось сузить его до следующего примера:

#!/usr/bin/python
import cv2
import numpy as np

if __name__ == "__main__":
    img = np.array([
        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],
        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],
        [255, 255,   0,   0,   0,   0,   0,   0,   0,   0,   0, 255, 255],
        [255, 255,   0,   0,   0,   0,   0,   0,   0,   0,   0, 255, 255],
        [255, 255,   0,   0,   0,   0,   0,   0,   0,   0,   0, 255, 255],
        [255, 255,   0,   0,   0,   0,   0,   0,   0,   0,   0, 255, 255],
        [255, 255,   0,   0,   0,   0,   0,   0,   0,   0,   0, 255, 255],
        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],
        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]
        ], dtype=np.uint8)

    res1 = cv2.connectedComponents(img)
    print(res1)
    cv2.connectedComponents(img)  # < here it is crashing
    print("done")

При его выполнении я получаю следующий вывод:

(2, array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
       [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
       [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
       [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
       [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]], dtype=int32))
Segmentation fault

Особенно странная вещь: когда я удаляю print(res1), он достигает конца (печать «сделано») без ошибок. Также при уменьшении размера изображения ошибки не возникает.

Это происходит на Raspberry Pi с OpenCV 3.3.0. Я не могу воспроизвести ошибку на своем ноутбуке (Ubuntu 16.04, OpenCV 3.3.1).

Это (может быть, известно?) Ошибка или я что-то не так делаю?

1 Ответ

0 голосов
/ 07 сентября 2018

После некоторой отладки мы обнаружили, что проблема вызвана библиотекой TBB, похоже, она такая же, как и в эта проблема .

После перекомпиляции OpenCV без TBB он работает. Согласно связанной проблеме, компиляция с более новой версией TBB также может помочь, но мы еще не проверяли это.

...