我有一个彩色图像,我想在OpenCV中设置一个阈值。我想的是,如果任何RGB通道低于某个值,将所有通道的值设置为零(即黑色)。
所以,我使用opencv阈值函数:
cv::Mat frame, thresholded
// read frame somewhere, it is a BGR image.
cv::threshold(frame, thresholded, 5, 255, cv::THRESH_BINARY);
字符串
所以,我认为这将做的是,如果任何通道小于5,我认为它会将它们设置为0。然而,它似乎并不这样工作。例如,我看到只有绿色通道通过其中一些区域,表明并非所有通道都设置为0。
有没有一种方法可以使用OpenCV快速实现这一点?
2条答案
按热度按时间vltsax251#
可以使用函数
cv::inRange
对彩色图像进行阈值化。字符串
例如,您可以只允许(0,125,0)和(255,200,255)之间的值,或单个通道的任何值:
型
的数据
型
的
mklgxw1f2#
简而言之,你必须把你的图像滑入三个包含三个通道的图像中,三个独立地保持它们,然后再次合并它们。
字符串
这段代码应该可以做到。
对不起,我读得太快了。那么,你应该在for之后稍微修改一下代码。
型
您可以从三个阈值图像中创建一个蒙版,然后将此蒙版应用于输入图像。