Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
张士柳
/
eyemLib
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
图表
网络
创建新的问题
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit b2c1dc1c
由
张士柳
编写于
2021-09-18 14:13:38 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
无
1 个父辈
ad4417cb
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
32 行增加
和
5 行删除
eyemLib/eyemMisc.cpp
eyemLib/eyemSmooth.cpp
eyemLib/eyemMisc.cpp
查看文件 @
b2c1dc1
...
@@ -1860,7 +1860,10 @@ int eyemCountObjectIrregularParts(EyemImage tpImage, EyemRect tpRoi, const char
...
@@ -1860,7 +1860,10 @@ int eyemCountObjectIrregularParts(EyemImage tpImage, EyemRect tpRoi, const char
for
(
int
n
=
0
;
n
<
contourAll
.
size
();
n
++
)
{
for
(
int
n
=
0
;
n
<
contourAll
.
size
();
n
++
)
{
cv
::
drawContours
(
image
,
contourAll
,
n
,
cv
::
Scalar
(
255
),
-
1
);
cv
::
drawContours
(
image
,
contourAll
,
n
,
cv
::
Scalar
(
255
),
-
1
);
}
}
//防止报错
if
(
contourAll
.
empty
())
{
return
FUNC_CANNOT_CALC
;
}
//寻找最大轮廓
//寻找最大轮廓
std
::
vector
<
cv
::
Point
>
contourMax
;
double
contourMaxArea
=
0
;
cv
::
Point2f
center
;
float
radius
;
std
::
vector
<
cv
::
Point
>
contourMax
;
double
contourMaxArea
=
0
;
cv
::
Point2f
center
;
float
radius
;
contourMax
=
contourAll
[
0
];
contourMaxArea
=
cv
::
contourArea
(
contourMax
);
contourMax
=
contourAll
[
0
];
contourMaxArea
=
cv
::
contourArea
(
contourMax
);
...
...
eyemLib/eyemSmooth.cpp
查看文件 @
b2c1dc1
...
@@ -327,10 +327,18 @@ static void nonLocalMeansFilter_SSE(cv::Mat& src, cv::Mat& dest, cv::Size temple
...
@@ -327,10 +327,18 @@ static void nonLocalMeansFilter_SSE(cv::Mat& src, cv::Mat& dest, cv::Size temple
dpad
=
(
16
-
src
.
cols
%
16
)
%
16
;
dpad
=
(
16
-
src
.
cols
%
16
)
%
16
;
spad
=
(
16
-
(
src
.
cols
+
2
*
bbx
)
%
16
)
%
16
;
spad
=
(
16
-
(
src
.
cols
+
2
*
bbx
)
%
16
)
%
16
;
}
}
else
{
dpad
=
(
4
-
src
.
cols
%
4
)
%
4
;
spad
=
(
4
-
(
src
.
cols
+
2
*
bbx
)
%
4
)
%
4
;
}
cv
::
Mat
dst
=
cv
::
Mat
::
zeros
(
cv
::
Size
(
src
.
cols
+
dpad
,
src
.
rows
),
dest
.
type
());
cv
::
Mat
dst
=
cv
::
Mat
::
zeros
(
cv
::
Size
(
src
.
cols
+
dpad
,
src
.
rows
),
dest
.
type
());
cv
::
Mat
im
;
cv
::
Mat
im
;
copyMakeBorder
(
src
,
im
,
bby
,
bby
,
bbx
,
bbx
+
spad
,
borderType
);
if
(
src
.
channels
()
==
1
)
{
copyMakeBorder
(
src
,
im
,
bby
,
bby
,
bbx
,
bbx
+
spad
,
borderType
);
}
//weight computation;
//weight computation;
std
::
vector
<
float
>
weight
(
256
*
src
.
channels
());
std
::
vector
<
float
>
weight
(
256
*
src
.
channels
());
...
@@ -344,8 +352,12 @@ static void nonLocalMeansFilter_SSE(cv::Mat& src, cv::Mat& dest, cv::Size temple
...
@@ -344,8 +352,12 @@ static void nonLocalMeansFilter_SSE(cv::Mat& src, cv::Mat& dest, cv::Size temple
w
[
i
]
=
(
float
)
v
;
w
[
i
]
=
(
float
)
v
;
}
}
NonlocalMeansFilterInvorker8u_SSE4
body
(
im
,
dst
,
templeteWindowSize
.
width
,
templeteWindowSize
.
height
,
searchWindowSize
.
width
,
searchWindowSize
.
height
,
w
);
if
(
src
.
depth
()
==
CV_8U
)
cv
::
parallel_for_
(
cv
::
Range
(
0
,
dst
.
rows
),
body
);
{
NonlocalMeansFilterInvorker8u_SSE4
body
(
im
,
dst
,
templeteWindowSize
.
width
,
templeteWindowSize
.
height
,
searchWindowSize
.
width
,
searchWindowSize
.
height
,
w
);
cv
::
parallel_for_
(
cv
::
Range
(
0
,
dst
.
rows
),
body
);
}
cv
::
Mat
(
dst
(
cv
::
Rect
(
0
,
0
,
dest
.
cols
,
dest
.
rows
))).
copyTo
(
dest
);
cv
::
Mat
(
dst
(
cv
::
Rect
(
0
,
0
,
dest
.
cols
,
dest
.
rows
))).
copyTo
(
dest
);
}
}
...
@@ -361,13 +373,25 @@ int eyemSmoothMean(EyemImage tpImage, int kSizew, int kSizeh, EyemImage *tpDstIm
...
@@ -361,13 +373,25 @@ int eyemSmoothMean(EyemImage tpImage, int kSizew, int kSizeh, EyemImage *tpDstIm
return
FUNC_OK
;
return
FUNC_OK
;
}
}
int
eyemNonLocalMeansFilter
(
EyemImage
tpImage
)
int
eyemNonLocalMeansFilter
(
EyemImage
tpImage
,
int
iCMPSize
,
int
iSearchSize
,
double
dH
,
double
dSigma
)
{
{
cv
::
Mat
image
=
cv
::
Mat
(
tpImage
.
iHeight
,
tpImage
.
iWidth
,
MAKETYPE
(
tpImage
.
iDepth
,
tpImage
.
iChannels
),
tpImage
.
vpImage
).
clone
();
cv
::
Mat
image
=
cv
::
Mat
(
tpImage
.
iHeight
,
tpImage
.
iWidth
,
MAKETYPE
(
tpImage
.
iDepth
,
tpImage
.
iChannels
),
tpImage
.
vpImage
).
clone
();
if
(
image
.
empty
())
{
if
(
image
.
empty
())
{
return
FUNC_IMAGE_NOT_EXIST
;
return
FUNC_IMAGE_NOT_EXIST
;
}
}
//std::vector<cv::Mat> mvs(3);
//cv::split(image, mvs);
//mvs[0] = cv::imread("C:\\Users\\nzslw\\OneDrive\\程序\\VSProject\\eyemLib\\x64\\Debug\\Portada_paper_b.png", cv::IMREAD_GRAYSCALE);
//mvs[1] = cv::imread("C:\\Users\\nzslw\\OneDrive\\程序\\VSProject\\eyemLib\\x64\\Debug\\Portada_paper_g.png", 0);
//mvs[2] = cv::imread("C:\\Users\\nzslw\\OneDrive\\程序\\VSProject\\eyemLib\\x64\\Debug\\Portada_paper_r.png", 0);
cv
::
Mat
dest
;
//cv::merge(mvs, dest);
nonLocalMeansFilter_SSE
(
image
,
dest
,
cv
::
Size
(
3
,
3
),
cv
::
Size
(
5
,
5
),
21.0
,
-
1
,
0
);
cv
::
imwrite
(
"Portada_paper5.png"
,
dest
);
return
FUNC_OK
;
return
FUNC_OK
;
}
}
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论