static void cropOneImage(struct cmdlineInfo const cmdline, FILE * const ifP, FILE * const bdfP, FILE * const ofP) { /*---------------------------------------------------------------------------- Crop the image to which the stream *ifP is presently positioned and write the results to *ofP. If bdfP is non-null, use the image to which stream *bdfP is presently positioned as the borderfile (the file that tells us where the existing borders are in the input image). Leave *ifP and *bdfP positioned after the image. Both files are seekable. -----------------------------------------------------------------------------*/ xelval maxval, bmaxval; int format, bformat; int rows, cols, brows, bcols; bool hasBorders; borderSet oldBorder; /* The sizes of the borders in the input image */ cropSet crop; /* The crops we have to do on each side */ xel background; pnm_readpnminit(ifP, &cols, &rows, &maxval, &format); if (bdfP) pnm_readpnminit(bdfP, &bcols, &brows, &bmaxval, &bformat); if (bdfP) analyzeImage(bdfP, bcols, brows, bmaxval, bformat, cmdline.background, FILEPOS_END, &background, &hasBorders, &oldBorder); else analyzeImage(ifP, cols, rows, maxval, format, cmdline.background, FILEPOS_BEG, &background, &hasBorders, &oldBorder); if (cmdline.verbose) { pixel const backgroundPixel = pnm_xeltopixel(background, format); pm_message("Background color is %s", ppm_colorname(&backgroundPixel, maxval, TRUE /*hexok*/)); } if (!hasBorders) pm_error("The image is entirely background; " "there is nothing to crop."); determineCrops(cmdline, &oldBorder, &crop); validateComputableSize(cols, rows, crop); if (cmdline.verbose) reportCroppingParameters(crop); if (PNM_FORMAT_TYPE(format) == PBM_TYPE) writeCroppedPBM(ifP, cols, rows, format, crop, background, ofP); else writeCroppedNonPbm(ifP, cols, rows, maxval, format, crop, background, ofP); }
HistogramHorizontal::HistogramHorizontal(cv::Mat inputImage, cv::Mat mask) { analyzeImage(inputImage, mask, false); }