V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MrKeanu
V2EX  ›  程序员

求救-qt 转 msvc 后 Opencv 始终打不开视频!

  •  
  •   MrKeanu · 87 天前 · 962 次点击
    这是一个创建于 87 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目背景:这段时间为实验室做了一个小项目,技术栈原本为 QT+Opencv+Mingw ,一切正常。但因为引入了 onnxruntime 所以转为 msvc2019C++编译器,自此噩梦不断。

    问题描述:在 debug 其他问题后,目前遇到一个玄学 bug ,使用 QFileDialog 获取到了 QString 类型的文件路径,在使用 toLocal8Bit 转换为 msvc 编码的标注 string 后 opencv 的 cap.open 始终无法打开文件。我是使用了浑身解数也无法,只能来论坛求助大神了!

    问题补充:我尝试过将 FFMPEG 的 dll 复制到可执行软件的同目录,配置系统环境还有重新编译 opencv 等方法,均无效果。

    获取文件路径的代码:

        QString videoPath = QFileDialog::getOpenFileName(this, "打开文件", usedPath, tr("视频 (*.avi *.mp4 *.wmv)"));
    

    调用 opencv 的代码:

        cv::String dir = std::string(videoPath.toLocal8Bit());
        // cap.open(videoPath.toStdString());
        cap.open(dir, cv::CAP_FFMPEG);
    
    第 1 条附言  ·  87 天前

    此贴终结:出现各种奇怪bug只是表象,实际是因为导入依赖的顺序问题,同名依赖会按顺序导入致使项目出现异常,又难以发现。

    2 条回复
    4u1kto
        1
    4u1kto  
       87 天前
    尝试使用 toStdString(),把 dir 前后的路径都 print 出来试试,提供更多的错误信息或截图
    MrKeanu
        2
    MrKeanu  
    OP
       87 天前
    @4u1kto 感谢您的回复!这个问题昨晚上终于解决了,导入依赖的顺序问题,同名依赖会按顺序导入致使项目出现异常,又难以发现。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3465 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 11:34 · PVG 19:34 · LAX 03:34 · JFK 06:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.