opencv c++中的inrange
时间: 2023-07-08 19:32:55 浏览: 155
`inRange()` 函数在 C++ 版本的 OpenCV 库中的使用方式与 Python 版本的略有不同。以下是该函数在 C++ 中的语法:
```cpp
void cv::inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst)
```
其中,参数的含义如下:
- `src`:输入图像,可以是 8 位无符号整数类型或者浮点数类型。
- `lowerb`:指定范围的下界,可以是标量(单个值)或者数组(每个通道对应一个值),表示像素的每个通道的最小值。
- `upperb`:指定范围的上界,可以是标量或者数组,表示像素的每个通道的最大值。
- `dst`:输出图像,与输入图像具有相同的尺寸和深度。如果没有指定,则会创建一个与输入图像相同尺寸和深度的图像。
在使用该函数时,我们通常需要先将图像转换为需要的颜色空间,比如将 BGR 格式的图像转换为 HSV 格式的图像,然后根据需要识别的颜色,设定相应的颜色范围,最后调用 `inRange()` 函数,提取出在这个颜色范围内的像素,生成一个二值化图像。在这个二值化图像中,颜色范围内的像素值为255,不在颜色范围内的像素值为0。
需要注意的是,在 C++ 版本的 OpenCV 库中,`inRange()` 函数没有返回值,它会直接修改输出图像 `dst` 的像素值。因此,在调用 `inRange()` 函数时,需要确保输出图像 `dst` 的尺寸和深度与输入图像 `src` 相同。
相关问题
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函数将在这个范围内的像素提取出来,并显示在窗口中。
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。最后,将蒙版应用于原始图像,只保留红色部分。
阅读全文