у меня есть, простая структура, чтобы представить процент от не делать слева, сверху, справа, снизу изображения использовать для обрезки:функция структуры ничего
struct RoiRect {
unsigned int left;
unsigned int top;
unsigned int right;
unsigned int bottom;
bool isAllZero() {
return left == 0 && top == 0 && left == 0 && bottom == 0;
}
void getCvRect(cv::Size cvSize, cv::Rect &cvRect) {
int height = cvSize.height;
int width = cvSize.width;
int x = ((double)(left/height)*100);
int y = ((double)(top/height)*100);
int w = width - ((double)(right/width)*100);
int h = height - ((double)(bottom/width)*100);
cvRect.x = x;
cvRect.y = y;
cvRect.width = w;
cvRect.height = h;
}
};
Я инициализировать эту структуру со значениями, как 10 , 15,20,25. Это означает, что изображение должно быть обрезано на 10% с правой стороны, 15% от его верхней части и так далее.
В другом классе я буду называть getCvRect
от структуры и передать размер изображения, а также сырой cv::Rect
объект таким образом, выше, функция расчета процентных и возвращает прямоугольник, чтобы быть обрезаны с картинки:
//inside another function
cv::Rect rect; //rect to be calculated by getCvRect function of the struct
bool crop; //should crop or not? if all == zero then NOT!
if(!mRoiRect.isAllZero()) {
crop = true;
mRoiRect.getCvRect(mat.size(), rect);
}
Но все усилия напрасно! Я передаю размер в качестве первого аргумента, и я уверен, что размер изображения, например. 640x480 ... rect
объект после вызова функции показывает 640x480
... поэтому моя функция абсолютно ничего не делает.
Что я делаю неправильно, и что я могу сделать, чтобы исправить или лучше, что является более умным способом выполнения этой задачи?
Правильное применение станет (кто интересуется)
int x = ((double) left/100) * width;
int y = ((double) top/100) * height;
int w = width - ((double) right/100) * width;
int h = height - ((double) bottom/100) * width;
Подсказка: 'влево/height' выполнен в виде целочисленного деления – WorldSEnder
голосования, чтобы закрыть. Вы были здесь достаточно активны, чтобы понять минимальные полные примеры. (И они так же важны для разработки и тестирования, как и для размещения вопросов.) – Beta
@ Бета, ты прав ... это была простая ошибка ... Я тоже голосую! –