Я делаю проект для Android, в котором мне нужно обнаружить логотип (логотип может иметь разный контраст, оттенок или насыщенность), для этого я использую сравнение гистограмм OpenCV-2.3.1 для Android.
Шаги, которые я выполняю, следующие:
1) Рассчитать значение истории сохраненного изображения
private List<Integer> histSize;
private List<Float> ranges;
histSize.add(50);
histSize.add(60);
histSize.add(10);
ranges.add(0f);
ranges.add(256f);
ranges.add(0f);
ranges.add(180f);
ranges.add(0f);
ranges.add(256f);
channels.add(0);
channels.add(1);
channels.add(2);
hsv_base1=new Mat();
Imgproc.cvtColor(image1,hsv_base1, Imgproc.COLOR_BGR2HSV);
hsv_base.add(hsv_base1);
Imgproc.calcHist(hsv_base, channels,new Mat(), hist_base, histSize, ranges,false);
2) Затем я обрезаю захваченное изображение каждый кадр. Размер обрезанного изображения точно такой же, как у сохраненного изображения, и значение его гистограммы рассчитывается с использованием того же метода, что и выше.
3) Сравнение сохраненного значения истории обоих изображений
double base_test2 = Imgproc.compareHist(hist_base1,hist_baseCamera1,Imgproc.CV_COMP_CHISQR);
я получаю хорошее значение comparehist. Однако проблема в том, что иногда он дает хорошие значения для некоторых случайно захваченных изображений, то есть нежелательных.
Так что теперь я планирую использовать некоторые другие методы сравнения гистограмм. Мой логотип состоит из круга.
Мой вопрос: есть ли какой-либо метод, чтобы я мог найти захваченное изображение, состоящее из круга точно такого же размера, как и круг сохраненного логотипа.
Или любой другой метод, который я должен использовать, или я могу играть с сохраненным значением каналов, диапазонов, histSize?
Раньше я использовал сопоставление шаблонов, это очень медленно и довольно сложно для изображений одинакового размера.
Я был бы признателен за любой свет по этому поводу.