Zacząłem się bawić w analizę obrazów korzystając openCV.
Chcę śledzić zadane obiekty o danym kolorze.
Skonwertowałem obraz do HSV, następnie wybieram kolor korzystając z cv::inRange i potem lecę wykrywanie krawędzi cv::Canny.

Mój problem polega na tym, że nie podoba mi się wymuszony przez inRange treshold. Mam wrażenie, że odbija się one negatywnie na wykrywaniu krawędzi. Wolałbym poeksperymentować z konwersją kolorów z HSV do odległości od jakiegoś koloru.
Od matematycznej strony chodzi o coś takiego:
dest(I) = \sqrt{\begin{bmatrix}<br> src(I)<em>0 &amp; src(I)<em>1 &amp; src(I)<em>2 &amp; 1<br> \end{bmatrix} \begin{bmatrix}<br> g</em>{11} &amp; g</em>{12} &amp; g</em>{13} &amp; g_{14} \<br> g_{12} &amp; g_{22} &amp; g_{23} &amp; g_{24} \<br> g_{13} &amp; g_{23} &amp; g_{33} &amp; g_{34} \<br> g_{14} &amp; g_{24} &amp; g_{34} &amp; g_{44}<br> \end{bmatrix}\begin{bmatrix}<br> src(I)_0 \<br> src(I)_1 \<br> src(I)_2 \<br> 1<br> \end{bmatrix}}

Gdzie g to tensor metryczny, który zdefiniuję w ten sposób by obliczyć odległości do danego koloru (z własną tolerancją na odpowiednie składowe).

Na razie najlepsze co znalazłem (niestety niezbyt uniwersalne) to convertScaleAbs. Jest to krok we właściwą stronę (do pełnego tensora metrycznego brakuje tylko paru wartości), efekt powinien być lepszy niż podczas korzystania z inRange, ale może ktoś zna coś lepszego, najlepiej pasującego idealnie do formuły, którą podałem.