日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

ubuntu(linux)下安装openCV(ffmpeg导致的编译不通过的解决办法)

發布時間:2025/3/21 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ubuntu(linux)下安装openCV(ffmpeg导致的编译不通过的解决办法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于這個問題,網上有很多現成的方法,但是很多方法也都存在問題,所以自己總結一下,把自己的安裝過程記錄下來,也方便以后查閱。

1.需要的包:

????GCC 4.4.x 或更高

????CMake 2.8.7 或更高

????Git

????GTK+2.x 或更高,包括頭(libgtk2.0-dev)

????pkg-config

????Python 2.6 或以后,Numpy 1.5或以后,和開發包(python-dev,python-numpy)

????ffmpeg 或者libav開發包:libavcodec-dev, libavformat-dev, libswscale-dev

????可選包:libtbb2 ,libtbb-dev

????可選包:libdc1394 2.x? ?

????可選包:libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-22-dev

(如果需要的包沒有安裝的話,openCV是沒法使用的,所以還是按步驟老老實實一個一個安裝把)

然后準備工作做完了,接下來就是開始安裝了。

1.

sudo apt-get install build-essential <pre class="brush:shell;toolbar: true; auto-links: false;"><code class="hljs q">sudo?apt-<span class="hljs-built_in">get</span>?install?cmake?git?libgtk2.0-<span class="hljs-built_in">dev</span>?pkg-config?libavcodec-<span class="hljs-built_in">dev</span>?libavformat-<span class="hljs-built_in">dev</span>?libswscale-<span class="hljs-built_in">dev</span></code>

2.下載opencV壓縮包,并解壓到你需要的位置

3.利用終端進入你解壓的opencV的包

4.新建build文件夾并進入這個文件夾

mkdir build cd build
5.配置opencV,

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

6.進行編譯(這個過程話費的時間比較長,可能有十分鐘到半個小時)

make 7.安裝opencV庫到系統

sudo make install

這些步驟完成之后,一般opencV就可以使用了。

然后測試一下。

新建一個HelloWorld.cpp的源程序(為了保證程序的運行,提前把測試圖片發到這個程序的同一個目錄下)

#include<stdio.h> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp>using namespace cv;int main( int argc, char** argv ) {if( argc != 2 )//判斷參數是否是兩個{printf( " No image data \n " );return -1;}char* imageName = argv[1];Mat image;image = imread( imageName, 1 );//讀入圖片if( !image.data)//判斷是否有數據{printf( " No image data \n " );return -1;}namedWindow( imageName, CV_WINDOW_AUTOSIZE );imshow( imageName, image );//顯示圖片waitKey(0);return 0; }
新建CMakeList.txt文件如下(里面的參數是我的文件的名字,如果你文件的名字不同,也需要做相應的更改。)

cmake_minimum_required(VERSION 2.8) project(helloworld) add_executable(helloworld HelloWorld.cpp) find_package(OpenCV REQUIRED) target_link_libraries(helloworld ${OpenCV_LIBS} 然后就可以編譯 mkdir build cd build cmkae .. make
編譯完成之后就運行它(把圖片作為參數傳遞進函數)

./helloworld pitcure.jpg如果各項步驟等執行正確的話,運行程序,就可以看到顯示的圖片了。



可能遇到的問題:

(1):報錯如下:

In file included from /home/cuizhiyan/code/opencv-3.0.0/modules/videoio/src/cap_ffmpeg.cpp:45:0:
/home/cuizhiyan/code/opencv-3.0.0/modules/videoio/src/cap_ffmpeg_impl.hpp:1174:0: warning: "CV_CODEC_ID" redefined
?#define ? ?CV_CODEC_ID c_id = c->codec_id;
?^
/home/cuizhiyan/code/opencv-3.0.0/modules/videoio/src/cap_ffmpeg_impl.hpp:162:0: note: this is the location of the previous definition
?# ?define CV_CODEC_ID AVCodecID
?^
In file included from /home/cuizhiyan/code/opencv-3.0.0/modules/videoio/src/cap_ffmpeg.cpp:45:0:
/home/cuizhiyan/code/opencv-3.0.0/modules/videoio/src/cap_ffmpeg_impl.hpp:1556:0: warning: "static" redefined
?#define static inline bool cv_ff_codec_tag_list_match(const AVCodecTag *const *
?^
/home/cuizhiyan/code/opencv-3.0.0/modules/videoio/src/cap_ffmpeg_impl.hpp:1546:0: note: this is the location of the previous definition
?#define static inline bool cv_ff_codec_tag_match(const AVCodecTag *tags, enum C
?^
In file included from /home/cuizhiyan/code/opencv-3.0.0/modules/videoio/src/cap_ffmpeg.cpp:45:0:
/home/cuizhiyan/code/opencv-3.0.0/modules/videoio/src/cap_ffmpeg_impl.hpp: In function ‘AVStream* icv_add_video_stream_FFMPEG(AVFormatContext*, AVCodecID, int, int, int, double, int)’:
/home/cuizhiyan/code/opencv-3.0.0/modules/videoio/src/cap_ffmpeg_impl.hpp:1177:19: error: ‘c_id’ was not declared in this scope
? ? ?c->codec_id = c_id;
? ? ? ? ? ? ? ? ? ?^
In file included from /home/cuizhiyan/code/opencv-3.0.0/modules/videoio/src/cap_ffmpeg.cpp:45:0:
/home/cuizhiyan/code/opencv-3.0.0/modules/videoio/src/cap_ffmpeg_impl.hpp: At global scope:
/home/cuizhiyan/code/opencv-3.0.0/modules/videoio/src/cap_ffmpeg_impl.hpp:1547:1: error: expected unqualified-id before ‘{’ token
?{
?^
In file included from /home/cuizhiyan/code/opencv-3.0.0/modules/videoio/src/cap_ffmpeg.cpp:45:0:
/home/cuizhiyan/code/opencv-3.0.0/modules/videoio/src/cap_ffmpeg_impl.hpp:1023:21: warning: ‘const char* icvFFMPEGErrStr(int)’ defined but not used [-Wunused-function]
?static const char * icvFFMPEGErrStr(int err)
? ? ? ? ? ? ? ? ? ? ?^
/home/cuizhiyan/code/opencv-3.0.0/modules/videoio/src/cap_ffmpeg_impl.hpp:1104:18: warning: ‘AVFrame* icv_alloc_picture_FFMPEG(int, int, int, bool)’ defined but not used [-Wunused-function]
?static AVFrame * icv_alloc_picture_FFMPEG(int pix_fmt, int width, int height, b
? ? ? ? ? ? ? ? ? ^
/home/cuizhiyan/code/opencv-3.0.0/modules/videoio/src/cap_ffmpeg_impl.hpp:1130:18: warning: ‘AVStream* icv_add_video_stream_FFMPEG(AVFormatContext*, AVCodecID, int, int, int, double, int)’ defined but not used [-Wunused-function]
?static AVStream *icv_add_video_stream_FFMPEG(AVFormatContext *oc,
? ? ? ? ? ? ? ? ? ^
modules/videoio/CMakeFiles/opencv_videoio.dir/build.make:182: recipe for target 'modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_ffmpeg.cpp.o' failed
make[2]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_ffmpeg.cpp.o] Error 1
CMakeFiles/Makefile2:6727: recipe for target 'modules/videoio/CMakeFiles/opencv_videoio.dir/all' failed
make[1]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/all] Error 2
Makefile:149: recipe for target 'all' failed
make: *** [all] Error 2



從上面可以看出,編譯失敗了,主要原因是因為ffmpeg這個東西的問題(查了不少東西,這個ffmpeg好象是為了顯示視頻用的,有些人建議如果只用opencv做圖片開發,可以把這個卸載了。但是我覺得這樣做不保險,以后很有可能要操作視頻,到時候又會報錯。所以這個方法不可取)

最后找了一個確實可行的解決方法,該報錯的原因是因為opencv源碼里本來有bug,需要對opencv的源碼進行更改,附上鏈接:

點擊打開鏈接

具體的操作是,如果你用的是opencv3.0.0版本,那么修改文件

opencv-3.0.0/modules/videoio/src/cap_ffmpeg_impl.hpp,

除了在#define定義的后面的那個以外,把剩下所有的AVCodecID用CV_CODEC_ID替換。


(2):報錯如下:

/home/usrname/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp:120:54: error: ‘NppiGraphcutState’ has not been declared

typedef NppStatus (*init_func_t)(NppiSize oSize, NppiGraphcutState** ppStat

^/home/usrname/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp:135:18: error: ‘NppiGraphcutState’ does not name a type

operator NppiGraphcutState*() ^/home/usrname/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp:141:9:

error: ‘NppiGraphcutState’ does not name a type NppiGraphcutState* pState;



這個包括是因為CUDA的問題,嘗試改一處源碼就可以了。

在graphcut.cpp文件中,將

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)

改為

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)

就可以了。


總結

以上是生活随笔為你收集整理的ubuntu(linux)下安装openCV(ffmpeg导致的编译不通过的解决办法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美激情在线观看 | 国偷自产视频一区二区久 | 久草视频免费 | 亚洲一区二区三区视频在线 | sm调教羞耻姿势图片 | 六月丁香色婷婷 | 巨乳女教师的诱惑 | 亚洲人网 | 8x8ⅹ国产精品一区二区二区 | 欧美精品一级二级三级 | 91国偷自产一区二区三区观看 | 极品久久久久久 | 一区二区三区视频在线 | 播播成人网 | 69久久久久久 | 亚洲毛片在线 | 91av麻豆| 黑人干亚洲人 | 国产精品白虎 | 青青草av在线播放 | 欧美视频二区 | 六月色婷婷 | 91亚洲精品一区二区乱码 | 国产麻豆精品久久一二三 | 白洁av | 亚洲精华国产精华精华液网站 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 亚洲三级a| 哺乳援交吃奶在线播放 | 精品一区二区三 | 美女的诞生免费观看在线高清 | 国产三级自拍视频 | 91传媒理伦片在线观看 | 色.com | 免费日本特黄 | 色婷婷六月 | 狠狠干av| 亚洲美女一区 | 欧美1 | 健身教练巨大粗爽gay视频 | 日本黄色视 | 一级特黄性色生活片 | 在线黄网| 91视频一区 | 日本r级电影在线观看 | 91情侣视频 | √天堂资源地址在线官网 | 国产成人愉拍精品久久 | 国 产 黄 色 大 片 | 日韩福利电影在线观看 | 干一干操一操 | 殴美黄色大片 | 香蕉视频久久久 | 日韩欧美一二三 | 神马午夜在线观看 | 懂色av一区二区 | 成人一区二区在线观看 | 蜜臀av性久久久久av蜜臀妖精 | 日本成人在线一区 | 人人九九精 | 欧美影视一区二区 | 波多野结衣中文在线 | 国产97色在线 | 日韩 | 久久精品香蕉 | 欧美三级韩国三级日本三斤在线观看 | 欧美在线免费播放 | 久久精品视频8 | 成年在线视频 | 日日爽爽 | 欧美日韩在线视频免费观看 | 黄色在线观看免费视频 | 一区免费观看 | 欧美另类极品videosbest使用方法 | 特级免费毛片 | 欧美二区在线观看 | 国产男人搡女人免费视频 | 私库av在线| 色呦呦网站在线观看 | 亚洲欧美一区二区三 | 久久久久久久久久久99 | 精品人妻一区二区三区含羞草 | 天天射天天搞 | 黑丝美女一区二区 | 少妇太紧太爽又黄又硬又爽 | 熟妇大屁股一区二区三区视频 | 人妻大战黑人白浆狂泄 | 台湾佬美性中文娱乐网 | 麻豆美女视频 | 一级片小视频 | 欧美毛片在线 | 天天射天天干 | 国产精品久久久久久久久久久久久 | 国产第6页 | 999精彩视频 | 日日草夜夜操 | 国产三级网 | 久久人妻无码aⅴ毛片a片app | 少妇精品久久久久久久久久 | 色网站观看 |