Qt-OpenCV学习笔记--颜色识别--inRange()

概述

这个函数可以通过定义一个 色彩范围 并遍历图像,过滤每一个像素;范围内的单元数值置为255,范围外的单元数值置为0,最终得到一个二值化的图像,便于后续图像处理。

函数

void cv::inRange
(
	InputArray 	  src,
    InputArray 	  lowerb,
    InputArray    upperb,
    OutputArray   dst 
)		
src 输入对象
lowerb 色彩范围下限
upperb 色彩范围上限
dst 输出对象

测试代码

#include "widget.h"
#include "ui_widget.h"

#include 

#include 
#include 
#include 

using namespace cv;
using namespace std;

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //加载文件
    Mat src = imread("c:/opencv/x4.png");
    imshow("src",src);

    //定义过程对象
    Mat img_HSV;
    Mat img_range;
    Mat img_erode;
    Mat img_dilate;

    //颜色空间转换
    cvtColor(src,img_HSV,COLOR_BGR2HSV);
    //显示
    imshow("img_HSV",img_HSV);

    //定义范围
    int hmin=0,
        smin=120,
        vmin=80;
    Scalar lower(hmin,smin,vmin);
    int hmax=10,
        smax=240,
        vmax=150;
    Scalar upper(hmax,smax,vmax);

    //颜色识别
    inRange(img_HSV,lower,upper,img_range);

    //腐蚀
    erode(img_range,img_erode,Mat(),Point(-1,-1),3);

    //膨胀
    dilate(img_erode,img_dilate,Mat(),Point(-1,-1),3);

    //显示
    imshow("img_dilate",img_dilate);

}

Widget::~Widget()
{
    delete ui;
}

测试结果

通过测试,可以看到,通过颜色识别,配合腐蚀、膨胀,可以得到比较理想的二值化图像。

如果后面再经过滤波、边缘检测、轮廓检测等操作,就可以得到图像的轮廓。

参考

HSV模型简介以及利用HSV模型随机增强图像

opencv c++学习七(颜色测试)

你可能感兴趣的:(opencv,学习,qt)