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 AdaptiveFindThreshold( Mat src,double *low,double *high,int aperture_size=3);
        void _AdaptiveFindThreshold(CvMat *dx, CvMat *dy, double *low, double *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 &src, Mat &dst, const 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<VP> connection2(Mat src,Mat& draw);
        vector<VP> connection2(Mat src);
        //根据轮廓的面积大小进行选择
        vector<VP>  selectShapeArea(Mat src,Mat& draw,vector<VP> contours,int minvalue,int maxvalue);
        vector<VP>  selectShapeArea(vector<VP> contours,int minvalue,int maxvalue);
        //根据轮廓的圆的特性进行选择
        vector<VP>  selectShapeArea(Mat src,Mat& draw,vector<VP> contours,int minvalue,int maxvalue);
        vector<VP>  selectShapeArea(vector<VP> contours,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 path, vector<string>& files,string flag ="r"/*如果不想递归这里不写r就可以*/);
        //递归读取目录下全部图片
        void getFiles(string path, vector<Mat>& files,string flag = "r");
        //递归读取目录下全部图片和名称
        void getFiles(string path, vector<pair<Mat,string>>& files,string flag="r");
        //删除目录下的全部文件
        void deleteFiles(string path,string flag = "r");
        //创建或续写目录下的csv文件,填写“文件位置-分类”对
        int writeCsv(const string& filename,const Vector<pair<string,string>>srcVect,char separator=';');
        //读取目录下的csv文件,获得“文件位置-分类”对
        vector<pair<string,string>> readCsv(const string& filename, char separator = ';') ;
        //----------------------------------------------------------------------------------------------------------------------------------------//
        //C++的spilt函数
        void SplitString(const string& s, vector<string>& v, const string& c);
        //! 通过文件夹名称获取文件名,不包括后缀
        void getFileName(const string& filepath, string& name,string& lastname);
        //-----------------------------------------------------------------------------------------------------------------------------------------//
        //ini 操作
        CString  GetInitString( CString Name1 ,CString Name2);
        void WriteInitString( CString Name1 ,CString Name2 ,CString strvalue);
        //excel操作
        CString ExportListToExcel(CString  sExcelFile,CListCtrl* pList, CString strTitle);
        BOOL GetDefaultXlsFileName(CString& sExcelFile);

}

 

【20160924】GOCVHelper综述的更多相关文章

  1. 基于Opencv和Mfc的图像处理增强库GOCVHelper(索引)

    GOCVHelper(GreenOpen Computer Version Helper )是我在这几年编写图像处理程序的过程中积累下来的函数库.主要是对Opencv的适当扩展和在实现Mfc程序时候的 ...

  2. 【20160924】GOCVHelper MFC增强算法(4)

    //string替换     void string_replace(string & strBig, const string & strsrc, const string & ...

  3. 【20160924】GOCVHelper 图像处理部分(3)

    //根据轮廓的圆的特性进行选择     vector<VP> selectShapeCircularity(Mat src,Mat& draw,vector<VP> c ...

  4. 【20160924】GOCVHelper 图像处理部分(2)

    //根据轮廓的面积大小进行选择     vector<VP>  selectShapeArea(Mat src,Mat& draw,vector<VP> contour ...

  5. 【20160924】GOCVHelper 图像处理部分(1)

    增强后的图像需要通过图像处理获得定量的值.在实际程序设计过程中,轮廓很多时候都是重要的分析变量.参考Halcon的相关函数,我增强了Opencv在这块的相关功能.      //寻找最大的轮廓     ...

  6. 【20160924】GOCVHelper 图像增强部分(5)

    // Multiply 正片叠底 void Multiply(Mat& src1, Mat& src2, Mat& dst) {     for(int index_row=0 ...

  7. 【20160924】GOCVHelper 图像增强部分(4)

    //使得rect区域半透明     Mat translucence(Mat src,Rect rect,int idepth){         Mat dst = src.clone();     ...

  8. 【20160924】GOCVHelper 图像增强部分(3)

    //顶帽去光差,radius为模板半径     Mat moveLightDiff(Mat src,int radius){         Mat dst;         Mat srcclone ...

  9. 【20160924】GOCVHelper 图像增强部分(2)

       //填充孔洞     //fillholes     Mat fillHoles(Mat src){         Mat dst = getInnerHoles(src);          ...

随机推荐

  1. HDU 4899 Hero meet devil(状压DP)(2014 Multi-University Training Contest 4)

    Problem Description There is an old country and the king fell in love with a devil. The devil always ...

  2. 。。。Ajax的回调函数function(data)中,data的返回类型。。。

    今天在做项目的过程中,突然发现了一个有趣的问题,那就是我在Java服务器端写程序,String result = "0";然后通过out.println(result),将resu ...

  3. 也不知怎么了LVS.SH找不到,网上搜了一篇环境搭配CENTOS下面的高可用 参考

    系统环境: ************************************************************ 两台服务器都装了 CentOS-5.2-x86_64 系统 Vir ...

  4. Linux 配置双机SSH信任

    一.实现原理 使用一种被称为"公私钥"认证的方式来进行ssh登录."公私钥"认证方式简单的解释是: 首先在客户端上创建一对公私钥(公钥文件:~/.ssh/id_ ...

  5. struts_22_xwork校验器列表使用说明

    系统提供的校验器列表如下: required (必填校验器,要求field的值不能为null) requiredstring (必填字符串校验器,要求field的值不能为null,并且长度大于0,默认 ...

  6. Android中使用SurfaceView+MediaPlayer+自定义的MediaController实现自定义的视屏播放器

    效果图如下: (PS本来是要给大家穿gif动态图的,无奈太大了,没法上传) 功能实现:暂停,播放,快进,快退,全屏,退出全屏,等基本功能 实现的思路: 在主布局中放置一个SurfaceView,在Su ...

  7. C# WinForm动态添加MSChart控件

    添加mschart.dll动态链接库 添加引用 System.Windows.Forms.DataVisualization     MSChart控件作为方便的用户数据展示控件,可以方便的使用控件提 ...

  8. paper 61:计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接

    转载出处:blog.csdn.net/carson2005 以下链接是本人整理的关于计算机视觉(ComputerVision, CV)相关领域的网站链接,其中有CV牛人的主页,CV研究小组的主页,CV ...

  9. mysql取出现在的时间戳和时间时间戳转成人类看得懂的时间

    mysql取出现在的时间戳和时间时间戳转成人类看得懂的时间,我们在mysql里面他封装了一个内置的时间戳转化的函数,比如我们现在的时间戳是:1458536709 ,"%Y-%m-%d&quo ...

  10. PAT乙级 1023. 组个最小数 (20)

    1023. 组个最小数 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定数字0-9各若干个.你可以以 ...