繁体   English   中英

OpenCV将所有负值转换为零

[英]OpenCV convert all negative values to zero

我想实现一个函数,它接受一个cv::Mat并将所有负值设置为零。 执行此操作的最直接操作似乎是此处记录的threshold函数以便函数pos(x)

void pos(cv::Mat x, cv::Mat result)
{           
    cv::threshold(x, result, 0, 0, CV_THRESH_TOZERO);
    return;
}

这是将所有负值设置为零还是更快或更直接的方法?

尝试pass reference other than value ,并使用CV_THRESH_TRUNC

void pos(cv::Mat &src, cv::Mat &dst)
{           
    cv::threshold(-src, dst, 0, 0, CV_THRESH_TRUNC);
    dst = -dst;
    return;
}

测试:

[-3, -2, -1;
 0, 1, 2]

输出:

[0, 0, 0;
 0, 1, 2]

更新

@Steve建议使用cv::max(x,0)来截断矩阵。 经过测试,它会更好。

void pos(Mat& src, Mat& dst){
    dst = cv::max(src, 0);
    return void;
}

通过将矩阵数据类型从signed转换为unsigned,有一种更简单的方法可以忽略所有负数:

char data[] = {-1, -2, 8, 4};
cv::Mat m = cv::Mat(2, 2, CV_8SC1, data);

m.convertTo(m, CV_8UC1);

>>>  0, 0, 8, 4, 

它可能是可行的(?):

void pos(Mat& src, Mat& dst){
    dst = 0.5*(cv::abs(src) + src);
    return void;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM