将BGR转换为HSV以查找特定颜色

时间:2019-02-21 20:20:15

标签: c++ opencv

有很多关于此的教程,但我认为我缺少有关HSV领域的重要信息。

我正在专门寻找颜色为(RGB) 98,199,166的蓝色。

在我的代码中,我将图像转换为HSV。

cvtColor(OriginalImage, HSVImage, COLOR_BGR2HSV);

然后我发现该蓝色周围的RBG颜色范围,因此我分别选择68, 83, 119150, 164, 194作为我的下限和上限。

使用此website,将下限和上限转换为HSV以获得222, 42.9, 46.7221, 22.7, 76.1

然后在我的C ++代码中,我使用了inrange函数

inRange(HSVImage, Scalar(222, 42.9, 46.7), Scalar(221, 22.7, 76.1), ImgColorFound);

当我显示此内容时,它没有找到我想要的特定颜色。

imshow("ObjectOfSpecificColor", ImgColorFound);

我不确定我所缺少或不了解的内容,但是从我看过的教程中,似乎应该找到我的颜色。

我也在使用最新的OpenCV(我认为是401)

编辑

#include <opencv2/opencv.hpp>
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/core.hpp"
#include <Windows.h>
#include <iostream>
#include <tchar.h>
using namespace std;
using namespace cv;

Scalar BGR2HSV(uchar B, uchar G, uchar R)
{
    Mat hsv;
    Mat bgr(1, 1, CV_8UC3, Scalar(B, G, R));
    cvtColor(bgr, hsv, COLOR_BGR2HSV);
    return Scalar(hsv.data[0], hsv.data[1], hsv.data[2]);
}

int main(int argc, char **argv)
{
    Mat Img = imread("C:\\TestImage.png");
    Mat FindBlueArea;
    Mat HSVImage;
    cvtColor(Img, HSVImage, COLOR_BGR2HSV);
    inRange(HSVImage, BGR2HSV(119, 83, 68), BGR2HSV(194, 164, 150), FindBlueArea);

    namedWindow("Original Image", WINDOW_NORMAL);
    imshow("Original Image", Img);
    namedWindow("HSVImage", WINDOW_NORMAL);
    imshow("HSVImage", HSVImage);
    namedWindow("BlueArea", WINDOW_NORMAL);
    imshow("BlueArea", FindBlueArea);
    waitKey(5000);
}

在实际程序中,这是从活动窗口的框架中读取的,但是无论如何,它仍然不符合我的期望。

Image To Find blue part

图像有点小,但是我试图只找到蓝色斑点部分,而将所有小的蓝色圆圈和所有其他东西都留在外面。

0 个答案:

没有答案