OpenCv и visualStudio

uaha1979

Задача:
взять видео с вебки и вывести его не экран.
Проследовал инструкции:
http://www.youtube.com/watch?v=cgo0UitHfp8
Выдает ошибку:
"Запуск программы не возможен, тк на компьютере отсутствует MSVCP100D.dll. Попробуйте переустановить программу."
В system32 файлик вижу.
код hello world

#include "stdafx.h"
#include <opencv\cv.h>
#include <opencv\highgui.h>

using namespace cv;

int _tmain(int argc, _TCHAR* argv[]){
char c;
printf("Hello world");
//Create matrix to store image
Mat image;

////initialize capture

//VideoCapture cap;
//cap.open(0);

////create window to whow image
//namedWindow("window", 1);

//while(1){
// //copyj webcam stream to image

// cap>>image;

// //pring image to screen
// imshow("window", image);

// //delay 33ms
// waitKey(33);
//}

scanf_s("%c", &c);
return 0;
}

если закоментриовать Mat image, то HelloWorld работает.
Как мне вывести видео с вебки на экран?
Заметил, что когда происходит ошибка, снизу пишется: "loading symbols for opencv_core245d.dll"

agaaaa

В system32 файлик вижу.
Если у тебя система 64-битная, а программу ты собираешь 32-битную, то файлик должен быть в SysWOW64.
В любом случае крайне странно, что у тебя с этим проблема, т.к. ты собрал программу на этом же компьютере.
Если не разберёшься с dll'кой, переключи режим линковки в статический.

Whoman-in-white

просто положи эту dll в папку с экзешником

zorin29

Насколько мне известно, если собираешь C++ проект Visual Studio, то он ссылается на библиотеку MSVC*** (*** зависит от версии VS). Теперь для того, чтобы экзешник работал на другой машине, надо на ней установить Visual Studio *** Redistributable (Опять-таки *** это номер студии).
Но если, не дай Боже, ты пожелаешь слинковать DLL-ку, собранную в одной версии VS, со своим проектом, собираемым другой версией VS, то твой проект будет ссылаться на одну версию MSVC*** (пусть MSVCR90 а DLL-ка - на другую (пусть MSVCR80). При первом вызове этой DLL-ки система попробует загрузить MSVCR80, и рухнет, т.к. уже загружена MSVCR90.
Решение 1: собирать DLL-ку и твой проект одной и той же версией VS.
Решение 2: собрать DLL со статической линковкой, чтобы она не зависела от MSVC***.
Поправьте меня, если я ошибаюсь, но эту проблему я вижу далеко не в первый раз.

apl13

Технологии® Майкрософт™.

Maurog

Поправьте меня, если я ошибаюсь
динамические рантаймы могут сосуществовать в одном приложении, из-за загрузки разных версий рантайма крешей не будет
проблемы могут возникнуть из-за неграмотного cross-dll взаимодействия: стандартный пример - выделение памяти в одном бинаре и освобождение в другом. при выделении памяти может использоваться одна версия рантайма, при освобождение - другая. вот тут краши и возможны. лично я сторонник динамического рантайма онли

Maurog

на компьютере отсутствует MSVCP100D.dll
у вас на компьютере отсутствует установленный дебужный рантайм для 10 студии. предположу, что opencv*.dll файлы вы не сами собрали (скачали? а сами при этом используете другую версию студии (VS2012 ?)
дебужный рантайм нельзя поставить с помощью redist.exe, если не ошибаюсь. нужно ставить соответствующую версию студии (а там внутри рантайм можно найти либо скачать эти файлы из инета. зато с помощью redist.exe можно поставить релизную версию рантайма, в связи с этим могу дать след. рекомендации:
1) поставить релизный рантайм для студии 10, скомпилировать свою прогу в релизе и попробовать запустить. ссылки:
http://www.microsoft.com/en-us/download/details.aspx?id=8328
http://www.microsoft.com/en-us/download/details.aspx?id=5555
это два рантайма для двух версий студии 10. скорее всего вам нужен SP1
2) при проблемах с загрузками я рекомендую использовать тулзу depends.exe, чтобы понять, каких зависимостей не хватает. ссылка: http://www.dependencywalker.com/
3) можете попробовать скомпилировать opencv своим компилятором. только гугл спешит напугать, что там сложно. ссылка: http://docs.opencv.org/doc/tutorials/introduction/windows_in...
успехов

ava3443

это два рантайма для двух версий студии 10. скорее всего вам нужен SP1
К счастью, думать над под-версией рантайма после VS2005 уже не надо: начиная с VS2008 подойдёт любой рантайм от той же версии студии. Т.е. уже пофигу с SP1, без него, с MFC, с ATL security update, и прочее гавно - лишь бы хоть какой-нибудь vcredist от 2008. Тоже самое для 2010 - подойдёт любой vcredist для 2010.
P.S. конечно, с учётом разрядности.

Maurog

Тоже самое для 2010 - подойдёт любой vcredist для 2010.
не знаю что там насчет VS2010, но у VS2012 несколько рантаймов: для первой версии, для U1 и для CTP (еще и для XP наверное есть)
так что все же рекомендую на версию смотреть
Оставить комментарий
Имя или ник:
Комментарий: