c++ - 使用 inrange (OpenCV) 对 RGB 图像进行阈值处理

标签 c++ opencv

我正在使用 inrange 函数过滤 RGB 图像 ( attached RGB image ),以过滤掉图像中除橙色以外的所有颜色。

cv::Mat output;
cv::inRange(image, cv::Scalar(255, 140 , 0), cv::Scalar(255, 165, 0),output);
cv::imshow("output", output);

然而,这所做的只是返回黑色输出。此外,我还看到了另一个使用 inrange 函数的问题,该函数使用了值

cv::inRange(image, cv::Scalar(0, 125, 0), cv::Scalar(255, 200, 255), output);

当我使用这些值时,它会返回正确的输出。这里有什么区别,我做错了什么?

最佳答案

图像中的橙色是 (254, 165, 0)。但更重要的是,OpenCV 中的图像是按 BGR 顺序排列的,因此您需要执行以下操作:

cv::inRange(image, cv::Scalar(0, 140, 254), cv::Scalar(0, 165, 254), output);

关于c++ - 使用 inrange (OpenCV) 对 RGB 图像进行阈值处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45787906/

相关文章:

image - 如何在visual studio中使用opencv查看图像数据?

C++:退出 IF 语句时出现段错误

c++ - 克服 "fixing it later"的坏习惯

javascript - 我的代码只在 C++ 中运行,但相同的代码在 Node.js 中不起作用

python - 从直方图的密度自动找到最佳图像阈值

c - highgui 提示当我有 20.0 时它需要 >=17.0.0

python - 如何从文件中读取数据并获取索引输出

c++ - C++ 中的 fork() 学习操作系统开发

python - 函数 'distanceTransform'中的错误-使用OpenCV(3.4.9)的Python

c++ - 使用 OpenCV 进行动态背景分离和可靠的圆圈检测