2017-01-04 8 views
0

Этот вопрос может показаться расплывчатым, но, если честно, это все, что у меня есть, и я не могу отладить эту проблему.Ошибка сегментации при использовании некоторых функций OpenCV

Я использую Linux Mint и долгое время использовал OpenCV. Все работало нормально, до нескольких недель назад. Теперь, когда я пытаюсь выполнить некоторые основные преобразования, такие как транспонирование или cvtColor, возникает ошибка сегментации. Я понятия не имею, когда и как это начиналось. Вот минимальный питон скрипт, который возвращает мне ошибку:

import cv2 
im1 = cv2.imread("test.png", cv2.IMREAD_UNCHANGED) 
im2 = cv2.cvtColor(im1, cv2.COLOR_RGBA2BGR) 

Я сделал то же самое в C++, а также, на всякий случай:

#include <opencv2/imgproc/imgproc.hpp>           
#include <opencv2/highgui/highgui.hpp>           

int main() {                  
    cv::Mat im1, im2;               
    im1 = cv::imread("test.png", cv::IMREAD_UNCHANGED);            
    cv::cvtColor(im1, im2, cv::COLOR_RGBA2BGR);         
    return 0;                 
} 

Обратите внимание, что я использую COLOR_RGBA2BGR потому теста .png файл имеет альфа-канал.

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

Я не уверен, какие другие функции возвращают эту ошибку. Я удалил OpenCV, построенный из источника, установлен снова и по-прежнему сохраняется ошибка. Единственный вариант, который, как мне кажется, остается для меня, - это свежая установка ОС, но любая форма помощи для отладки этой проблемы была бы весьма признательна.

+1

Вы пытались использовать gdb, чтобы узнать, откуда возникает segfault? –

+0

Я только что сделал сейчас, и похоже, проблема связана с OpenCL. Backtrace обнаружила много вещей libOpenCL. Я помню, как когда-то играл с ним, но его странно, поскольку я не упомянул OpenCL при компиляции OpenCV. Поэтому, я думаю, мне просто нужно избавиться от OpenCL и повторить попытку. –

+0

ok, я добавлю это как aswer, чтобы люди знали, что вы на хорошем пути :) –

ответ

0

Возможно, это не связано с вашей ОС, питоном или C++. Я рекомендую использовать gdb для отслеживания того, где происходит segfault; что должно указывать на вас в правильном направлении.

Смежные вопросы