【20160924】GOCVHelper綜述


    GOCVHelper(GreenOpen Computer Version Helper )是我在這幾年編寫圖像處理程序的過程中積累下來的函數庫。主要是對Opencv的適當擴展和在實現Mfc程序時候的功能增強。

    這里將算法庫開放源代碼,並且編寫一系列blog對函數實現進行說明。目的是在於“取之於互聯網,用之於互聯網”。並且也希望該庫能夠繼續發展下去。
    由於算法庫基於Opencv和Mfc進行編寫,所以要求閱讀使用者具備一定基礎。
    最終提交的是GOCVHelper.h 和GOCVHelper版本號.cpp兩個文件。
    
    通過閱讀頭文件,能夠對算法庫實現的功能加以了解:
    //名稱:GOCVHelper0.7b.cpp
    //功能:圖像處理和MFC增強
    //作者:jsxyhelu(1755311380@qq.com http://jsxyhelu.cnblogs.com)
    //組織:GREENOPEN
    //日期:2016-09-24
    #include "stdafx.h"
    #include <windows.h>
    #include <iostream>
    #include <fstream>
    #include <cstdlib>
    #include <io.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <vector>
    #include "opencv2/core/core.hpp"
    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/imgproc/imgproc.hpp"
    using namespace std;
    using namespace cv;
    #define  VP  vector<cv::Point>  //用VP符號代替 vector<point>
    #define  DIRECTION_X 0
    #define  DIRECTION_Y 1
    //調用算法庫請在Opencv和Mfc正確配置的環境下。
    //並且配置 項目-屬性-配置屬性-常規-字符集 設置為 使用多字節字符集
    //和 項目-屬性-配置屬性-c/c++-預處理器-預處理器定義 加入 _CRT_SECURE_NO_WARNINGS
    namespace GO{
        //讀取灰度或彩色圖片到灰度
        Mat imread2gray(string path);
        //帶有上下限的threshold
        Mat threshold2(Mat src,int minvalue,int maxvalue);
        //自適應門限的canny算法 
        Mat canny2(Mat src);
        void AdaptiveFindThresholdMat src,double *low,double *high,int aperture_size=3);
        void _AdaptiveFindThreshold(CvMat *dxCvMat *dydouble *lowdouble *high);
        //填充孔洞
        Mat fillHoles(Mat src);
        float getWhiteRate(Mat src);
        Mat getInnerHoles(Mat src);
        //頂帽去光差,radius為模板半徑
        Mat moveLightDiff(Mat src,int radius = 40);
        //將 DEPTH_8U型二值圖像進行細化  經典的Zhang並行快速細化算法
        void thin(const Mat &srcMat &dstconst int iterations=100);
        //使得rect區域半透明
        Mat translucence(Mat src,Rect rect,int idepth = 90);
        //使得rect區域打上馬賽克
        Mat mosaic(Mat src,Rect rect,int W = 18,int H = 18);
        //----------------------------------------------------------------------------------------------------------------------------------------//
        //尋找最大的輪廓
        VP FindBigestContour(Mat src);
        //尋找並繪制出彩色聯通區域
        vector<VPconnection2(Mat src,Matdraw);
        vector<VPconnection2(Mat src);
        //根據輪廓的面積大小進行選擇
        vector<VP>  selectShapeArea(Mat src,Matdraw,vector<VPcontours,int minvalue,int maxvalue);
        vector<VP>  selectShapeArea(vector<VPcontours,int minvalue,int maxvalue);
        //根據輪廓的圓的特性進行選擇
        vector<VP>  selectShapeArea(Mat src,Matdraw,vector<VPcontours,int minvalue,int maxvalue);
        vector<VP>  selectShapeArea(vector<VPcontours,int minvalue,int maxvalue);
        //計算輪廓的圓的特性
        float calculateCircularity(VP contour);
        //返回兩點之間的距離
        float getDistance(Point2f f1,Point2f f2);
        //----------------------------------------------------------------------------------------------------------------------------------------//
        //投影到x或Y軸上,上波形為vup,下波形為vdown,gap為誤差間隔
        void projection2(Mat src,vector<int>& vup,vector<int>& vdown,int direction = DIRECTION_X,int gap = 10);
        //----------------------------------------------------------------------------------------------------------------------------------------//
        //遞歸讀取目錄下全部文件
        void getFiles(string pathvector<string>& files,string flag ="r"/*如果不想遞歸這里不寫r就可以*/);
        //遞歸讀取目錄下全部圖片
        void getFiles(string pathvector<Mat>& files,string flag = "r");
        //遞歸讀取目錄下全部圖片和名稱
        void getFiles(string pathvector<pair<Mat,string>>& files,string flag="r");
        //刪除目錄下的全部文件
        void deleteFiles(string path,string flag = "r");
        //創建或續寫目錄下的csv文件,填寫“文件位置-分類”對
        int writeCsv(const stringfilename,const Vector<pair<string,string>>srcVect,char separator=';');
        //讀取目錄下的csv文件,獲得“文件位置-分類”對
        vector<pair<string,string>> readCsv(const stringfilenamechar separator = ';') ;
        //----------------------------------------------------------------------------------------------------------------------------------------//
        //C++的spilt函數
        void SplitString(const stringsvector<string>& vconst stringc);
        //! 通過文件夾名稱獲取文件名,不包括后綴
        void getFileName(const stringfilepathstringname,stringlastname);
        //-----------------------------------------------------------------------------------------------------------------------------------------//
        //ini 操作
        CString  GetInitStringCString Name1 ,CString Name2);
        void WriteInitStringCString Name1 ,CString Name2 ,CString strvalue);
        //excel操作
        CString ExportListToExcel(CString  sExcelFile,CListCtrlpListCString strTitle);
        BOOL GetDefaultXlsFileName(CStringsExcelFile);
    }
 






免責聲明!

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



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