[Добавьте HTTP: // в начало графических ссылок, чтобы они работали для вас.] [Все шаги здесь были выполнены с версиями Release и Debug.Показанные изображения отображают только информацию, связанную с отладкой.]
OpenCV 2.1.0 не работает должным образом с Visual Studio 2010 на моем компьютере, когда он начинает загружать _Video файлы с помощью библиотеки динамических ссылок opencv_ffmpeg_.Возник ряд проблем, особенно с моими попытками получить библиотеки и тому подобное, чтобы связать их для использования в приложениях.99% ошибок, с которыми я столкнулся, я решил, за исключением одной:
i52.tinypic.com / 2yxhmrq.jpg
Текст ошибки:
R6034<br>An Application has made an attempt to load the C runtime library without using a manifest. This is an unsupported way to load Visual C++ DLLs. You need to modify your application to build with a manifest. For more information, please see the "Visual C++ Libraries a SHared Side-by-Side Assemblies" topic in the production documentation.<br><br>
(Press Retry to debug the application)</p>
<p>Abort | Retry | Ignore
Ошибка возникает из этого исходного кода:
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
int main(int argc, char* argv[]) {
cvNamedWindow( "Example2", CV_WINDOW_AUTOSIZE );
CvCapture* capture = cvCreateFileCapture( "Missile.avi" );
IplImage* frame;
while (1) {
frame = cvQueryFrame( capture );
if( !frame ) break;
cvShowImage( "Example2", frame );
char c = cvWaitKey(33);
if( c == 27 ) break;
}
cvReleaseCapture( &capture );
cvDestroyWindow( "Example2" );
}
Missile.avi находится в каталоге приложения (при использовании полного пути все равно генерируется та же ошибка, поэтому это не File-Not-Обнаружена ошибка).
Вот контрольный список всего, что я до сих пор делал:
Попытка следовать инструкциям, установленным OpenCV Wiki (opencv.willowgarage).com / вики / VisualC% 2B% 2B_VS2010).Использование предварительно собранных установочных бинарных файлов для VS2008 мне не помогло.
После долгих поисков и поисков в Интернете я увидел, что люди добились успеха, скомпилировав библиотеки самостоятельно после выполненияСДЕЛАТЬ операцию из исходного кода, используя CMake.Итак, я скомпилировал OpenCV 2.1.0 с нуля, используя CMake 2.8.2 (графический интерфейс) для генерации решения Visual Studio 2010 OpenCV.Он был создан с указанным параметром Cmake: BUILD_AS_SHARED_LIBS [YES].Решению удалось встроить VS2010 с ошибками 0 в любом из проектов.
Поместить все соответствующие файлы в каталоги VC ++ под новым листом свойств Visual Studio 2010: i53.tinypic.com / 2mxlrpg.jpg i54.tinypic.com/2rcbl9j.jpg
Сохраните необходимые файлы Visual Studio ".pdb", необходимые для отладки.Это была одна из первоначальных ошибок, когда я просто использовал Установленные бинарные файлы из OpenCV Wiki - мне нужно было иметь файлы .PDB, чтобы использовать режим «Отладка».i56.tinypic.com/oh2tco.jpg
5a.Выполнение номера 4 позволило мне без проблем использовать следующий код на основе OpenCV:
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
int _tmain(int argc, _TCHAR* argv[])
{
IplImage *img = cvLoadImage("funny-pictures-cat-goes-pew.jpg");
cvNamedWindow("Image:",1);
cvShowImage("Image:",img);
cvWaitKey();
cvDestroyWindow("Image:");
cvReleaseImage(&img);
return 0;
}
5b.Текущая проблема возникла, когда я начал компилировать код, который требовал использования видеофайлов - MOV, AVI, MP4 и т. Д. (См. Блок кода в верхней части вопроса).Из-за связывания исходного кода в свойствах каталогов VC ++, исходный код в cvwrap32.cpp, который использовал функцию LoadLibrary, похоже, вызывал ошибку: i51.tinypic.com/69kgg7.jpg
В сообщении об ошибке указано, что загруженная библиотека не имеет манифеста (если мое чтение ошибки, показанное на рисунке вверху, было правильным).Итак, я позаботился о том, чтобы каждая библиотека, изначально сгенерированная с помощью CMake 2.8.2 (gui) и скомпилированная в VS2010, имела файл ".manifest".Конечно же, каждая библиотека имела (LibName) .embed.manifest и (LibName) manifest.rc.Я даже переместил их в каталог приложения, где находились файлы текущего приложения .PDB, Manifest и .ILK.Ошибка по-прежнему означала, что загружаемая мной библиотека не имела манифеста.
В качестве последней попытки паранойи я проверил каждый проект в решении OpenCV VS2010, чтобы убедиться, что / ДАна для манифеста поколения.Это было.
Выполнен тест зависимостей.exe.Все необходимые библиотеки DLL (все msvcr90.dll и т. Д.).
Это все, что я получил, до того, как все пошло к черту.Кажется, я не могу исправить эту ошибку, потому что opencv_ffmpeg210.dll, который LoadLibrary вызывает из cvwrap32.cpp, по-видимому, не имеет данных манифеста.
У кого-нибудь есть идеи?
КомпьютерСпецификации: Windows 7 Ultimate x86 (32-разрядная версия).Компиляция с Visual Studio 2010 с помощью Visual C ++.