当前位置: 首页 > news >正文

【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);
    }
 



来自为知笔记(Wiz)



相关文章:

  • Maven 自定义 archetype
  • 谈谈一些有趣的CSS题目(六)-- 全兼容的多列均匀布局问题
  • 7.12 Java-based container configuration (基于java的容器配置)
  • 从根开始的DNS服务器架构,让整个互联网掌控于你的手中
  • 设计模式(五)简单工厂模式+工厂方法模式
  • CentOS 6.5升级Python和安装IPython(亲测可用)
  • Python 学习笔记 - 面向对象(封装,继承和多态)
  • 那些年我们一起追逐过的安全工具
  • 舞伴问题
  • Linux之查看文件大小和数目
  • Tomcat7优化配置
  • java对xml节点属性的增删改查
  • sublime text 3配置c/c++编译环境
  • Html5编辑工具
  • LAMP编译部署
  • @jsonView过滤属性
  • CSS 三角实现
  • HTTP中GET与POST的区别 99%的错误认识
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Java新版本的开发已正式进入轨道,版本号18.3
  • js如何打印object对象
  • log4j2输出到kafka
  • Node项目之评分系统(二)- 数据库设计
  • 安卓应用性能调试和优化经验分享
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 类orAPI - 收藏集 - 掘金
  • 免费小说阅读小程序
  • 推荐一个React的管理后台框架
  • 小程序01:wepy框架整合iview webapp UI
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • # include “ “ 和 # include < >两者的区别
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (C++)八皇后问题
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (一)为什么要选择C++
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)memcache、redis缓存
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .Net 垃圾回收机制原理(二)
  • .NetCore部署微服务(二)
  • .net知识和学习方法系列(二十一)CLR-枚举
  • ;号自动换行
  • @RunWith注解作用
  • [100天算法】-不同路径 III(day 73)
  • [20171101]rman to destination.txt