Example #1
0
/************************************************************************************************************
Execution Kernel
*************************************************************************************************************/
static vx_status VX_CALLBACK CV_norm_Kernel(vx_node node, const vx_reference *parameters, vx_uint32 num)
{
	vx_status status = VX_SUCCESS;
	vx_image image_in = (vx_image) parameters[0];
	vx_scalar scalar = (vx_scalar) parameters[1];
	vx_scalar scalar1 = (vx_scalar) parameters[2];

	Mat *mat;
	int Type;
	vx_int32 value = 0;

	//Extracting Values from the Scalar into Type
	STATUS_ERROR_CHECK(vxReadScalarValue(scalar1, &value));	Type = value;

	//Converting VX Image to OpenCV Mat
	STATUS_ERROR_CHECK(VX_to_CV_Image(&mat, image_in));

	//Compute using OpenCV
	float NORM_Val = 0;
	NORM_Val = (float) norm(*mat, Type);

	//Converting int to Scalar
	STATUS_ERROR_CHECK(vxWriteScalarValue(scalar, &NORM_Val));

	return status;
}
Example #2
0
// write scalar value from a string
int WriteScalarFromString(vx_scalar scalar, const char str[])
{
	vx_enum type; ERROR_CHECK(vxQueryScalar(scalar, VX_SCALAR_ATTRIBUTE_TYPE, &type, sizeof(type)));
	if (type == VX_TYPE_FLOAT32) {
		float v = 0; (void)sscanf(str, "%g", &v);
		ERROR_CHECK(vxWriteScalarValue(scalar, &v));
	}
	else if (type == VX_TYPE_FLOAT64) {
		double v = 0; (void)sscanf(str, "%lg", &v);
		ERROR_CHECK(vxWriteScalarValue(scalar, &v));
	}
	else if (type == VX_TYPE_SIZE) {
		vx_size v = 0; (void)sscanf(str, VX_FMT_SIZE, &v);
		ERROR_CHECK(vxWriteScalarValue(scalar, &v));
	}
	else if (type == VX_TYPE_INT8 || type == VX_TYPE_INT16 || type == VX_TYPE_INT32 || 
		     type == VX_TYPE_UINT8 || type == VX_TYPE_UINT16 || type == VX_TYPE_UINT32 ||
			 type == VX_TYPE_CHAR || type == VX_TYPE_BOOL)
	{
		vx_int32 v = 0; (void)sscanf(str, "%i", &v);
		ERROR_CHECK(vxWriteScalarValue(scalar, &v));
	}
	else if (type == VX_TYPE_INT64 || type == VX_TYPE_UINT64) {
		vx_int64 v = 0; (void)sscanf(str, "%" PRIi64, &v);
		ERROR_CHECK(vxWriteScalarValue(scalar, &v));
	}
	else if (type == VX_TYPE_ENUM) {
		vx_enum v = ovxName2Enum(str);
		ERROR_CHECK(vxWriteScalarValue(scalar, &v));
	}
	else if (type == VX_TYPE_DF_IMAGE || type == VX_TYPE_STRING_AMD) {
		ERROR_CHECK(vxWriteScalarValue(scalar, str));
	}
	else {
		// unknown types will be assumed to be in hex format
		vx_int64 v = 0; (void)sscanf(str, "%" PRIi64, &v);
		ERROR_CHECK(vxWriteScalarValue(scalar, &v));
	}
	return 0;
}
Example #3
0
// nodeless version of the Fast9Corners kernel
vx_status vxFast9Corners(vx_image src, vx_scalar sens, vx_scalar nonm, vx_array points,
                         vx_scalar s_num_corners, vx_border_mode_t *bordermode)
{
    vx_float32 b = 0.0f;
    vx_imagepatch_addressing_t src_addr;
    void *src_base = NULL;
    vx_rectangle_t rect;
    vx_uint8 tolerance = 0;
    vx_bool do_nonmax;
    vx_uint32 num_corners = 0;
    vx_size dst_capacity = 0;
    vx_keypoint_t kp;

    vx_status status = vxGetValidRegionImage(src, &rect);
    status |= vxReadScalarValue(sens, &b);
    status |= vxReadScalarValue(nonm, &do_nonmax);
    /* remove any pre-existing points */
    status |= vxTruncateArray(points, 0);
    status |= vxAccessImagePatch(src, &rect, 0, &src_addr, &src_base, VX_READ_ONLY);
    tolerance = (vx_uint8)b;
    status |= vxQueryArray(points, VX_ARRAY_ATTRIBUTE_CAPACITY, &dst_capacity, sizeof(dst_capacity));

    memset(&kp, 0, sizeof(kp));

    if (status == VX_SUCCESS)
    {
        /*! \todo implement other Fast9 Corners border modes */
        if (bordermode->mode == VX_BORDER_MODE_UNDEFINED)
        {
            vx_int32 y, x;
            for (y = APERTURE; y < (vx_int32)(src_addr.dim_y - APERTURE); y++)
            {
                for (x = APERTURE; x < (vx_int32)(src_addr.dim_x - APERTURE); x++)
                {
                    vx_uint8 strength = vxGetFastCornerStrength(x, y, src_base, &src_addr, tolerance);
                    if (strength > 0)
                    {
                        if (do_nonmax)
                        {
                            if (strength >= vxGetFastCornerStrength(x-1, y-1, src_base, &src_addr, tolerance) &&
                                strength >= vxGetFastCornerStrength(x, y-1, src_base, &src_addr, tolerance) &&
                                strength >= vxGetFastCornerStrength(x+1, y-1, src_base, &src_addr, tolerance) &&
                                strength >= vxGetFastCornerStrength(x-1, y, src_base, &src_addr, tolerance) &&
                                strength >  vxGetFastCornerStrength(x+1, y, src_base, &src_addr, tolerance) &&
                                strength >  vxGetFastCornerStrength(x-1, y+1, src_base, &src_addr, tolerance) &&
                                strength >  vxGetFastCornerStrength(x, y+1, src_base, &src_addr, tolerance) &&
                                strength >  vxGetFastCornerStrength(x+1, y+1, src_base, &src_addr, tolerance))
                                ;
                            else
                                continue;
                        }
                        if (num_corners < dst_capacity)
                        {
                            kp.x = x;
                            kp.y = y;
                            kp.strength = strength;
                            status |= vxAddArrayItems(points, 1, &kp, 0);
                        }
                        num_corners++;
                    }
                }
            }
        }
        else
        {
            status = VX_ERROR_NOT_IMPLEMENTED;
        }
        if (s_num_corners)
            status |= vxWriteScalarValue(s_num_corners, &num_corners);
        status |= vxCommitImagePatch(src, NULL, 0, &src_addr, src_base);
    }

    return status;
}