有很多关于此的教程,但我认为我缺少有关HSV领域的重要信息。
我正在专门寻找颜色为(RGB) 98,199,166
的蓝色。
在我的代码中,我将图像转换为HSV。
cvtColor(OriginalImage, HSVImage, COLOR_BGR2HSV);
然后我发现该蓝色周围的RBG颜色范围,因此我分别选择68, 83, 119
和150, 164, 194
作为我的下限和上限。
使用此website,将下限和上限转换为HSV以获得222, 42.9, 46.7
和221, 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);
}
在实际程序中,这是从活动窗口的框架中读取的,但是无论如何,它仍然不符合我的期望。
图像有点小,但是我试图只找到蓝色斑点部分,而将所有小的蓝色圆圈和所有其他东西都留在外面。