1. 程式人生 > >Qt中呼叫OpenCV函式庫時Crashed問題的解決。

Qt中呼叫OpenCV函式庫時Crashed問題的解決。

              這幾天想在虛擬機器上搭建Ubuntu的開發環境,包括了Matlab和QT(C++)的開發工具安裝等,同時由於做影象處理,所以還必須要安裝FFMPEG和OpenCV庫。下面就講講我們安裝時出現qt中呼叫OpenCV庫時奔潰的問題。

            1、我首先安裝了ffmpeg(matlab中一個測試程式視訊寫出需要它,所以先安裝了它),然後在安裝QT(建議不要使用源安裝),最後再安裝OpenCV。安裝中雖然遇到些問題,但是都通過查詢解決了,但是最後再 qt中測試OpenCV時,程式在啟動時發生crashed,通過網路查詢確定不是pro檔案配置的問題及系統變數的問題。不過有思路就是可能opencv庫編譯的時候沒有搜尋到qt路徑,因此再次執行下面命令時

           1.1 cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON

               檢視列印資訊找不到qt的路徑,因此根據網路資料修改為

           cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON  -D Qt5Concurrent_DIR="/opt/Qt5.7.0/5.7/gcc_64/lib/cmake\Qt5Concurrent" -D Qt5Core_DIR="/opt/Qt5.7.0/5.7/gcc_64/lib/cmake\Qt5Core" -D Qt5Gui_DIR="/opt/Qt5.7.0/5.7/gcc_64/lib/cmake\Qt5Gui" -D Qt5OpenGL_DIR="/opt/Qt5.7.0/5.7/gcc_64/lib/cmake\Qt5OpenGL" -D Qt5Test_DIR="/opt/Qt5.7.0/5.7/gcc_64/lib/cmake\Qt5Test" -D Qt5Widgets_DIR="/opt/Qt5.7.0/5.7/gcc_64/lib/cmake\Qt5Widgets" ..

                紅色部分為新新增資訊,再次執行cmake,得到的編譯連結庫在Qt呼叫中成功。

          1.2 但是在測視訊檔案時,發現無法開啟,並且我的vlc播放器也無法正常工作了,然後重新執行上面的命令,檢視到列印資訊中ffmpeg,結果為下:

--     FFMPEG:                  NO
--       codec:                     NO
--       format:                    NO
--       util:                          NO
--       swscale:                  NO
--       resample:                NO
--       gentoo-style:           YES

         解決辦法是找到ffmpeg的安裝路徑,lib資料夾下有pkgconfig, .pc檔案位置是opencv需要知曉的資訊
,因此講PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/ffmpeg/lib/pkgconfig資訊新增到 /etc/environment檔案中,然後執行下面的命令:

            source /etc/environment

           然後按照一般方式進行安裝,生成的動態連結庫在QT中呼叫視訊時可正常工作。

          參考連結:

          http://www.linuxdiyf.com/linux/13355.html

          http://jingyan.baidu.com/article/db55b609a3f6274ba30a2fb8.html

          http://answers.opencv.org/question/59322/could-not-find-a-package-configuration-file-provided-by-qt5core/

相關推薦

Qt呼叫OpenCV函式Crashed問題的解決

              這幾天想在虛擬機器上搭建Ubuntu的開發環境,包括了Matlab和QT(C++)的開發工具安裝等,同時由於做影象處理,所以還必須要安裝FFMPEG和OpenCV庫。下面就

關於QT呼叫MFC動態傳遞中文字元亂碼問題

凡是亂碼,一定是解碼方式不對,在此做個小小的總結。 MFC CString和QT QString都採用unicode編碼 MFC中的char *採用GBK編碼,QT中的char *採用UTF-8編碼,這裡關於字元的編碼,有個規律就是和原始碼檔案儲存的編一致。    

【lua】C 函式呼叫Lua函式,對於lua_pcall使用的困惑

最近在學習使用Lua,也通過基本的語法知識完成了公司的一個關於配置檔案引數合法性檢查的小任務。雖然任務完成了,但對於一些函式的呼叫目的還是搞不明白,這兩天再次重看了Manual Reference,稍微梳理出了一點眉目,記錄在此。 首先看一段小小小程式 fun

C 函式呼叫Lua函式,對於lua_pcall使用的困惑

最近在學習使用Lua,也通過基本的語法知識完成了公司的一個關於配置檔案引數合法性檢查的小任務。雖然任務完成了,但對於一些函式的呼叫目的還是搞不明白,這兩天再次重看了Manual Reference,稍微梳理出了一點眉目,記錄在此。 首先看一段小小小程式 //test.lua

SqlAlchemy 操作數據session和scoped_session的區別

tro color war mapped 數據庫 大小 bind nes email 原生session: from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from

關於在electron呼叫C++動態的經驗總結

前言       electron以nodejs作為底層執行環境,所以自然而然就想到了他能否呼叫C++編寫的動態庫,恰好我最近在做一個關於使用electron呼叫dll的專案,也就花了一點時間去了解和實踐,這期間走

協程呼叫阻塞函式

from concurrent.futures import ThreadPoolExecutor from tornado import gen threadpool = ThreadPoolExecutor(2) def mySleep(count): import time

Effective C++ 條款09 絕不在構造和析構過程呼叫virtual函式

本條款的內容主要講述了在子類和父類之間的構造和析構階段不要去呼叫virtual函式,因為那可能會和你預想的結果有出入。 class Transportion{ Transportion(); virtual void logTransction()const = 0;//純虛擬函式};Transp

[llvm]在llvm的codegen程式碼呼叫printf函式

為了除錯方便,有時我們需要在codegen程式碼中新增printf函式,列印除錯資訊 PrintTest.cpp //clang++ PrintTest.cpp `llvm-config --cxxflags --ldflags --system-libs --libs core mcj

C++建構函式呼叫虛擬函式是否有多型的效果

C++多型的一個重要應用就是虛擬函式。但是當我們再基類的建構函式中呼叫一個子類過載的虛擬函式會出現多型的效果嗎?我們具體看一下下面的例項: #include <iostream> #define P(x) std::cout<<x<<std::endl;

Python呼叫opencvimread()函數出錯

OpenCV中錯誤opencv-3.3.1\modules\highgui\src\window.cpp:339: error: (-215) size.width>0 && size.height>0 in function cv::imshow import

java呼叫Oracle儲存過程,出現異常:java.sql.SQLException: ORA-00928: 缺失 SELECT 關鍵字(已解決)

在java中呼叫Oracle儲存過程時,出現異常:java.sql.SQLException: ORA-00928: 缺失 SELECT 關鍵字 //java程式碼 @Test public void testProcedure(){

FFmpeg呼叫av_read_frame函式導致的記憶體洩漏問題

  使用FFmpeg的av_read_frame函式後,每讀完一個packet,必須呼叫av_packet_unref函式進行記憶體釋放,否則會導致記憶體釋洩漏。   在vs(博主所用的ffmpeg版本是3.4.2,vs版本是vs2015)中編譯執行如下程式碼: #inc

關於Qt的tr()函式講解

轉載自https://blog.csdn.net/andy_93/article/details/52836369 在論壇中漂,經常遇到有人遇到tr相關的問題。用tr的有兩類人: (1)因為發現中文老出問題,然後搜尋,發現很多人用tr,於是他也開始用tr (2)另一類人,確實是出

在ROS呼叫外部連結檔案(.so)配置方法

舉例說明吧: 1、建立檔案樹如下: myproject: -include --Interface.h -lib --libInterface.so -src --control.cpp

effective c++條款09:絕不在構造和析構過程呼叫virtual函式

#include <iostream> using namespace std; class BaseClass { public: BaseClass() { cout << "BaseClass" << endl; } ~

如何在QT建立並引用

基本操作流程: 在QT中新建一個庫,包含(.pro & .h & _global.h & .cpp )–> 編寫程式和庫函式,執行 qmake(生成Makefil檔案) 和build後,在和專案資料夾 [A] 並列的build…資料

linux下如何執行c++程式(包括呼叫外部函式

這個問題困擾了我好久,但在網路上搜索很久也沒有找到具體的,條理清晰的一篇。所以,自己動手豐衣足食(拖拖拖了一個月。。) 執行c++程式 事實證明gcc是理解不了c++的。。 用g++執行你的程式,比如:g++ main.cpp g++產生一個.out

Python呼叫OpenCV介面儲存攝像頭或視訊的影象幀到視訊檔案

Python中呼叫OpenCV介面儲存攝像頭或視訊中的影象幀到視訊檔案 import cv2 cap = cv2.VideoCapture(0) # 開啟攝像頭 size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2

Python呼叫OpenCV介面的高斯混合模型,實現對運動目標的檢測,並保存錄制視訊

Python中呼叫OpenCV介面中的高斯混合模型(GMM),實現對運動目標的檢測   import numpy as np import cv2 # TODO: 本程式碼使用OpenCV介面中的高斯混合模型,實現對運動目標的檢測 cap = cv2.VideoCapture(