OpenCV实现halcon的dyn_threshold函数

enum ThresholdType
{
    THRESHOLD_LIGHT,		//明
    THRESHOLD_DARK,			//暗
    THRESHOLD_EQUAL,		//等于
    THRESHOLD_NOT_EQUAL		//不等于
};

//功能:使用局部阈值分割图像
//参数:
//  src:输入图像
//  pre:包含本地阈值的图像(一般可使用均值滤波后的图像)
//  dst:输出图像
//  offset:灰度偏移量(-255 ≤ offset ≤ 255)
//  type:
//      THRESHOLD_LIGHT(明): g_src ≥ g_pre + offset
//      THRESHOLD_DARK(暗): g_src ≤ g_pre - offset
//      THRESHOLD_EQUAL(等于): g_pre - offset ≤ g_src ≤ g_pre + offset
//      THRESHOLD_NOT_EQUAL(不等于): g_pre - offset > g_src || g_src > g_pre + offset
//返回值:无
void dyn_threshold(Mat src, Mat pre, Mat &dst, int offset, ThresholdType type)
{
    dst = Mat(src.size(), CV_8UC1, Scalar(0));
    int pixelsCount = src.rows * src.cols;

    for(int i = 0;i < pixelsCount; i++)
    {
        int g_src = src.data[i];
        int g_pre = pre.data[i];
        if (type == THRESHOLD_LIGHT)
        {
            if (g_src >= g_pre + offset)
                dst.data[i] = 255;
        }
        else if (type == THRESHOLD_DARK)
        {
            if (g_src <= g_pre - offset)
                dst.data[i] = 255;
        }
        else if (type == THRESHOLD_EQUAL)
        {
            if (g_src >= g_pre - offset && g_src <= g_pre + offset)
                dst.data[i] = 255;
        }
        else if (type == THRESHOLD_NOT_EQUAL)
        {
            if (g_src < g_pre - offset || g_src > g_pre + offset)
                dst.data[i] = 255;
        }
    }
}

你可能感兴趣的:(OpenCV,opencv)