После создания новой версии библиотеки OpenCV (opencv4), я нашел, что было немного изменений реализации, внесенных в highgui модуль, где немногие из подарка реализаций на highgui модуле были смещены к imgcodecs (главным образом imread и imwrite).
Установка CMAKE_CXX_FLAGS более конкретно для включения всех библиотек или конкретно-lopencv_imgcodecs был бы достаточен.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lopencv_imgcodecs")
Это, оказалось, решало проблему, с которой я сталкивался. Pkg-конфигурация - освобождает opencv списки все модули библиотеки, которые были созданы в opencv4.
Всегда труднее отлаживать оптимизированные программы, но всегда есть способы. Несколько дополнительных советов:
Конечно, отладить неоптимизированную версию всегда проще. В противном случае может помочь дизассемблирование кода. Другие технические приемы, которые я использовал, включают частичную деоптимизацию кода путем принудительной печати или регистрации промежуточных результатов или изменение критической переменной на «изменчивую», чтобы я мог хотя бы посмотреть на , что значение в отладчике .
При отладке релизных сборок вы можете использовать __asm nops; как заполнитель для точек останова (int 3). Это хорошо, так как вы можете гарантировать расположение точек останова без нарушения оптимизации компилятора или написания операторов printf / cout.
Скорее всего, то, что вы называете оптимизированным кодом, зашифровано для сокращения циклов (что затрудняет отладку), но на самом деле не очень оптимизировано. Вот пример того, что я имею в виду.
Я бы отключил оптимизацию компилятора, отладил и настроил ее самостоятельно, а затем снова включил бы оптимизацию компилятора, если в коде есть горячие точки, которые действительно присутствуют в коде, который компилятор видит ( не в сторонних библиотеках). (Я определяю точку доступа как часть кода, в которой часто встречается ПК. Это автоматически исключает циклы, содержащие вызовы функций, поскольку они крадут ПК.)