在matlab中,a(a> 50)= 0可以替换大于50到0的所有元素。我想在openCV中使用Mat做同样的事情。怎么做?
答案 0 :(得分:6)
纳阿。要做到这一点,只需一行:
cv::Mat img = imread('your image path');
img.setTo(0,img>50);
就这么简单。
答案 1 :(得分:4)
你想要的是用cv :: threshold截断图像。
以下内容应符合您的要求:
cv::threshold(dst, dst, 50, 0, CV_THRESH_TOZERO_INV);
这是功能定义
double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)
答案 2 :(得分:0)
有时阈值不起作用,因为你可以使用不同类型的Mat。如果您的Mat类型支持double,则阈值将崩溃(至少在我的android工作室中)。
你可以在这里找到比较: http://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html
所以我使用比较函数:
(a, b) -> 5
这里我创建的矩阵在所有点上只有50个。之后,我将它与yourMat进行比较,使用CMP_LT(小于)。因此,所有小于50的像素将在掩码中变为255,如果大则变为0。这是一个面具。所以你可以:
<?php
$data = array(
'WebDevelopment' => array(
'Frontend' => array(
'HTML' =>'Hypertext Markup Langauge' ,
'CSS' => 'Cascading style sheet',
'Js' => 'Java Script'
),
'Backend' => array(
'PHP' => 'Hypertex Preprocessor',
'Ajax'=> 'Asynchronus Js and Xml' )
)
);
foreach ($data as $subject => $course) {
echo "$subject";
foreach ($course as $part => $value) {
echo "$part";
foreach ($value as $Langauge => $description) {
echo "$Langauge : $description";
}
}
}
?>
现在所有大于50的像素都将为零,而所有其他像素都将拥有自己的值。