Я использую OpenCV, чтобы сопоставить несколько точек обзора в панораме. В результате получается набор изображений на черном фоне (этакая многоугольная форма). Я хочу обрезать этот многоугольник, чтобы в результирующем изображении не было черного. Есть ли хороший алгоритм для этого?
Наивный способ, который я думаю, - начать с маленького квадрата в середине изображения и расширять его вверх, пока я не нажму черный, а затем расширять влево и вправо.
Решение Я хочу тот, который максимизирует общую площадь залитой области.
РЕДАКТИРОВАТЬ : многоугольник вогнутый, поэтому нам нужно проверить это - я думаю, что алгоритм Итак, я недавно установил JSONCPP, и по какой-то причине он выдает ошибки, когда я пробую этот код: А вот файл: В нем говорится, что есть синтаксическая ошибка в строке 1, столбце 1 и что должно быть значение, объект или массив. Кто-нибудь знает, как это исправить? РЕДАКТИРОВАТЬ: изменен на текущий код с pastebin O (N ^ 2)
проверки каждой пары вершин возможен, поскольку N мало. Но нам нужно проверить, что граница области заполнена, что, я думаю, можно сделать за O (N), проверив каждую вершину, чтобы увидеть, находится ли она в пределах прямоугольника, определенного выбранной парой вершин.
#include #include <json.h>
#include <iostream>
#include <fstream>
int main(){
bool alive = true;
while (alive){
Json::Value root; // will contains the root value after parsing.
Json::Reader reader;
std::string test = "testis.json";
bool parsingSuccessful = reader.parse( test, root, false );
if ( !parsingSuccessful )
{
// report to the user the failure and their locations in the document.
std::cout << reader.getFormatedErrorMessages()
<< "\n";
}
std::string encoding = root.get("encoding", "UTF-8" ).asString();
std::cout << encoding << "\n";
alive = false;
}
return 0;
}
{
"encoding" : "lab"
}