У меня проблема с обнаружением дорожных знаков скорости с opencv 2.4 для Android. я сделать следующее:Обнаружение дорожного знака с открытым кодом OpenCV
«захвата кадров -> преобразовать его в HSV -> извлечь красные области -> обнаружить признаки с эллипсом обнаружения»
Пока Эллипс обнаружения отлично работает до тех пор, как изображение хорошего качества. Но, как вы видите на рисунках ниже, красное извлечение не работает нормально, из-за низкого качества кадров, по моему мнению.
Преобразование исходного изображения в HSV:
Imgproc.cvtColor(this.source, this.source, Imgproc.COLOR_RGB2HSV, 3);
Распаковка красных цветов:
Core.inRange(this.source, new Scalar(this.h,this.s,this.v), new Scalar(230,180,180), this.source);
Так что мой вопрос есть еще один способ обнаружения дорожного знака, как это или извлечения красные области из него, которые, кстати, могут быть очень слабыми, как на последнем снимке?
Это исходное изображение:
Это превращается в HSV, как вы можете видеть красные области выглядят так же, как цвет близлежащих деревьев. Вот как я должен знать, что он красный, но я не могу.
Преобразованные ВПГ:
Это с красными цветами, экстрагированных. Если цвета будут правильными, я должен получить почти идеальный круг/эллипс вокруг знака, но он неполный из-за ложных цветов.
Результат после экстракции:
Эллипс метод:
private void findEllipses(Mat input){
Mat thresholdOutput = new Mat();
int thresh = 150;
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
MatOfInt4 hierarchy = new MatOfInt4();
Imgproc.threshold(source, thresholdOutput, thresh, 255, Imgproc.THRESH_BINARY);
//Imgproc.Canny(source, thresholdOutput, 50, 180);
Imgproc.findContours(source, contours, hierarchy, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
RotatedRect minEllipse[] = new RotatedRect[contours.size()];
for(int i=0; i<contours.size();i++){
MatOfPoint2f temp=new MatOfPoint2f(contours.get(i).toArray());
if(temp.size().height > minEllipseSize && temp.size().height < maxEllipseSize){
double a = Imgproc.fitEllipse(temp).size.height;
double b = Imgproc.fitEllipse(temp).size.width;
if(Math.abs(a - b) < 10)
minEllipse[i] = Imgproc.fitEllipse(temp);
}
}
detectedObjects.clear();
for(int i = 0; i< contours.size(); i++){
Scalar color = new Scalar(180, 255, 180);
if(minEllipse[i] != null){
detectedObjects.add(new DetectedObject(minEllipse[i].center));
DetectedObject detectedObj = new DetectedObject(minEllipse[i].center);
Core.ellipse(source, minEllipse[i], color, 2, 8);
}
}
}
Можете ли вы загрузить оригинальное изображение (RGB)? – Micka
http://picpaste.com/pics/image_5687132_1-85AZtEAd.1443302432.jpg – skyhawk
soryy Могу только опубликовать 2 ссылки раньше – skyhawk