opencv這個圖像庫兩年前就會用了,本科畢業設計就是用的他,不過其中有很多函數直到現在我也沒怎么用過。
關於這個庫的學習,我自己的目標是只需要學會怎樣調用庫函數完成目標就可以了,至於原理性的東西我就不去深究了,原理的東西我會在matlab中實現的。
平台是ubuntu+opencv2,具體版本我忘了。不過2之后的應該都可以。
第一個先練手的程序,我盡量用C++版的:
#include "cv.h" #include "highgui.h" #include <iostream> using namespace std; using namespace cv; int main(int argc, char* argv[]) { Mat img1 = imread("maki.jpg"); Mat img2 = imread("misaka.jpg"); int height=img1.rows; //行數 int width=img1.cols; //列數 int dims=img1.dims; //維數 cout<<height<<" "<<width<<" "<<dims<<endl; Mat tmp(height,width,CV_8UC3,Scalar(2,2,2)); //產生一個[height width 3]所有元素全為2的矩陣 Mat re; //運算符重載真是讓人喜歡 re=img1+Scalar(100,100,100); //圖像相加 imshow("image1", re); re=img1-img2; //圖像相減 imshow("image2",re); re=img1*2; //圖像和一個數相乘 imshow("image3",re); re=img1/2; //圖像和一個數相除 imshow("image4",re); re=img1.mul(tmp); //img1和tmp每個元素相乘 imshow("image5",re); Vec3i s=re.at<Vec3b>(1,1); //數據訪問 cout<<s.val[0]<<" "<<s.val[1]<<" "<<s.val[2]<<endl; imwrite("re.jpg",re); waitKey(); return 0; }
vim需要重新設置以方便編譯,.exrc文件加入如下代碼:
" C++的編譯和運行 map <F6> :call CompileRunGpp()<CR> func! CompileRunGpp() exec "w" exec "!g++ `pkg-config opencv --libs --cflags opencv` % -g -o %<" exec "! ./%<" endfunc
以后寫完直接按F6就可以編譯運行了。