Диапазон обнаружения красно-оранжевого цвета с помощью HSV [дубликат]

Использование флага / g сообщает ему продолжить поиск после хита.

Если совпадение завершается успешно, метод exec () возвращает массив и обновляет свойства объекта регулярного выражения.

Перед первым поиском:

myRegex.lastIndex
//is 0

После первого поиска

myRegex.lastIndex
//is 8

Удалите g и он выйдет из поиска после каждого вызова к exec ().

17
задан kav 11 September 2015 в 11:58
поделиться

1 ответ

В пространстве HSV красный цвет обертывает около 180. Поэтому вам нужно, чтобы значения H были как в [0,10], так и [170, 180].

Попробуйте следующее:

#include <opencv2\opencv.hpp>
using namespace cv;

int main()
{
    Mat3b bgr = imread("path_to_image");

    Mat3b hsv;
    cvtColor(bgr, hsv, COLOR_BGR2HSV);

    Mat1b mask1, mask2;
    inRange(hsv, Scalar(0, 70, 50), Scalar(10, 255, 255), mask1);
    inRange(hsv, Scalar(170, 70, 50), Scalar(180, 255, 255), mask2);

    Mat1b mask = mask1 | mask2;

    imshow("Mask", mask);
    waitKey();

    return 0;
}

Предыдущий результат:

Диапазон добавления результатов [170, 180]:


Еще один интересный подход, который должен проверять только один диапазон:

  • инвертировать изображение BGR
  • конвертировать в HSV
  • искать цвет cyan

Эта идея была предложена fmw42 и любезно указана Mark Setchell . Большое спасибо за это.

#include <opencv2\opencv.hpp>
using namespace cv;

int main()
{
    Mat3b bgr = imread("path_to_image");

    Mat3b bgr_inv = ~bgr;
    Mat3b hsv_inv;
    cvtColor(bgr_inv, hsv_inv, COLOR_BGR2HSV);

    Mat1b mask; 
    inRange(hsv_inv, Scalar(90 - 10, 70, 50), Scalar(90 + 10, 255, 255), mask); // Cyan is 90

    imshow("Mask", mask);
    waitKey();

    return 0;
}

32
ответ дан Community 22 August 2018 в 02:35
поделиться
  • 1
    Просто классный маленький трюк от @ fmw42, который я хотел разделить ... вы можете инвертировать изображение и искать цианы, которые не обертываются :-) stackoverflow.com/a/43926013/2836621 – Mark Setchell 12 May 2017 в 08:12
  • 2
    @MarkSetchell это умно! Добавлен ответ на код C ++ для полноты. Большое спасибо! – Miki 12 May 2017 в 08:30
  • 3
    Ваш ответ был очень полезен! Спасибо @Miki! – Luctheduke 14 July 2017 в 17:24
Другие вопросы по тегам:

Похожие вопросы: