Проблема в том, что вы не читаете документацию inRange : D
, которая сообщает следующее:
То есть, dst (I) устанавливается в 255 (все 1-биты), если src (I) находится в пределах указанных 1D, 2D, 3D, ... и 0. В противном случае
, и вы проверяете для 1
# cv2.inRange will create a mask (binary array) where the 1 values # are blue pixels and 0 values are any other colour out of the blue # range defined by hsv_l and hsv_h return 1 in cv2.inRange(hsv, hsv_l, hsv_h)
Итак, решение состоит в том, чтобы изменить его на:
return 255 in cv2.inRange(hsv, hsv_l, hsv_h)
Я проверил его с вашим изображением и вернул true, также с черно-белым изображением (BGR хотя) и возвращает false.
На мой взгляд, выбранные вами синие диапазоны немного далеки от фиолетовой стороны ... Вы можете использовать hsv colorpicker, подобный этому http: // colorizer .org / и выберите диапазоны, которые вам понравятся. Просто помните, что OpenCV использует H -> Hue / 2, а S и V - как проценты (0-100), и вы просто делите их на 100 (0-1.) И умножьте их на 255.
Существует ряд методов обхода jQuery и селекторов css, которые вы можете использовать - вместе с селектором $(this)
- для индивидуальной идентификации элементов с одинаковыми классами (никогда не идентификаторы - не поддавайтесь искушение использовать идентификаторы, если будет более одного элемента с одинаковым идентификатором. Просто используйте классы.)
Например, вы можете получить элемент, по которому щелкнули, $(this)
и перейти к следующему уровню, используя parent()
или даже выше - так высоко, как вы хотите пройти через closest()
- и затем используйте find()
, чтобы вернуться к определенному элементу. Смотрите демонстрационный фрагмент.
$('.aBob').click(function(){
$(this).closest('.myDiv').find('.nxtDiv').show();
});
.nxtDiv{display:none;color:red;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<div class="myDiv">
<div class="nxtDiv">Found the first</div>
<aside class="aBob">First</aside>
</div>
<div class="myDiv">
<div class="nxtDiv">Found the second</div>
<aside class="aBob">Second</aside>
</div>
Вы также можете использовать селекторы css (Обратите внимание, что все селекторы jQuery - просто селекторы css3! ) , чтобы найти определенное число чего-либо - например, щелкните четвертый <li>
, определите это, затем покажите 4-й скрытый подпод:
/* Here are a couple different ways to do this, uncomment one or the other*/
$('li').click(function(){
var num = $(this).data('fred');
//$('.outer div:nth-child(' + num + ')').show();
// -OR-
$('.outer').find('div:nth-child(' + num + ')').show();
});
[ 114] <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<ul>
<li data-fred="1">LI One</li>
<li data-fred="2">LI Two</li>
<li data-fred="3">LI Three</li>
<li data-fred="4">LI Four</li>
</ul>
<div class="outer">
<div>First inner div</div>
<div>Second inner div</div>
<div>Third inner div</div>
<div>Fourth inner div</div>
</div>