[學習opencv]圖像讀取寫入,加減乘除


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就可以編譯運行了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM