mirror of
https://github.com/opencv/opencv.git
synced 2025-06-07 17:44:04 +08:00
add HAL for adaptiveThreshold
This commit is contained in:
parent
c4b158ff91
commit
11ddb9332c
@ -2805,7 +2805,8 @@ The function can process the image in-place.
|
|||||||
@param src Source 8-bit single-channel image.
|
@param src Source 8-bit single-channel image.
|
||||||
@param dst Destination image of the same size and the same type as src.
|
@param dst Destination image of the same size and the same type as src.
|
||||||
@param maxValue Non-zero value assigned to the pixels for which the condition is satisfied
|
@param maxValue Non-zero value assigned to the pixels for which the condition is satisfied
|
||||||
@param adaptiveMethod Adaptive thresholding algorithm to use, see cv::AdaptiveThresholdTypes
|
@param adaptiveMethod Adaptive thresholding algorithm to use, see cv::AdaptiveThresholdTypes.
|
||||||
|
The BORDER_REPLICATE | BORDER_ISOLATED is used to process boundaries.
|
||||||
@param thresholdType Thresholding type that must be either THRESH_BINARY or THRESH_BINARY_INV,
|
@param thresholdType Thresholding type that must be either THRESH_BINARY or THRESH_BINARY_INV,
|
||||||
see cv::ThresholdTypes.
|
see cv::ThresholdTypes.
|
||||||
@param blockSize Size of a pixel neighborhood that is used to calculate a threshold value for the
|
@param blockSize Size of a pixel neighborhood that is used to calculate a threshold value for the
|
||||||
|
@ -60,15 +60,16 @@ PERF_TEST_P(Size_Only, threshold_otsu, testing::Values(TYPICAL_MAT_SIZES))
|
|||||||
CV_ENUM(AdaptThreshType, THRESH_BINARY, THRESH_BINARY_INV)
|
CV_ENUM(AdaptThreshType, THRESH_BINARY, THRESH_BINARY_INV)
|
||||||
CV_ENUM(AdaptThreshMethod, ADAPTIVE_THRESH_MEAN_C, ADAPTIVE_THRESH_GAUSSIAN_C)
|
CV_ENUM(AdaptThreshMethod, ADAPTIVE_THRESH_MEAN_C, ADAPTIVE_THRESH_GAUSSIAN_C)
|
||||||
|
|
||||||
typedef std::tr1::tuple<Size, AdaptThreshType, AdaptThreshMethod, int> Size_AdaptThreshType_AdaptThreshMethod_BlockSize_t;
|
typedef std::tr1::tuple<Size, AdaptThreshType, AdaptThreshMethod, int, double> Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta_t;
|
||||||
typedef perf::TestBaseWithParam<Size_AdaptThreshType_AdaptThreshMethod_BlockSize_t> Size_AdaptThreshType_AdaptThreshMethod_BlockSize;
|
typedef perf::TestBaseWithParam<Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta_t> Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta;
|
||||||
|
|
||||||
PERF_TEST_P(Size_AdaptThreshType_AdaptThreshMethod_BlockSize, adaptiveThreshold,
|
PERF_TEST_P(Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta, adaptiveThreshold,
|
||||||
testing::Combine(
|
testing::Combine(
|
||||||
testing::Values(TYPICAL_MAT_SIZES),
|
testing::Values(TYPICAL_MAT_SIZES),
|
||||||
AdaptThreshType::all(),
|
AdaptThreshType::all(),
|
||||||
AdaptThreshMethod::all(),
|
AdaptThreshMethod::all(),
|
||||||
testing::Values(3, 5)
|
testing::Values(3, 5),
|
||||||
|
testing::Values(0.0, 10.0)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -76,12 +77,14 @@ PERF_TEST_P(Size_AdaptThreshType_AdaptThreshMethod_BlockSize, adaptiveThreshold,
|
|||||||
AdaptThreshType adaptThreshType = get<1>(GetParam());
|
AdaptThreshType adaptThreshType = get<1>(GetParam());
|
||||||
AdaptThreshMethod adaptThreshMethod = get<2>(GetParam());
|
AdaptThreshMethod adaptThreshMethod = get<2>(GetParam());
|
||||||
int blockSize = get<3>(GetParam());
|
int blockSize = get<3>(GetParam());
|
||||||
|
double C = get<4>(GetParam());
|
||||||
|
|
||||||
double maxValue = theRNG().uniform(1, 254);
|
double maxValue = theRNG().uniform(1, 254);
|
||||||
double C = 10.0;
|
|
||||||
|
|
||||||
int type = CV_8UC1;
|
int type = CV_8UC1;
|
||||||
Mat src(sz, type);
|
|
||||||
|
Mat src_full(cv::Size(sz.width + 2, sz.height + 2), type);
|
||||||
|
Mat src = src_full(cv::Rect(1, 1, sz.width, sz.height));
|
||||||
Mat dst(sz, type);
|
Mat dst(sz, type);
|
||||||
|
|
||||||
declare.in(src, WARMUP_RNG).out(dst);
|
declare.in(src, WARMUP_RNG).out(dst);
|
||||||
|
@ -630,6 +630,23 @@ inline int hal_ni_medianBlur(const uchar* src_data, size_t src_step, uchar* dst_
|
|||||||
#define cv_hal_medianBlur hal_ni_medianBlur
|
#define cv_hal_medianBlur hal_ni_medianBlur
|
||||||
//! @endcond
|
//! @endcond
|
||||||
|
|
||||||
|
/**
|
||||||
|
@brief Calculates adaptive threshold
|
||||||
|
@param src_data,src_step Source image
|
||||||
|
@param dst_data,dst_step Destination image
|
||||||
|
@param width,height Source image dimensions
|
||||||
|
@param maxValue Value assigned to the pixels for which the condition is satisfied
|
||||||
|
@param adaptiveMethod Adaptive thresholding algorithm
|
||||||
|
@param thresholdType Thresholding type
|
||||||
|
@param blockSize Size of a pixel neighborhood that is used to calculate a threshold value
|
||||||
|
@param C Constant subtracted from the mean or weighted mean
|
||||||
|
*/
|
||||||
|
inline int hal_ni_adaptiveThreshold(const uchar* src_data, size_t src_step, uchar* dst_data, size_t dst_step, int width, int height, double maxValue, int adaptiveMethod, int thresholdType, int blockSize, double C) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }
|
||||||
|
|
||||||
|
//! @cond IGNORED
|
||||||
|
#define cv_hal_adaptiveThreshold hal_ni_adaptiveThreshold
|
||||||
|
//! @endcond
|
||||||
|
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
#if defined __GNUC__
|
#if defined __GNUC__
|
||||||
|
@ -1530,6 +1530,9 @@ void cv::adaptiveThreshold( InputArray _src, OutputArray _dst, double maxValue,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CALL_HAL(adaptiveThreshold, cv_hal_adaptiveThreshold, src.data, src.step, dst.data, dst.step, src.cols, src.rows,
|
||||||
|
maxValue, method, type, blockSize, delta);
|
||||||
|
|
||||||
Mat mean;
|
Mat mean;
|
||||||
|
|
||||||
if( src.data != dst.data )
|
if( src.data != dst.data )
|
||||||
@ -1537,7 +1540,7 @@ void cv::adaptiveThreshold( InputArray _src, OutputArray _dst, double maxValue,
|
|||||||
|
|
||||||
if (method == ADAPTIVE_THRESH_MEAN_C)
|
if (method == ADAPTIVE_THRESH_MEAN_C)
|
||||||
boxFilter( src, mean, src.type(), Size(blockSize, blockSize),
|
boxFilter( src, mean, src.type(), Size(blockSize, blockSize),
|
||||||
Point(-1,-1), true, BORDER_REPLICATE );
|
Point(-1,-1), true, BORDER_REPLICATE|BORDER_ISOLATED );
|
||||||
else if (method == ADAPTIVE_THRESH_GAUSSIAN_C)
|
else if (method == ADAPTIVE_THRESH_GAUSSIAN_C)
|
||||||
{
|
{
|
||||||
Mat srcfloat,meanfloat;
|
Mat srcfloat,meanfloat;
|
||||||
|
Loading…
Reference in New Issue
Block a user