Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv_contrib
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv_contrib
Commits
b891ce2c
Commit
b891ce2c
authored
Dec 14, 2015
by
Vadim Pisarevsky
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #181 from samyak-268:master
parents
fc0ada74
e226d785
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
167 additions
and
0 deletions
+167
-0
ximgproc.hpp
modules/ximgproc/include/opencv2/ximgproc.hpp
+9
-0
niblack_thresholding.cpp
modules/ximgproc/samples/niblack_thresholding.cpp
+58
-0
niblack_thresholding.cpp
modules/ximgproc/src/niblack_thresholding.cpp
+100
-0
No files found.
modules/ximgproc/include/opencv2/ximgproc.hpp
View file @
b891ce2c
...
...
@@ -63,4 +63,13 @@ which somehow takes into account pixel affinities in natural images.
@}
*/
namespace
cv
{
namespace
ximgproc
{
CV_EXPORTS_W
void
niBlackThreshold
(
InputArray
_src
,
OutputArray
_dst
,
double
maxValue
,
int
type
,
int
blockSize
,
double
delta
);
}
// namespace ximgproc
}
//namespace cv
#endif
modules/ximgproc/samples/niblack_thresholding.cpp
0 → 100644
View file @
b891ce2c
/*
* Sample C++ to demonstrate Niblack thresholding.
*
*/
#include <iostream>
#include <cstdio>
#include "opencv2/highgui.hpp"
#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/ximgproc.hpp"
using
namespace
std
;
using
namespace
cv
;
using
namespace
cv
::
ximgproc
;
Mat_
<
uchar
>
src
,
dst
;
const
int
k_max_value
=
10
;
int
k_from_slider
=
0
;
double
k_actual
=
0.0
;
void
on_trackbar
(
int
,
void
*
);
int
main
(
int
argc
,
char
**
argv
)
{
/*
* Read filename from the command-line and load
* corresponding gray-scale image.
*/
if
(
argc
!=
2
)
{
cout
<<
"Usage: ./niblack_thresholding [IMAGE]
\n
"
;
return
1
;
}
const
char
*
filename
=
argv
[
1
];
src
=
imread
(
filename
,
1
);
namedWindow
(
"k-slider"
,
1
);
string
trackbar_name
=
"k"
;
createTrackbar
(
trackbar_name
,
"k-slider"
,
&
k_from_slider
,
k_max_value
,
on_trackbar
);
on_trackbar
(
k_from_slider
,
0
);
imshow
(
"Source"
,
src
);
waitKey
(
0
);
return
0
;
}
void
on_trackbar
(
int
,
void
*
)
{
k_actual
=
(
double
)
k_from_slider
/
k_max_value
;
niBlackThreshold
(
src
,
dst
,
255
,
THRESH_BINARY
,
3
,
k_actual
);
imshow
(
"Destination"
,
dst
);
}
modules/ximgproc/src/niblack_thresholding.cpp
0 → 100644
View file @
b891ce2c
/*M///////////////////////////////////////////////////////////////////////////////////////
//
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
// By downloading, copying, installing or using the software you agree to this license.
// If you do not agree to this license, do not download, install,
// copy or use the software.
//
//
// License Agreement
// For Open Source Computer Vision Library
//
// Copyright (C) 2014, Beat Kueng (beat-kueng@gmx.net), Lukas Vogel, Morten Lysgaard
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// * Redistribution's of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistribution's in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// * The name of the copyright holders may not be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// This software is provided by the copyright holders and contributors "as is" and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
//
//M*/
#include "precomp.hpp"
#include <cmath>
namespace
cv
{
namespace
ximgproc
{
void
niBlackThreshold
(
InputArray
_src
,
OutputArray
_dst
,
double
maxValue
,
int
type
,
int
blockSize
,
double
delta
)
{
Mat
src
=
_src
.
getMat
();
CV_Assert
(
src
.
type
()
==
CV_8UC1
);
CV_Assert
(
blockSize
%
2
==
1
&&
blockSize
>
1
);
Size
size
=
src
.
size
();
_dst
.
create
(
size
,
src
.
type
()
);
Mat
dst
=
_dst
.
getMat
();
if
(
maxValue
<
0
)
{
dst
=
Scalar
(
0
);
return
;
}
// Calculate and store the mean and mean of squares in the neighborhood
// of each pixel and store them in Mat mean and sqmean.
Mat_
<
float
>
mean
(
size
),
sqmean
(
size
);
if
(
src
.
data
!=
dst
.
data
)
mean
=
dst
;
boxFilter
(
src
,
mean
,
CV_64F
,
Size
(
blockSize
,
blockSize
),
Point
(
-
1
,
-
1
),
true
,
BORDER_REPLICATE
);
sqrBoxFilter
(
src
,
sqmean
,
CV_64F
,
Size
(
blockSize
,
blockSize
),
Point
(
-
1
,
-
1
),
true
,
BORDER_REPLICATE
);
// Compute (k * standard deviation) in the neighborhood of each pixel
// and store in Mat stddev. Also threshold the values in the src matrix to compute dst matrix.
Mat_
<
float
>
stddev
(
size
);
int
i
,
j
,
threshold
;
uchar
imaxval
=
saturate_cast
<
uchar
>
(
maxValue
);
for
(
i
=
0
;
i
<
size
.
height
;
++
i
)
{
for
(
j
=
0
;
j
<
size
.
width
;
++
j
)
{
stddev
.
at
<
float
>
(
i
,
j
)
=
saturate_cast
<
float
>
(
delta
)
*
cvRound
(
sqrt
(
sqmean
.
at
<
float
>
(
i
,
j
)
-
mean
.
at
<
float
>
(
i
,
j
)
*
mean
.
at
<
float
>
(
i
,
j
))
);
threshold
=
cvRound
(
mean
.
at
<
float
>
(
i
,
j
)
+
stddev
.
at
<
float
>
(
i
,
j
));
if
(
src
.
at
<
uchar
>
(
i
,
j
)
>
threshold
)
dst
.
at
<
uchar
>
(
i
,
j
)
=
(
type
==
THRESH_BINARY
)
?
imaxval
:
0
;
else
dst
.
at
<
uchar
>
(
i
,
j
)
=
(
type
==
THRESH_BINARY
)
?
0
:
imaxval
;
}
}
}
}
// namespace ximgproc
}
//namespace cv
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment