我有一个Qt 5.3.2 GUI项目,它使用用MSVC110(x86)编译的openCV 2.4.8并用 InstallShield 打包成一个 setup.exe(包括所有依赖项) 即可。我在三台不同的win7机器上测试了设置,其中两台运行应用程序非常漂亮(三台机器中没有任何Qt或openCV环境)。在第三台机器上我有一个奇怪的问题,当应用程序执行并且GUI显示它有功能损失时,主要问题是一个或多个插槽功能部分工作(无法检查是否超过一个函数有问题,因为我不能通过第一个)。
一个简化的例子是:
加载视频功能不保存帧。
它首先提示用户使用QFileDialog::getOpenFileName
选择视频文件,该部分似乎工作正常。
然后将视频读入cv::VideoCapture vc(videoPath.toStdString())
我不知道这部分是否正常工作。
然后它应该使用cv::imwrite(path, frame)
在 jpg 文件中保存每个帧,但不。
代码不是问题,因为它在两台机器上没有任何问题。
我真的迷路了,之前从未见过这样的东西(我知道有一些openCV功能可以在没有丢失* .dll错误的情况下无声地失败但是这似乎并非如此,因为它在两个上运行了机器)。所以我认为这个问题与目标机器有关,但是什么原因导致它?
以防万一我写了一个上面描述的小测试函数:
QString videoPath = QFileDialog::getOpenFileName(this, tr("Select video file"), QString(), tr("Video (*.avi *.mp4)"));
cv::VideoCapture vc;
vc.open(videoPath.toStdString());
if(!vc.isOpened()){
qDebug() << "Failed opening file";
return;
}
int count = 1;
cv::Mat frame;
while(vc.read(frame)){
std::stringstream ss;
ss << "test/" << count++ << ".jpg";
cv::imwrite(ss.str(), frame);
qDebug() << "wrote " << ss.str().c_str();
}
qDebug() << "done";
Y会失败吗?
PS:它没有写入权限以管理员的身份安装在不同的驱动器上,但没有成功。
修改
问题解决了。正是在这个问题中我所谈到的openCV
的沉默失败。需要在应用程序中分发 opencv_flann248.dll 。希望它不会发生在其他任何人身上。这真的很痛苦!