[英]OpenCV convert all negative values to zero
尝试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.