CAROTENE_NS::BORDER_MODE border;
};
inline int TEGRA_SEPFILTERINIT(cvhalFilter2D **context, int src_type, int dst_type, int kernel_type,
- uchar *kernelx_data, size_t , int kernelx_width, int kernelx_height,
- uchar *kernely_data, size_t kernely_step, int kernely_width, int kernely_height,
+ uchar *kernelx_data, int kernelx_length,
+ uchar *kernely_data, int kernely_length,
int anchor_x, int anchor_y, double delta, int borderType)
{
if(!context || !kernelx_data || !kernely_data || src_type != CV_8UC1 || dst_type != CV_16SC1 ||
- !(kernelx_width == 3 && kernelx_height == 1) || !(kernely_width == 1 && kernely_height == 3) ||
+ kernelx_length != 3 || kernely_length != 3 ||
delta != 0 || anchor_x != 1 || anchor_y != 1)
return CV_HAL_ERROR_NOT_IMPLEMENTED;
ctx->kernelx_data[1]=kernelx_data[1];
ctx->kernelx_data[2]=kernelx_data[2];
ctx->kernely_data[0]=kernely_data[0];
- ctx->kernely_data[1]=kernely_data[kernely_step];
- ctx->kernely_data[2]=kernely_data[2*kernely_step];
+ ctx->kernely_data[1]=kernely_data[1];
+ ctx->kernely_data[2]=kernely_data[2];
break;
case CV_8SC1:
ctx->kernelx_data[0]=((char*)kernelx_data)[0];
ctx->kernelx_data[1]=((char*)kernelx_data)[1];
ctx->kernelx_data[2]=((char*)kernelx_data)[2];
ctx->kernely_data[0]=((char*)kernely_data)[0];
- ctx->kernely_data[1]=((char*)(kernely_data+kernely_step))[0];
- ctx->kernely_data[2]=((char*)(kernely_data+2*kernely_step))[0];
+ ctx->kernely_data[1]=((char*)kernely_data)[1];
+ ctx->kernely_data[2]=((char*)kernely_data)[2];
break;
case CV_16UC1:
ctx->kernelx_data[0]=((int16_t*)kernelx_data)[0];
ctx->kernelx_data[1]=((int16_t*)kernelx_data)[1];
ctx->kernelx_data[2]=((int16_t*)kernelx_data)[2];
ctx->kernely_data[0]=((int16_t*)kernely_data)[0];
- ctx->kernely_data[1]=((int16_t*)(kernely_data+kernely_step))[0];
- ctx->kernely_data[2]=((int16_t*)(kernely_data+2*kernely_step))[0];
+ ctx->kernely_data[1]=((int16_t*)kernely_data)[1];
+ ctx->kernely_data[2]=((int16_t*)kernely_data)[2];
default:
delete ctx;
return CV_HAL_ERROR_NOT_IMPLEMENTED;
bool isInitialized;
ReplacementSepFilter() : ctx(0), isInitialized(false) {}
bool init(int stype, int dtype, int ktype,
- uchar * kernelx_data, size_t kernelx_step, int kernelx_width, int kernelx_height,
- uchar * kernely_data, size_t kernely_step, int kernely_width, int kernely_height,
+ uchar * kernelx_data, int kernelx_len,
+ uchar * kernely_data, int kernely_len,
int anchor_x, int anchor_y, double delta, int borderType)
{
int res = cv_hal_sepFilterInit(&ctx, stype, dtype, ktype,
- kernelx_data, kernelx_step, kernelx_width, kernelx_height,
- kernely_data, kernely_step, kernely_width, kernely_height,
+ kernelx_data, kernelx_len,
+ kernely_data, kernely_len,
anchor_x, anchor_y, delta, borderType);
isInitialized = (res == CV_HAL_ERROR_OK);
return isInitialized;
int src_type;
int dst_type;
bool init(int stype, int dtype, int ktype,
- uchar * kernelx_data, size_t kernelx_step, int kernelx_width, int kernelx_height,
- uchar * kernely_data, size_t kernely_step, int kernely_width, int kernely_height,
+ uchar * kernelx_data, int kernelx_len,
+ uchar * kernely_data, int kernely_len,
int anchor_x, int anchor_y, double delta, int borderType)
{
src_type = stype;
dst_type = dtype;
- Mat kernelX(Size(kernelx_width, kernelx_height), ktype, kernelx_data, kernelx_step);
- Mat kernelY(Size(kernely_width, kernely_height), ktype, kernely_data, kernely_step);
+ Mat kernelX(Size(kernelx_len, 1), ktype, kernelx_data);
+ Mat kernelY(Size(kernely_len, 1), ktype, kernely_data);
f = createSeparableLinearFilter( stype, dtype, kernelX, kernelY,
Point(anchor_x, anchor_y),
//---------------------------------------------------------------
Ptr<SepFilter2D> SepFilter2D::create(int stype, int dtype, int ktype,
- uchar * kernelx_data, size_t kernelx_step, int kernelx_width, int kernelx_height,
- uchar * kernely_data, size_t kernely_step, int kernely_width, int kernely_height,
+ uchar * kernelx_data, int kernelx_len,
+ uchar * kernely_data, int kernely_len,
int anchor_x, int anchor_y, double delta, int borderType)
{
{
ReplacementSepFilter * impl = new ReplacementSepFilter();
if (impl->init(stype, dtype, ktype,
- kernelx_data, kernelx_step, kernelx_width, kernelx_height,
- kernely_data, kernely_step, kernely_width, kernely_height,
+ kernelx_data, kernelx_len,
+ kernely_data, kernely_len,
anchor_x, anchor_y, delta, borderType))
{
return Ptr<hal::SepFilter2D>(impl);
{
OcvSepFilter * impl = new OcvSepFilter();
impl->init(stype, dtype, ktype,
- kernelx_data, kernelx_step, kernelx_width, kernelx_height,
- kernely_data, kernely_step, kernely_width, kernely_height,
+ kernelx_data, kernelx_len,
+ kernely_data, kernely_len,
anchor_x, anchor_y, delta, borderType);
return Ptr<hal::SepFilter2D>(impl);
}
if( (borderType & BORDER_ISOLATED) == 0 )
src.locateROI( wsz, ofs );
- CV_Assert(kernelX.type() == kernelY.type());
+ CV_Assert( kernelX.type() == kernelY.type() &&
+ (kernelX.cols == 1 || kernelX.rows == 1) &&
+ (kernelY.cols == 1 || kernelY.rows == 1) );
+ Mat contKernelX = kernelX.isContinuous() ? kernelX : kernelX.clone();
+ Mat contKernelY = kernelY.isContinuous() ? kernelY : kernelY.clone();
Ptr<hal::SepFilter2D> c = hal::SepFilter2D::create(src.type(), dst.type(), kernelX.type(),
- kernelX.data, kernelX.step, kernelX.cols, kernelX.rows,
- kernelY.data, kernelY.step, kernelY.cols, kernelY.rows,
+ contKernelX.data, kernelX.cols + kernelX.rows - 1,
+ contKernelY.data, kernelY.cols + kernelY.rows - 1,
anchor.x, anchor.y, delta, borderType & ~BORDER_ISOLATED);
c->apply(src.data, src.step, dst.data, dst.step, dst.cols, dst.rows, wsz.width, wsz.height, ofs.x, ofs.y);
}
@param dst_type destination image type
@param kernel_type kernels type
@param kernelx_data pointer to x-kernel data
- @param kernelx_step x-kernel step
- @param kernelx_width x-kernel width
- @param kernelx_height x-kernel height
+ @param kernelx_length x-kernel vector length
@param kernely_data pointer to y-kernel data
- @param kernely_step y-kernel step
- @param kernely_width y-kernel width
- @param kernely_height y-kernel height
+ @param kernely_length y-kernel vector length
@param anchor_x relative X position of center point within the kernel
@param anchor_y relative Y position of center point within the kernel
@param delta added to pixel values
@param borderType border processing mode (CV_HAL_BORDER_REFLECT, ...)
@sa cv::sepFilter2D, cv::hal::SepFilter2D
*/
-inline int hal_ni_sepFilterInit(cvhalFilter2D **context, int src_type, int dst_type, int kernel_type, uchar *kernelx_data, size_t kernelx_step, int kernelx_width, int kernelx_height, uchar *kernely_data, size_t kernely_step, int kernely_width, int kernely_height, int anchor_x, int anchor_y, double delta, int borderType) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }
+inline int hal_ni_sepFilterInit(cvhalFilter2D **context, int src_type, int dst_type, int kernel_type, uchar *kernelx_data, int kernelx_length, uchar *kernely_data, int kernely_length, int anchor_x, int anchor_y, double delta, int borderType) { return CV_HAL_ERROR_NOT_IMPLEMENTED; }
/**
@brief hal_sepFilter
@param context pointer to user-defined context