Я новичок в openCV, я попал в образцы, представленные для Android.Обнаружение черных чернил на бумаге - Opencv Android
Мои цели - обнаружить цветные пятна, поэтому я начал с образца для определения цвета-блоба.
Я преобразовываю цветное изображение в оттенки серого, а затем пороговое значение с использованием двоичного порога.
Фон белый, капли черные. Я хочу обнаружить эти черные капли. Кроме того, я хотел бы нарисовать их контур в цвете, но я не могу это сделать, потому что изображение черно-белое.
Мне удалось выполнить это в оттенках серого, но я не предпочитаю, как контуры рисуются, это похоже на то, что цветовая толерантность слишком высока, а контур больше, чем фактический blob (может быть, капли слишком малы?). Я предполагаю, что эта «толерантность», о которой я говорю, имеет какое-то отношение к setHsvColor, но я не совсем понимаю этот метод.
Заранее благодарен! С наилучшими пожеланиями
UPDATE ПОДРОБНЕЕ
Изображение Я хочу отслеживать это чернильных расколов. Представьте себе белый лист бумаги с черными чернилами. Сейчас я делаю это в режиме реального времени (просмотр камеры). Фактическое приложение будет делать снимок и анализировать эту картину.
Как я уже говорил выше, я взял образец обнаружения цвета-blob (android) из репозитория openCV GitHub. И я добавить этот код в onCameraFrame метода (для того, чтобы превратить его в черно-белом в режиме реального времени) Convertion сделано так, я не возражаю, если чернила черные, синие, красные:
mRgba = inputFrame.rgba();
/**************************************************************************/
/** BLACK AND WHITE **/
// Convert to Grey
Imgproc.cvtColor(inputFrame.gray(), mRgba, Imgproc.COLOR_GRAY2RGBA, 4);
Mat blackAndWhiteMat = new Mat (H, W, CvType.CV_8U, new Scalar(1));
double umbral = 100.0;
Imgproc.threshold(mRgba, blackAndWhiteMat , umbral, 255, Imgproc.THRESH_BINARY);
// convert back to bitmap for displaying
Bitmap resultBitmap = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);
blackAndWhiteMat.convertTo(blackAndWhiteMat, CvType.CV_8UC1);
Utils.matToBitmap(blackAndWhiteMat, resultBitmap);
/**************************************************************************/
Возможно, это не лучший способ, но он работает.
Теперь я хочу обнаружить черные капли (разрывы чернил). Я предполагаю, что они обнаружены, потому что Logcat (запись в журнале примера приложения) выдает количество обнаруженных контуров, но я не могу их видеть, потому что изображение черно-белое, и я хочу, чтобы контур был красным, например.
И вот что я получаю с помощью RGB (цвет-блоб обнаружения, как есть, не черно-белое изображение). Обратите внимание, что маленькие капли не обнаружены. (Можно ли их обнаружить? Или они слишком малы?)
Благодарим за помощь! Если вам нужна дополнительная информация, я бы с удовольствием обновлять этот вопрос
UPDATE: GitHub репо образца цвета-шарикообразным обнаружения (второе изображение)
GitHub Repo of openCV sample for Android
Привет, Ваш вопрос довольно неинформативные. Загрузите входные изображения и то, что привело к вашей обработке. Это поможет понять вопрос. В качестве примера см. Этот вопрос: http://stackoverflow.com/q/10168686/1874627 – saurabheights
@saurabheights спасибо за ваш комментарий. Я обновлю вопрос с дополнительной информацией, а также фрагментами кода – sebasira
Хорошо, есть несколько вещей, которые я могу предложить. Будь то маленькие или большие капли не должны быть проблемой, если есть хороший контраст. Если вы можете найти область, в которой большинство пикселей являются белыми (проверьте подключенный компонент), у вас будет область бумаги. В этом случае, если вы обнаружите, что субрегион будет черным (путь ниже средней интенсивности области бумаги), вы найдете все свои капли. Чтобы нарисовать контур, вам понадобится выпуклый корпус черной области. Кроме того, вы можете загрузить код (или ссылку на него) для того, как вы достигли второго вывода изображения. Уже поздно, так что завтра это проверит. Спасибо за хорошее обновление. – saurabheights