OpenCV中的阈值RGB图像

Luc*_*uca 12 opencv

我有一个彩色图像,我想在OpenCV中的阈值.我想要的是,如果任何RGB通道在一定值以下,则将所有通道中的值设置为零(即黑色).

所以,我使用opencv阈值函数:

cv::Mat frame, thresholded
// read frame somewhere, it is a BGR image.
cv::threshold(frame, thresholded, 5, 255, cv::THRESH_BINARY);
Run Code Online (Sandbox Code Playgroud)

所以,我认为这样做的是,如果任何通道小于5,我认为它会将它们设置为零.但是,它似乎没有那样工作.例如,我看到只有绿色通道通过其中一些区域,表明并非所有通道都设置为0.

有没有办法快速使用OpenCV实现这一目标?

Eli*_*art 21

可以使用该功能对彩色图像进行阈值处理cv::inRange.

void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst)
Run Code Online (Sandbox Code Playgroud)

例如,您只能允许(0,125,0)和(255,200,255)之间的值或单个通道的任何值:

cv::Mat image = cv::imread("bird.jpg");

if (image.empty())
{
    std::cout << "> This image is empty" << std::endl;
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

原始图像

cv::Mat output;
cv::inRange(image, cv::Scalar(0, 125, 0), cv::Scalar(255, 200, 255), output);
cv::imshow("output", output);
Run Code Online (Sandbox Code Playgroud)

输出图像