AuST 0 Жалоба Опубликовано May 1, 2011 В качестве вступления, у меня стоит Qt SDK v1.1, 4.7.2 Qt библиотека и OpenCV 2.2, две последние вещи собраны MinGW. В чем оказался подвох, если у тебя один поток, то все работает хорошо, если же ты создаешь еще один поток, и делаешь там обработку изображений то программа постоянно падает с криками "Segmentation fault", тобишь ругаясь на память. А падает она на следующих функциях: cvThreshold (так как мне нужна была простая форма, я ее написал от руки) cvFindContours (а вот тут я и встал, сам я пока не силен написать функцию поиска контуров). Покопавшись во великой кладези знаний, т. е. в интернете, я обнаружил, что не в основном потоке cvThreshold не работает по MinGW из-за какой-то asm команды под названием SSE... Скажите, есть ли несложные пути обойти такие проблемы или придется пересобирать всё студийным компилятором? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
TroyashkA 12 Жалоба Опубликовано May 2, 2011 Было бы неплохо код увидеть p.s. Я заметил, что некоторые опенцвшные функции дают в кьюти GUI ошибку, к примеру cvShowImage() Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано May 2, 2011 В cmakeLists.txt есть строчки: # enable everything, since the available set of instructions is checked at runtime set(USE_O3 ON CACHE BOOL "Enable -O3") set(USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math") set(ENABLE_SSE ON CACHE BOOL "Enable SSE instructions") set(ENABLE_SSE2 ON CACHE BOOL "Enable SSE2 instructions") set(ENABLE_SSE3 OFF CACHE BOOL "Enable SSE3 instructions") set(ENABLE_SSSE3 OFF CACHE BOOL "Enable SSSE3 instructions") set(ENABLE_SSE41 OFF CACHE BOOL "Enable SSE4.1 instructions") set(ENABLE_SSE42 OFF CACHE BOOL "Enable SSE4.2 instructions") Думаю они и управляют SSE инструкциями. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
AuST 0 Жалоба Опубликовано May 2, 2011 2 Troyashka Код показывать нет смысла. Можете попробовать даже самый простой вариант, загрузить изображение и Threshold его в родном потоке (мэйн) и потом во дополнительном потоке. В родном будет работать, во втором нет. GUI функции я не использую. 2 Smorodov чтож, попробуем их закоментить... Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
AuST 0 Жалоба Опубликовано May 2, 2011 Все-таки проблема не в ССЕ, есть еще идеи? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано May 2, 2011 Я бы посмотрел стек вызовов внутри OpenCV в момент падения. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
AuST 0 Жалоба Опубликовано May 2, 2011 Эм, а как? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано May 2, 2011 Ты же в QT Creator'е работаешь? У него должна быть возможность посмотреть стек (call stack или stack browser). Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
AuST 0 Жалоба Опубликовано May 2, 2011 Не знаю я как такое сделать )) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано May 2, 2011 Насколько я понимаю, это вот и есть стек: Отображается по умолчанию при отладке. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано May 3, 2011 process - thread -stack frame при дебаге в VS Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
AuST 0 Жалоба Опубликовано May 4, 2011 Если кому-то интересно, то проблема решается переносом проекта в VS. Все прекрасно заработало при использовании студийного компилятора. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах