opencv inRange函数c++的使用方法
时间: 2024-05-07 10:23:55 浏览: 214
可以使用opencv中的inRange函数来检测和提取图像中的特定颜色,其使用方法如下:
```
void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst);
```
其中,src为输入图像,lowerb和upperb为指定颜色范围的下限和上限,dst为输出的二值图像。
例如,要提取图像中蓝色的部分,可以使用以下代码:
```
Mat img = imread("example.jpg");
Mat mask;
inRange(img, Scalar(100, 0, 0), Scalar(255, 100, 100), mask);
```
其中,100,0,0指定了蓝色的下限RGB值,255,100,100指定了蓝色的上限RGB值,提取的结果存储在mask中。
相关问题
opencv inRange保留红色 c++
要在C++中使用OpenCV中的inRange函数来保留红色,可以使用以下代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 读取图像
Mat img = imread("image.jpg");
// 将BGR颜色空间转换为HSV颜色空间
Mat hsv_img;
cvtColor(img, hsv_img, COLOR_BGR2HSV);
// 定义红色范围
Scalar lower_red = Scalar(0, 50, 50);
Scalar upper_red = Scalar(10, 255, 255);
Scalar lower_red2 = Scalar(170, 50, 50);
Scalar upper_red2 = Scalar(180, 255, 255);
// 创建蒙版
Mat mask1, mask2, mask;
inRange(hsv_img, lower_red, upper_red, mask1);
inRange(hsv_img, lower_red2, upper_red2, mask2);
bitwise_or(mask1, mask2, mask);
// 应用掩模
Mat red_only;
bitwise_and(img, img, red_only, mask);
// 显示结果
imshow("Original Image", img);
imshow("Red Only Image", red_only);
waitKey(0);
destroyAllWindows();
return 0;
}
```
这段代码与Python代码很类似,首先将BGR颜色空间转换为HSV颜色空间,然后定义红色的范围。接着,创建一个蒙版,这个蒙版只有在红色范围内的像素值为1,其余像素值为0。最后,将蒙版应用于原始图像,只保留红色部分。
c++ opencv inRange
C++ OpenCV中的inRange函数是用于在给定范围内对图像进行像素值的阈值化操作。它可以帮助我们提取图像中特定范围内的像素。
inRange函数的语法如下:
```cpp
void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst);
```
其中,src是输入图像,lowerb和upperb是指定的范围,dst是输出图像。
具体来说,inRange函数会将输入图像src中在lowerb和upperb范围内的像素设置为255(白色),而其他像素则设置为0(黑色)。这样就可以通过阈值化操作将感兴趣的像素提取出来。
以下是一个示例代码,演示了如何使用inRange函数提取图像中的红色区域:
```cpp
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat src = cv::imread("input.jpg");
if (src.empty())
{
std::cout << "Failed to read image!" << std::endl;
return -1;
}
cv::Mat hsv;
cv::cvtColor(src, hsv, cv::COLOR_BGR2HSV);
cv::Scalar lowerb(0, 100, 100);
cv::Scalar upperb(10, 255, 255);
cv::Mat mask;
cv::inRange(hsv, lowerb, upperb, mask);
cv::imshow("Input", src);
cv::imshow("Mask", mask);
cv::waitKey(0);
return 0;
}
```
在这个示例中,我们首先将输入图像从BGR颜色空间转换为HSV颜色空间,然后定义了一个范围,即红色的HSV值范围。最后,我们使用inRange函数将在这个范围内的像素提取出来,并显示在窗口中。
阅读全文