Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
AccAOI
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit bdc5a88c
由
SK
编写于
2019-09-10 11:33:06 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
颜色匹配
1 个父辈
c67e6e48
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
104 行增加
和
1 行删除
AOI/AOI.csproj
AOI/match/AoiColorMatchMethod.cs
AOI/util/ImageUtil.cs
AOI/AOI.csproj
查看文件 @
bdc5a88
...
...
@@ -61,6 +61,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="AoiProject.cs" />
<Compile Include="match\AoiColorMatchMethod.cs" />
<Compile Include="match\AoiTemplateMethod.cs" />
<Compile Include="util\Base64Util.cs" />
<Compile Include="util\ImageUtil.cs" />
...
...
AOI/match/AoiColorMatchMethod.cs
0 → 100644
查看文件 @
bdc5a88
using
System
;
using
System.Collections.Generic
;
using
System.Drawing
;
using
System.Drawing.Drawing2D
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
using
OpenCvSharp
;
using
OpenCvSharp.Blob
;
using
OpenCvSharp.XFeatures2D
;
namespace
AOI
{
/// <summary>
/// 颜色匹配,各种颜色占比(灰度图的直方图)进行匹配,不方向无关
/// </summary>
public
class
AoiColorMatchMethod
:
AoiMethod
{
/// <summary>
/// 相似度百分比
/// </summary>
public
double
SamePercent
=
50
;
public
override
ResultBean
Check
(
Image
standardImage
,
Image
imageToCheck
)
{
ResultBean
resultBean
=
new
ResultBean
(
MethodName
,
4
,
SamePercent
,
SamePercent
);
bool
needCut
=
true
;
Image
standardRoiImg
=
GetRoiImage
(
standardImage
,
needCut
);
resultBean
.
standardRoiImage
=
standardRoiImg
;
double
percent
=
GetColorMatchPercent
(
standardImage
,
imageToCheck
,
out
Image
cutImg
);
bool
result
=
false
;
if
(
SamePercent
>
100
)
{
SamePercent
=
100
;
}
if
(
percent
>=
SamePercent
)
{
result
=
true
;
}
resultBean
.
currentRoiImage
=
cutImg
;
resultBean
.
result
=
result
;
resultBean
.
percentValue
=
Math
.
Round
(
percent
,
3
);
return
resultBean
;
}
/// <summary>
/// 获取模板相似度
/// </summary>
/// <param name="standardImage"></param>
/// <param name="imageToCheck"></param>
/// <param name="cutImg"></param>
/// <returns></returns>
public
double
GetColorMatchPercent
(
Image
standardImage
,
Image
imageToCheck
,
out
Image
cutImg
)
{
bool
needCut
=
true
;
//标准图中的Mart区域
Image
templateImage
=
GetRoiImage
(
standardImage
,
RoiPath
,
needCut
);
//搜索区域
Image
searchImage
=
GetRoiImage
(
imageToCheck
,
RoiPath
,
needCut
);
cutImg
=
searchImage
;
try
{
//searchImage = imageToCheck;
if
(
templateImage
!=
null
&&
searchImage
!=
null
)
{
Mat
searchMat
=
ImageUtil
.
ToMat
(
new
Bitmap
(
searchImage
));
Mat
templateMat
=
ImageUtil
.
ToMat
(
new
Bitmap
(
templateImage
));
//转换为灰度图,对直方图进行匹配
Mat
searchHist
=
ImageUtil
.
GetGrayHist
(
searchMat
);
Mat
templateHist
=
ImageUtil
.
GetGrayHist
(
templateMat
);
double
compareValue
=
Cv2
.
CompareHist
(
templateHist
,
searchHist
,
HistCompMethods
.
Correl
);
return
compareValue
*
100
;
}
}
catch
(
Exception
ex
)
{
Console
.
Write
(
ex
.
ToString
());
}
return
0
;
}
}
}
AOI/util/ImageUtil.cs
查看文件 @
bdc5a88
...
...
@@ -26,5 +26,22 @@ namespace AOI
return
BitmapConverter
.
ToBitmap
(
mat
);
}
}
public
static
Mat
GetGrayHist
(
Mat
srcMat
)
{
Mat
grayMat
=
new
Mat
();
Cv2
.
CvtColor
(
srcMat
,
grayMat
,
ColorConversionCodes
.
BGRA2GRAY
);
Mat
[]
mats
=
new
Mat
[]
{
grayMat
};
//一张图片,初始化为panda
Mat
hist
=
new
Mat
();
//用来接收直方图
int
[]
channels
=
new
int
[]
{
0
};
//一个通道,初始化为通道0
int
[]
histsize
=
new
int
[]
{
256
};
//一个通道,初始化为256箱子
Rangef
[]
range
=
new
Rangef
[
1
];
//一个通道,值范围
range
[
0
].
Start
=
0.0F
;
//从0开始(含)
range
[
0
].
End
=
256.0F
;
//到256结束(不含)
Mat
mask
=
new
Mat
();
//不做掩码
Cv2
.
CalcHist
(
mats
,
channels
,
mask
,
hist
,
1
,
histsize
,
range
);
//计算灰度图,dim为1 1维
return
hist
;
}
}
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论