Как я могу извлечь КАЖДОЕ растение в отдельное изображение с помощью C++? (Моя OpenCV версия 2.4.10)Извлечь обрезанные части изображения на отдельные изображения с помощью OPENCV
Я фильтруют контуры, чтобы соответствовать желаемого размера соотношение ширина/высота номерного знака. (третье изображение - прямоугольники 3)
Теперь мне нужно извлечь все найденные кандидаты в «i» отдельные изображения, которые будут иметь тот же размер, что и «i», поэтому я могу сегментировать символы и использовать алгоритм OCR.
Нужный Выход из этого изображения будет:
Два изображения каждая из которых содержит обрезанное версия (в идеале экстрагируют с некоторой дополнительной добавленной ширина/высота, как показано на рисунке) найденного ограничивающей рамки.
Это сомнительно мне, если мне нужно раздельные изображения или я могу просто работать со всем изображением, содержащим только обрезанные части (и черным фоном, как в показанных изображениях) для того, чтобы символы сегмента.
я обеспечиваю часть моего кода здесь:
findContours(crop, contours, hierarchy, CV_RETR_TREE,
CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
vector<Point2f> ContArea(contours.size());
for (int i = 0; i < contours.size(); i++) {
approxPolyDP(Mat(contours[i]), contours_poly[i], 3, true);
boundRect[i] = boundingRect(Mat(contours_poly[i]));
}
// Draw polygonal contour + filled bonding rects
Mat drawing4 = Mat::zeros(src_gray.size(), CV_8UC3);
for (int i = 0; i < contours.size(); i++) {
Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255),
rng.uniform(0, 255));
rectangle(drawing4, boundRect[i].tl(), boundRect[i].br(), color,
CV_FILLED, 1, 0);
}
imshow("Rectangles4", drawing4);
float ratio;
Mat drawing3 = Mat::zeros(crop.size(), CV_8UC3);
// Draw bonding rects
for (int i = 0; i < contours.size(); i++) {
Scalar color = Scalar(0, 255, 0);
double a = contourArea(contours[i]);
ratio = (float) boundRect[i].width/(float) boundRect[i].height;
//check for min, max size of area and its ratios
if ((a > 200 && a < 2600) && ((ratio >= 1.3) && (ratio <= 10))) {
printf("a: %f ratios: %f", a, ratio);
//drawContours(drawing3, contours_poly, (int) i, color, 1, 8,
vector<Vec4i>(), 0, Point());
rectangle(drawing3, boundRect[i].tl(), boundRect[i].br(), color,
CV_FILLED, 1, 0);
}
}
imshow("Rectangles3", drawing3);
Для каждого ограничивающего параллелепипеда: 'Mat cropped_image_i (original_image (BBox))', или для глубокой копии: 'Mat cropped_image_i = original_image (BBox) .clone () ' – Miki
Это, кажется, работает прекрасно! Большое спасибо! Единственная проблема заключается в показе изображения, что следующий урожай, похоже, перекрывает последний урожай. Это потому, что я показываю это как это? imshow («культуры», культуры [j]); Протестировано, оно перекрывается только при показе изображения как такового в imshow Я собираюсь добавить ответ. :) – Whatever