opencv利用HSV图像进行颜色筛选

目标
在本教程中,您将学习如何:

使用OpenCV cv :: inRange函数执行基本阈值操作。
基于HSV颜色空间中的像素值范围来检测对象。
原理
在上一个教程中,我们学习了如何使用cv :: threshold函数执行阈值处理。
在本教程中,我们将学习如何使用cv ::inRange函数来完成它。
概念保持不变,但现在我们添加了一系列我们需要的像素值。
HSV色彩空间
HSV(色相/饱和度/明度)颜色空间是表示类似于RGB颜色模型的颜色空间的模型。根据色相通道(Channel)对颜色类型进行建模,因此在需要根据颜色对对象进行分割的图像处理任务中非常有用。饱和度的变化代表颜色成分的多少。明度通道描述颜色的亮度。下图显示了HSV圆柱图。


RGB颜色空间中的颜色使用三个通道对进行编码,因此基于颜色对图像中的对象进行分割更加困难。(而HSV中只有Hue一个通道表示颜色)

在颜色转换中描述了使用cv :: cvtColor函数从一个颜色空间转换到另一个颜色空间的公式

inRange()函数讲解
void inRange(    InputArray src,
                InputArray lowerb,  
                InputArray upperb,   
                OutputArray dst);

第一个参数:输入图像
第二个参数:H、S、V的最小值,示例:Scalar(low_H, low_S, low_V)
第三个参数:H、S、V的最大值,示例:Scalar(low_H, low_S, low_V)
第四个参数:输出图像,要和输入图像有相同的尺寸且为CV_8U类


源码
#include <iostream>
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
using namespace cv;
int main()
{
    VideoCapture capture(0);
    //【2】循环显示每一帧
    while (1)                                                    
    {                                                            
        Mat image;  //定义一个Mat变量,用于存储每一帧的图像           
        capture >> image;  //读取当前帧                            
//================================================================
        Mat hsv = image.clone();
        Mat frame_threshold = image.clone();
        cvtColor(image, hsv, COLOR_BGR2HSV);
        double low_H = 35;
        double low_S = 43;
        double low_V = 46;
        double high_H = 77;
        double high_S = 255;
        double high_V = 255;
        inRange(hsv, Scalar(low_H, low_S, low_V), Scalar(high_H, high_S, high_V), frame_threshold);

        imshow("ini", image);
        imshow("out1", hsv);
        imshow("out2", frame_threshold);
        waitKey(30);  //延时30ms                              
    }
    return 0;
}

程序说明
从默认或提供的捕获设备捕获视频流。
int main()
{
    VideoCapture capture(0);
    //【2】循环显示每一帧
    while (1)                                                    
    {                                                            
        Mat image;  //定义一个Mat变量,用于存储每一帧的图像       
        capture >> image;  //读取当前帧                         
//================================================================

定义图像
        Mat hsv = image.clone();
        Mat frame_threshold = image.clone();

转换颜色空间
        cvtColor(image, hsv, COLOR_BGR2HSV);
设置HSV值的范围
        double low_H = 35;
        double low_S = 43;
        double low_V = 46;
        double high_H = 77;
        double high_S = 255;
        double high_V = 255;
 


根据HSV范围检测图像
inRange(hsv, Scalar(low_H, low_S, low_V), Scalar(high_H, high_S, high_V), frame_threshold);


显示结果
        imshow("ini", image);
        imshow("out1", hsv);
        imshow("out2", frame_threshold);
 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值