Clean up CLI
This commit is contained in:
parent
d5ea644f76
commit
1d2a139d4c
@ -12,10 +12,11 @@
|
||||
#include <SimpleProgressBar.hpp>
|
||||
#include <stb_image_write.h>
|
||||
|
||||
// Global flag to silent verbose messages
|
||||
bool silent;
|
||||
bool test_energy;
|
||||
// Global flags
|
||||
bool silent = false;
|
||||
bool test_energy = false;
|
||||
bool energy_recompute_all = false;
|
||||
int max_step = 1;
|
||||
|
||||
// Get index for any table indexed by [width*(i : height) + (j : width)], but a
|
||||
// : dim_long, b : dim_large
|
||||
@ -81,7 +82,7 @@ std::vector<float> energy_e1(std::vector<unsigned char> source, int width,
|
||||
}
|
||||
|
||||
std::vector<int> optimal_seam(std::vector<float> energy, int width, int height,
|
||||
bool vertical, int max_step = 1) {
|
||||
bool vertical) {
|
||||
/** Given the energy value, returns the optimal seam */
|
||||
|
||||
// dyn_energy is indexed by [dim_large*(i : dim_long) + (j : dim_large)]
|
||||
@ -195,11 +196,11 @@ std::vector<int> carving_step(const std::vector<unsigned char> source_img,
|
||||
std::vector<unsigned char> &output_img,
|
||||
std::vector<float> &output_energy, int width,
|
||||
int height, int nbChannels, int nbColorChannels,
|
||||
bool vertical, int max_step=1) {
|
||||
bool vertical) {
|
||||
/** Carves an image and its energy by one seam, and recomputes the energy.
|
||||
Returns the optimal seam used */
|
||||
std::vector<int> opt_seam =
|
||||
optimal_seam(source_energy, width, height, vertical,max_step=max_step);
|
||||
optimal_seam(source_energy, width, height, vertical);
|
||||
remove_seam(source_img, output_img, width, height, nbChannels, vertical,
|
||||
opt_seam);
|
||||
|
||||
@ -241,8 +242,7 @@ std::vector<int> carving_step(const std::vector<unsigned char> source_img,
|
||||
}
|
||||
|
||||
void seam_carving(unsigned char *source, int width, int height, int nbChannels,
|
||||
const char *out_filename, int nbSeams, bool vertical,
|
||||
bool test_energy = false, int max_step = 1) {
|
||||
const char *out_filename, int nbSeams, bool vertical) {
|
||||
int nbColorChannels = nbChannels > 3 ? 3 : nbChannels;
|
||||
int curWidth = width;
|
||||
int curHeight = height;
|
||||
@ -282,7 +282,7 @@ void seam_carving(unsigned char *source, int width, int height, int nbChannels,
|
||||
|
||||
float max_energy = __FLT_MIN__;
|
||||
for (auto k = 0; k < width * height; k++) {
|
||||
max_energy = fmax(max_energy, ini_energy[k]);
|
||||
max_energy = std::max(max_energy, ini_energy[k]);
|
||||
}
|
||||
if (max_energy != 0) {
|
||||
for (auto k = 0; k < width * height; k++) {
|
||||
@ -307,7 +307,7 @@ void seam_carving(unsigned char *source, int width, int height, int nbChannels,
|
||||
for (auto seam_index = 0; seam_index < nbSeams; seam_index++) {
|
||||
std::vector<int> opt_seam = carving_step(
|
||||
source_img, source_energy, output_img, output_energy, curWidth,
|
||||
curHeight, nbChannels, nbColorChannels, vertical, max_step=max_step);
|
||||
curHeight, nbChannels, nbColorChannels, vertical);
|
||||
std::copy(output_img.begin(), output_img.end(), source_img.begin());
|
||||
std::copy(output_energy.begin(), output_energy.end(),
|
||||
source_energy.begin());
|
||||
@ -348,22 +348,26 @@ void seam_carving(unsigned char *source, int width, int height, int nbChannels,
|
||||
int main(int argc, char **argv) {
|
||||
CLI::App app{"seam-carving"};
|
||||
std::string sourceImage;
|
||||
std::string maskImage = "mask.png";
|
||||
std::string outputImage = "output.png";
|
||||
int nbSeams = 1;
|
||||
bool vertical = false;
|
||||
|
||||
app.add_option("-s,--source", sourceImage, "Source image")
|
||||
->required()
|
||||
->check(CLI::ExistingFile);
|
||||
;
|
||||
std::string outputImage = "output.png";
|
||||
app.add_option("-o,--output", outputImage, "Output image")->required();
|
||||
int nbSeams = 1;
|
||||
app.add_option("-n,--nb-seams", nbSeams, "Number of seams");
|
||||
int max_step = 1;
|
||||
app.add_option("--max-step", max_step, "Max width of step to find a seam");
|
||||
bool vertical = false;
|
||||
app.add_option("-m,--mask", maskImage, "Source image")
|
||||
->check(CLI::ExistingFile);
|
||||
|
||||
app.add_option("-n,--nb-seams", nbSeams, "Number of seams")
|
||||
->check(CLI::Number);
|
||||
app.add_option("--max-step", max_step, "Max width of step to find a seam")
|
||||
->check(CLI::Number);
|
||||
|
||||
app.add_flag("--vertical", vertical,
|
||||
"Vertical carving (remove vertical seams)");
|
||||
silent = false;
|
||||
app.add_flag("--silent", silent, "No verbose messages");
|
||||
test_energy = false;
|
||||
app.add_flag("--test-energy", test_energy,
|
||||
"Don't resize image, just try the specified energy function");
|
||||
app.add_flag("--energy-recompute-all", energy_recompute_all,
|
||||
@ -376,8 +380,8 @@ int main(int argc, char **argv) {
|
||||
stbi_load(sourceImage.c_str(), &width, &height, &nbChannels, 0);
|
||||
nbSeams = std::min(nbSeams, width);
|
||||
|
||||
seam_carving(source, width, height, nbChannels, outputImage.c_str(), nbSeams,
|
||||
vertical, test_energy = test_energy, max_step = max_step);
|
||||
seam_carving(source, width, height, nbChannels, outputImage.c_str(),
|
||||
nbSeams, vertical);
|
||||
|
||||
stbi_image_free(source);
|
||||
exit(0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user