正文之前
今天終于可以暢快的玩玩傳說中的OpenCV了。。。美滋滋!!
但是!!
此處敲桌!!我太天真了!人人談之色變的OpenCV怎么可能這么容易被我得手呢?!!不存在的!!
正文
實戰中遇到了幾個問題,主要是因為昨晚用的是python,今天用的我大C++,所以有點差別,昨晚沒發現!~~今天一弄,問題就出來了。。。
首先,是編譯不通過~ 你看,別人家的代碼毛問題都沒有!!但是只要我按照常規手法去操作,不變的代碼,千樣的GG~~~!!!!!!!
然而我的呢?!!!我的呢?!!!
全線飄紅啊!!!慘不忍睹啊!!!我一定要把報錯給你們看!!
/tmp/ccFjv3cQ.o:在函數‘main’中:
opencvtest1.cpp:(.text+0x2b):對‘cv::VideoCapture::VideoCapture(int)’未定義的引用
opencvtest1.cpp:(.text+0x3a):對‘cv::VideoCapture::isOpened() const’未定義的引用
opencvtest1.cpp:(.text+0x81):對‘cv::VideoCapture::operator>>(cv::Mat&)’未定義的引用
opencvtest1.cpp:(.text+0xe9):對‘cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)’未定義的引用
opencvtest1.cpp:(.text+0x190):對‘cv::GaussianBlur(cv::_InputArray const&, cv::_OutputArray const&, cv::Size_<int>, double, double, int)’未定義的引用
opencvtest1.cpp:(.text+0x20a):對‘cv::Canny(cv::_InputArray const&, cv::_OutputArray const&, double, double, int, bool)’未定義的引用
opencvtest1.cpp:(.text+0x26d):對‘cv::imshow(cv::String const&, cv::_InputArray const&)’未定義的引用
opencvtest1.cpp:(.text+0x295):對‘cv::waitKey(int)’未定義的引用
opencvtest1.cpp:(.text+0x2dd):對‘cv::VideoCapture::~VideoCapture()’未定義的引用
opencvtest1.cpp:(.text+0x3ba):對‘cv::VideoCapture::~VideoCapture()’未定義的引用
/tmp/ccFjv3cQ.o:在函數‘cv::String::String(char const*)’中:
opencvtest1.cpp:(.text._ZN2cv6StringC2EPKc[_ZN2cv6StringC5EPKc]+0x54):對‘cv::String::allocate(unsigned long)’未定義的引用
/tmp/ccFjv3cQ.o:在函數‘cv::String::~String()’中:
opencvtest1.cpp:(.text._ZN2cv6StringD2Ev[_ZN2cv6StringD5Ev]+0x14):對‘cv::String::deallocate()’未定義的引用
/tmp/ccFjv3cQ.o:在函數‘cv::Mat::~Mat()’中:
opencvtest1.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x39):對‘cv::fastFree(void*)’未定義的引用
/tmp/ccFjv3cQ.o:在函數‘cv::Mat::release()’中:
opencvtest1.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x4b):對‘cv::Mat::deallocate()’未定義的引用
collect2: error: ld returned 1 exit status
去他大爺的!!!還能好好玩耍嗎???然后,千方百計之下。。總算還是找到了解決方案了!!
我找了一篇博客,然后內容如下:
我一直以為是C++11或者g++版本的原因,看到:
g++ `pkg-config --cflags --libs opencv` lena.cpp -o lena
這樣會編譯失敗,而
g++ lena.cpp `pkg-config --cflags --libs opencv` -o lena
這樣就會成功。試了一下果然如此。真是奇怪。
我就一點都不奇怪。。。。有啥好奇怪的??不變的系統,流水的bug,習慣就好。。why it don't work?? It work!! but Why?千年疑問,別指望自己能回答,乖乖的照就好!!
一點就通,按照一些大佬說的,貌似是因為C++要指定動態庫鏈接???opencv這個小bitch真是讓人不省心啊!!
到了一這一步,在樹莓派上就可以愉快的跑起來了。。
但是在ubuntu上。。呵呵,年輕!!吃我一記bug!!!
error while loading shared libraries: libopencv_highgui.so.3.4: cannot open
借鑒博客來源: OpenCV編譯遇到的一個常見錯誤-./bin: error while loading shared libraries: libopencv_highgui.so.3.2: cannot open
他的分了很多步驟,但是我覺得沒必要。。所以給你放福利。。。一條命令搞定它!!當然,要知道具體情節,還是去那個博客看啊哈!
sudo echo "include /usr/local/lib" >> /etc/ld.so.conf && sudo ldconfig && sudo echo "PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig " >> /etc/bash.bashrc && echo "export PKG_CONFIG_PATH " >> /etc/bash.bashrc && source /etc/bash.bashrc
這一句就是他整個博客的濃縮,盡管拿去,中間會要你輸入密碼。。不過應該就一次了!!
然后你就發現,ubuntu也可以跑攝像頭了!!娃哈哈!!
有點驚悚哈。。別介意~~ 我溜了
正文之后
唉。我初中班主任的兒子老是不愛學習。。被他媽媽一罵就鬧氣,要中考了還不學習。。。我在這兒苦口婆心的勸。。真的是。。頭疼。。
現在的小孩怎么就沒一點危機感呢?未來這個世界是要“人吃人的”,不趁著社會給你相對公平發展的機會去擠壓更多人的生存空間,就這么甘做社會的螺絲釘???真是,幼稚!