У меня есть проект для отслеживания следования игрушечной машине, использующей opencv в java, но я не знаю, как обнаружить и создать прямоугольник за машиной. Ниже приведена вся моя идея и способ, которые я делаю, но он все еще не обнаруживает хорошего.Обнаружение за игрушкой использование автомобиля opencv в андроиде
И моя цель обнаружить позади автомобиля. Некоторые вещи, как это (я использую Paint нарисовать :))
Моя идея:
_Convert RGB изображение серого изображения. Используйте Осторожные обнаружения, чтобы найти края и использовать GaussianBlur, чтобы сделать изображение более гладким
Imgproc.cvtColor(mImageRGBA, thresholded, Imgproc.COLOR_RGB2GRAY,3);
Imgproc.Canny(thresholded, thresholded, 78, 212);
Imgproc.GaussianBlur(thresholded, thresholded, new Size(5, 5), 2.2, 2);
Мой образ будет выглядеть
_ Тогда я буду использовать findcontour найти контур автомобиля и сделать его ,
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Mat mHierarchy = new Mat();
Imgproc.findContours(thresholded, contours, mHierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
for(int i = 0; i< contours.size(); i++) {
circle_contour = contours.get(i).toArray();
double contour_length = circle_contour.length;
if (contour_length < 50) continue;
Imgproc.drawContours(thresholded,contours,i,new Scalar(255,255,255),2);
.
.
.
И, наконец, я не буду рисовать контур, и я использую minAreaRec найти прямоугольник, которые имеют размер подходит. Я буду этот прямоугольник.
//Imgproc.drawContours(thresholded,contours,i,new Scalar(255,255,255),2);// remove this line and continue to find rectangle for car.
.
.
.
Car_Rect = Imgproc.minAreaRect(new MatOfPoint2f(contours.get(i).toArray()));
float rect_width = Car_Rect.boundingRect().width;
float rect_height = Car_Rect.boundingRect().height;
float rect_ratio = rect_width/rect_height;
Point points[] = new Point[4];
Car_Rect.points(points);
if((Car_Rect.angle<=value1)&&(rect_width>value7)&&(rect_width<value8)&&(rect_height>value9)&&(rect_height<value10))
{
Imgproc.line(thresholded,points[0],points[1],new Scalar(255, 255, 255),2);
Imgproc.line(thresholded,points[1],points[2],new Scalar(255,255,255),2);
Imgproc.line(thresholded,points[2],points[3],new Scalar(255,255,255),2);
Imgproc.line(thresholded,points[3],points[0],new Scalar(255,255,255),2);
}
значение1, value7, ценности8, value9, value10 это значение угла, высота мин, высота, ширина макс мин, ширина которого я макс ограничить размер для прямоугольника автомобиля. Я использую trackbar для его настройки. И результат не хорош, хотя я пытался настроить значение1,7,8,9,10. И еще есть некоторый шум :(
Итак, мой вопрос, что я хотел бы спросить, это правильный путь, чтобы обнаружить за игрушечный автомобиль Если нет, есть ли у меня другой способ сделать это. Или я что-то пропустил, какой-то шаг? Как я могу точно отрегулировать машину, чтобы получить высоту, ширина прямоугольника самая стабильная?
Каждый ответ приветствуется и так много спасибо
Спасибо за ваш ответ, потому что я нужен стабильный прямоугольник для объекта, поэтому являются Вашими способ найти для обнаружения объекта и получить прямоугольник с шириной и высотой стабильной ???, и там одна проблема - тень объекта, хорошо ли это с объектом, который имеет тень. Независимо от того, спасибо вам большое за вашу помощь. – Bruce
Эффект тени автоматически позаботится. Одна вещь, которую вы должны отметить, что функции обнаруживаются с помощью хара-классификатора, но вы тот, который будет давать размеры прямоугольника, который будет нарисован вокруг объекта. Поэтому вы вручную указываете высоту и ширину прямоугольника. –
Хорошо, так много спасибо вам и, может быть, я перейду к вашему пути, я ничего не знаю об этом методе «каскадный классификатор для функций Haar». Кажется, это похоже на сопоставление шаблонов. но я буду исследовать его, еще раз, большое вам спасибо :) – Bruce