# GOCvHelper
GOCVHelper(GreenOpen Computer Version Helper )是我在这几年编写图像处理程序的过程中积累下来的函数库。主要是对Opencv的适当扩展和在实现Mfc程序时候的功能增强。
这里将算法库开放源代码,并且编写一系列blog对函数实现进行说明。目的是在于“取之于互联网,用之于互联网”。并且也希望该库能够继续发展下去。
由于算法库基于Opencv和Mfc进行编写,所以要求阅读使用者具备一定基础。最终提交的是GOCVHelper.h 和GOCVHelper版本号.cpp两个文件。
- [介绍博客地址.](http://www.cnblogs.com/jsxyhelu/p/5904251.html)
## 概述
```c
//名称:GOCVHelper0.8.cpp
//功能:图像处理和MFC增强
//作者:jsxyhelu([email protected] http://jsxyhelu.cnblogs.com)
//组织:GREENOPEN
//日期:2018-10-6
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <io.h>
#include <stdlib.h>
#include <stdio.h>
#include <vector>
using namespace std;
using namespace cv;
#define DIRECTION_X 0
#define DIRECTION_Y 1
#define VP vector<Point> //用VP符号代替 vector<point>
//调用算法库请在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 src = imread2gray("E:\\sandbox\\pcb.png");
Mat dst ;
threshold(src,dst,100,255,THRESH_BINARY);
dst = fillHoles(dst);
imshow("src",src);
imshow("dst",dst);
waitKey();*/
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);
//基于颜色直方图的距离计算
double GetHsVDistance(Mat src_base,Mat src_test1);
/*使用方法
//首先做灰度的mix
Mat src = imread("E:\\sandbox\\lena.jpg");
Mat mask = imread("E:\\sandbox\\star.png");
Mat maskF(src.size(),CV_32FC3);
Mat srcF(src.size(),CV_32FC3);
Mat dstF(src.size(),CV_32FC3);
src.convertTo(srcF,CV_32FC3);
mask.convertTo(maskF,CV_32FC3);
srcF = srcF /255;
maskF = maskF/255;
Mat dst(srcF);
//正片叠底
Multiply(srcF,maskF,dstF);
dstF = dstF *255;
dstF.convertTo(dst,CV_8UC3);
imshow("正片叠底.jpg",dst);
// Color_Burn 颜色加深
Color_Burn(srcF,maskF,dstF);
dstF = dstF *255;
dstF.convertTo(dst,CV_8UC3);
imshow("颜色加深.jpg",dst);
// 线性增强
Linear_Burn(srcF,maskF,dstF);
dstF = dstF *255;
dstF.convertTo(dst,CV_8UC3);
imshow("线性增强.jpg",dst);
waitKey();*/
// Multiply 正片叠底
void Multiply(Mat& src1, Mat& src2, Mat& dst);
// Color_Burn 颜色加深
void Color_Burn(Mat& src1, Mat& src2, Mat& dst);
// 线性增强
void Linear_Burn(Mat& src1, Mat& src2, Mat& dst);
//----------------------------------------------------------------------------------------------------------------------------------------//
//使用方法 ACE(src);
//点乘法 elementWiseMultiplication
Mat EWM(Mat m1,Mat m2);
//图像局部对比度增强算法
Mat ACE(Mat src,int C = 4,int n=20,int MaxCG = 5);
//LocalNormalization算法
Mat LocalNormalization(Mat float_gray,float sigma1,float sigma2);
//----------------------------------------------------------------------------------------------------------------------------------------//
//寻找最大的轮廓
VP FindBigestContour(Mat src);
//寻找第n个大轮廓
VP FindnthContour(Mat src,int ith );
//寻找并绘制出彩色联通区域
vector<VP> connection2(Mat src,Mat& draw);
vector<VP> connection2(Mat src);
//根据轮廓的面积大小进行选择
/*使用方法
Mat src = imread2gray("E:\\sandbox\\connection.png");
Mat dst;
vector<VP> contours;
vector<VP> results;
threshold(src,src,100,255,THRESH_BINARY);
contours = connection2(src);
results = selectShapeArea(src,dst,contours,1,9999);
imshow("src",src);
imshow("dst",dst);
waitKey();
*/
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);
vector<VP> selectShapeCircularity(vector<VP> contours,float minvalue,float maxvalue);
vector<VP> selectShapeCircularity(Mat src,Mat& draw,vector<VP> contours,float minvalue,float maxvalue);
//返回两点之间的距离
float getDistance(Point2f f1,Point2f f2);
//返回点到直线(线段)的距离
float GetPointLineDistance(Point2f pointInput,Point2f pa,Point2f pb,Point2f& pointOut);
//根据pca方法,返回轮廓的角度
double getOrientation(vector<Point> &pts, Mat &img);
//根据中线将轮廓分为2个部分
//参数:pts 轮廓;pa pb 中线线段端点;p1 p2 分为两边后最远2点;lenght1,length2 对应距离;img 用于绘图
//返回 是否分割成功
bool SplitContoursByMiddleLine(vector<Point> &pts,Mat &img,Point pa,Point pb,Point& p1,float& length1,Point& p2,float& length2);
//获得真实的长宽,返回值为false的话代表识别不成功
bool getRealWidthHeight(vector<Point> &pts,vector<Point> &resultPts, Mat &img,float& flong,float& fshort);
//投影到x或Y轴上,上波形为vup,下波形为vdown,gap为误差间隔
void projection2(Mat src,vector<int>& vup,vector<int>& vdown,int direction = DIRECTION_X,int gap = 10);
//轮廓柔和
/*
int main(int argc, char* argv[])
{
string FileName_S="e:/template/input.png";
Mat src = imread(FileName_S,0);
Mat dst;
imshow("src",src);
bitwise_not(src,src);
SmoothEdgeSingleChannel(src,dst,2.5,1.0,254);
imshow("dst",dst);
waitKey();
}
*/
bool SmoothEdgeSingleChannel( Mat mInput,Mat &mOutput, double amount, double radius, uchar Threshold) ;
//----------------------------------------------------------------------------------------------------------------------------------------//
//递归读取目录下全部文件
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 = ';') ;
//获得当前目录名称
static CString GetLocalPath(){
CString csCfgFilePath;
GetModuleFileName(NULL, csCfgFilePath.GetBufferSetLength(MAX_PATH+1), MAX_PATH);
csCfgFilePath.ReleaseBuffer();
int nPos = csCfgFilePath.ReverseFind ('\\');
csCfgFilePath = csCfgFilePath.Left (nPos);
return csCfgFilePath;
}
//----------------------------------
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【探索人工智能的宝藏之地】 无论您是计算机相关专业的在校学生、老师,还是企业界的探索者,这个项目都是为您量身打造的。无论您是初入此领域的小白,还是寻求更高层次进阶的资深人士,这里都有您需要的宝藏。不仅如此,它还可以作为毕设项目、课程设计、作业、甚至项目初期的立项演示。 【人工智能的深度探索】 人工智能——模拟人类智能的技术和理论,使其在计算机上展现出类似人类的思考、判断、决策、学习和交流能力。这不仅是一门技术,更是一种前沿的科学探索。 【实战项目与源码分享】 我们深入探讨了深度学习的基本原理、神经网络的应用、自然语言处理、语言模型、文本分类、信息检索等领域。更有深度学习、机器学习、自然语言处理和计算机视觉的实战项目源码,助您从理论走向实践,如果您已有一定基础,您可以基于这些源码进行修改和扩展,实现更多功能。 【期待与您同行】 我们真诚地邀请您下载并使用这些资源,与我们一起在人工智能的海洋中航行。同时,我们也期待与您的沟通交流,共同学习,共同进步。让我们在这个充满挑战和机遇的领域中共同探索未来!
资源推荐
资源详情
资源评论
收起资源包目录
人工智能项目资料-基于项目小案例的OpenCV应用..zip (120个子文件)
GOCVHelper_2018_10_09.cpp 47KB
case03-Watershed.cpp 7KB
case1.cpp 6KB
case5.cpp 6KB
case02-GMM.cpp 5KB
case01-KMeans.cpp 3KB
case2.cpp 3KB
main-035.cpp 3KB
case05-BgReplace.cpp 3KB
case3.cpp 3KB
case06-videoBgReplace.cpp 3KB
main-027.cpp 3KB
matting_009.cpp 2KB
case04-GrabCut.cpp 2KB
main-032.cpp 2KB
main-008.cpp 2KB
main-034.cpp 2KB
case4.cpp 2KB
main-033.cpp 2KB
main-026.cpp 2KB
main-031.cpp 2KB
case6.cpp 2KB
main-024.cpp 2KB
main-028.cpp 2KB
main-029.cpp 2KB
main-022.cpp 2KB
main-007.cpp 1KB
main-019.cpp 1KB
main-030.cpp 1KB
main-017.cpp 1KB
main-002.cpp 1KB
main-004.cpp 1KB
main-018.cpp 1KB
main-005.cpp 1KB
main-014.cpp 1KB
main-021.cpp 1KB
main-023.cpp 998B
main-001.cpp 995B
main-009.cpp 973B
main-015.cpp 966B
main-016.cpp 960B
main-006.cpp 910B
main-012.cpp 897B
main-020.cpp 777B
main-011.cpp 691B
main-010.cpp 635B
main-013.cpp 597B
main-003.cpp 555B
main-025.cpp 548B
GOCVHelper.h 8KB
background.jpg 124KB
case1.jpg 64KB
case6.jpg 54KB
case5.jpg 45KB
coins_001.jpg 40KB
canjian.jpg 23KB
toux.jpg 21KB
case3.jpg 20KB
case4.jpg 13KB
readme.md 9KB
readme.md 6KB
readme.md 4KB
readme.md 1KB
readme.md 91B
01.mp4 9.31MB
1-13.pdf 1.33MB
24-33.pdf 1.3MB
14-23.pdf 1.26MB
51CTO-OpenCV小案例实战教程-06.pdf 776KB
51CTO-OpenCV小案例实战教程-01.pdf 745KB
51CTO-OpenCV小案例实战教程-02.pdf 688KB
51CTO-OpenCV小案例实战教程-05.pdf 627KB
51CTO-OpenCV小案例实战教程-04.pdf 618KB
OpenCV3.2图像分割实战课程-06.pdf 605KB
51CTO-OpenCV小案例实战教程-03.pdf 603KB
OpenCV3.2图像分割实战课程-03.pdf 543KB
OpenCV3.2图像分割实战课程-04.pdf 525KB
OpenCV3.2图像分割实战课程-05.pdf 516KB
51CTO-OpenCV小案例实战教程-概述.pdf 484KB
OpenCV3.2图像分割实战课程-02.pdf 471KB
OpenCV3.2图像分割实战课程-01.pdf 429KB
OpenCV3.2图像分割实战课程-概述.pdf 423KB
cvtest.png 710KB
tx.png 256KB
pill_002.png 103KB
case2.png 21KB
51CTO-OpenCV 3.1.0 图像处理教程-16.pptx 1.85MB
51CTO-OpenCV 3.1.0 图像处理教程-33.pptx 1.61MB
51CTO-OpenCV 3.1.0 图像处理教程-17.pptx 1.24MB
51CTO-OpenCV 3.1.0 图像处理教程-18.pptx 1.21MB
51CTO-OpenCV 3.1.0 图像处理教程-13.pptx 1.2MB
51CTO-OpenCV 3.1.0 图像处理教程-28.pptx 1.15MB
51CTO-OpenCV 3.1.0 图像处理教程-11.pptx 1.08MB
51CTO-OpenCV 3.1.0 图像处理教程-14.pptx 1.03MB
51CTO-OpenCV 3.1.0 图像处理教程-12.pptx 1.03MB
51CTO-OpenCV 3.1.0 图像处理教程-23.pptx 1.03MB
51CTO-OpenCV 3.1.0 图像处理教程-07.pptx 1.03MB
51CTO-OpenCV 3.1.0 图像处理教程-09.pptx 1.01MB
51CTO-OpenCV 3.1.0 图像处理教程-30.pptx 1MB
51CTO-OpenCV 3.1.0 图像处理教程-24.pptx 1003KB
共 120 条
- 1
- 2
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 教学内容及补充-cha7.rar
- 设计1.ms14
- vscode-1.64.1.tar源码文件
- vscode-1.64.0.tar源码文件
- vscode-1.52.0.tar源码文件
- Music-Player +PlayerActivity+ rockplayer+ SeeJoPlayer 播放器JAVA源码
- vscode-1.46.0.tar源码文件
- 最近很火植物大战僵尸杂交版2.08苹果+安卓+PC+防闪退工具V2+修改工具+高清工具+通关存档整合包更新
- 超级好用的截图工具PixPin,可录制Gif图
- Screenshot_2024-05-21-17-06-42-64_2332cb9b27b851b548ba47a91682926c.jpg
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功