本文整理汇总了C++中pixScale函数的典型用法代码示例。如果您正苦于以下问题:C++ pixScale函数的具体用法?C++ pixScale怎么用?C++ pixScale使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pixScale函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: AddScaledImages
static void
AddScaledImages(PIXA *pixa,
const char *fname,
l_int32 width)
{
l_int32 i, w;
l_float32 scalefactor;
PIX *pixs, *pixt1, *pixt2, *pix32;
pixs = pixRead(fname);
w = pixGetWidth(pixs);
for (i = 0; i < 5; i++) {
scalefactor = (l_float32)width / (FACTOR[i] * (l_float32)w);
pixt1 = pixScale(pixs, FACTOR[i], FACTOR[i]);
pixt2 = pixScale(pixt1, scalefactor, scalefactor);
pix32 = pixConvertTo32(pixt2);
if (i == 0)
pixSaveTiled(pix32, pixa, 1.0, 1, SPACE, 32);
else
pixSaveTiled(pix32, pixa, 1.0, 0, SPACE, 32);
pixDestroy(&pixt1);
pixDestroy(&pixt2);
pixDestroy(&pix32);
}
pixDestroy(&pixs);
return;
}
开发者ID:ZhangXinNan,项目名称:leptonica-1,代码行数:27,代码来源:scale_reg.c
示例2: recogShowPath
/*!
* \brief recogShowPath()
*
* \param[in] recog with LUT's pre-computed
* \param[in] select 0 for Viterbi; 1 for rescored
* \return pix debug output), or NULL on error
*/
static PIX *
recogShowPath(L_RECOG *recog,
l_int32 select)
{
char textstr[16];
l_int32 i, n, index, xloc, dely;
l_float32 score;
L_BMF *bmf;
NUMA *natempl_s, *nascore_s, *naxloc_s, *nadely_s;
PIX *pixs, *pix0, *pix1, *pix2, *pix3, *pix4, *pix5;
L_RDID *did;
PROCNAME("recogShowPath");
if (!recog)
return (PIX *)ERROR_PTR("recog not defined", procName, NULL);
if ((did = recogGetDid(recog)) == NULL)
return (PIX *)ERROR_PTR("did not defined", procName, NULL);
bmf = bmfCreate(NULL, 8);
pixs = pixScale(did->pixs, 4.0, 4.0);
pix0 = pixAddBorderGeneral(pixs, 0, 0, 0, 40, 0);
pix1 = pixConvertTo32(pix0);
if (select == 0) { /* Viterbi */
natempl_s = did->natempl;
nascore_s = did->nascore;
naxloc_s = did->naxloc;
nadely_s = did->nadely;
} else { /* rescored */
natempl_s = did->natempl_r;
nascore_s = did->nascore_r;
naxloc_s = did->naxloc_r;
nadely_s = did->nadely_r;
}
n = numaGetCount(natempl_s);
for (i = 0; i < n; i++) {
numaGetIValue(natempl_s, i, &index);
pix2 = pixaGetPix(recog->pixa_u, index, L_CLONE);
pix3 = pixScale(pix2, 4.0, 4.0);
pix4 = pixErodeBrick(NULL, pix3, 5, 5);
pixXor(pix4, pix4, pix3);
numaGetFValue(nascore_s, i, &score);
snprintf(textstr, sizeof(textstr), "%5.3f", score);
pix5 = pixAddTextlines(pix4, bmf, textstr, 1, L_ADD_BELOW);
numaGetIValue(naxloc_s, i, &xloc);
numaGetIValue(nadely_s, i, &dely);
pixPaintThroughMask(pix1, pix5, 4 * xloc, 4 * dely, 0xff000000);
pixDestroy(&pix2);
pixDestroy(&pix3);
pixDestroy(&pix4);
pixDestroy(&pix5);
}
pixDestroy(&pixs);
pixDestroy(&pix0);
bmfDestroy(&bmf);
return pix1;
}
开发者ID:ConfusedReality,项目名称:pkg_images_leptonica,代码行数:65,代码来源:recogdid.c
示例3: main
int main(int argc,
char **argv)
{
BOX *box;
PIX *pixt1, *pixt2, *pix1, *pix2, *pix3;
L_REGPARAMS *rp;
if (regTestSetup(argc, argv, &rp))
return 1;
pixt1 = pixRead("feyn.tif"); /* 300 ppi */
box = boxCreate(19, 774, 2247, 2025);
pix1 = pixClipRectangle(pixt1, box, NULL);
pixDestroy(&pixt1);
pixt1 = pixRead("lucasta.150.jpg");
pixt2 = pixConvertTo1(pixt1, 128); /* 150 ppi */
pix2 = pixScale(pixt2, 2.2, 2.2); /* 300 ppi */
pixDestroy(&pixt1);
pixDestroy(&pixt2);
pixt1 = pixRead("zanotti-78.jpg");
pixt2 = pixConvertTo1(pixt1, 128); /* 150 ppi */
pix3 = pixScale(pixt2, 2.0, 2.0); /* 300 ppi */
pixDestroy(&pixt1);
pixDestroy(&pixt2);
boxDestroy(&box);
/* Make word boxes using pixWordMaskByDilation() */
MakeWordBoxes1(pix1, 20, rp); /* 0 */
MakeWordBoxes1(pix2, 20, rp); /* 1 */
MakeWordBoxes1(pix3, 20, rp); /* 2 */
/* Make word boxes using the higher-level functions
* pixGetWordsInTextlines() and pixGetWordBoxesInTextlines() */
MakeWordBoxes2(pix1, 1, rp); /* 3, 4 */
MakeWordBoxes2(pix2, 1, rp); /* 5, 6 */
MakeWordBoxes2(pix3, 1, rp); /* 7, 8 */
/* Make word boxes using the higher-level functions
* pixGetWordsInTextlines() and pixGetWordBoxesInTextlines() */
MakeWordBoxes2(pix1, 2, rp); /* 9, 10 */
MakeWordBoxes2(pix2, 2, rp); /* 11, 12 */
MakeWordBoxes2(pix3, 2, rp); /* 13, 14 */
pixDestroy(&pix1);
pixDestroy(&pix2);
pixDestroy(&pix3);
return regTestCleanup(rp);
}
开发者ID:0ximDigital,项目名称:appsScanner,代码行数:48,代码来源:wordboxes_reg.c
示例4: pixGetDepth
/* static */
void Input::PreparePixInput(const StaticShape& shape, const Pix* pix,
TRand* randomizer, NetworkIO* input) {
bool color = shape.depth() == 3;
Pix* var_pix = const_cast<Pix*>(pix);
int depth = pixGetDepth(var_pix);
Pix* normed_pix = nullptr;
// On input to BaseAPI, an image is forced to be 1, 8 or 24 bit, without
// colormap, so we just have to deal with depth conversion here.
if (color) {
// Force RGB.
if (depth == 32)
normed_pix = pixClone(var_pix);
else
normed_pix = pixConvertTo32(var_pix);
} else {
// Convert non-8-bit images to 8 bit.
if (depth == 8)
normed_pix = pixClone(var_pix);
else
normed_pix = pixConvertTo8(var_pix, false);
}
int height = pixGetHeight(normed_pix);
int target_height = shape.height();
if (target_height == 1) target_height = shape.depth();
if (target_height != 0 && target_height != height) {
// Get the scaled image.
float im_factor = static_cast<float>(target_height) / height;
Pix* scaled_pix = pixScale(normed_pix, im_factor, im_factor);
pixDestroy(&normed_pix);
normed_pix = scaled_pix;
}
input->FromPix(shape, normed_pix, randomizer);
pixDestroy(&normed_pix);
}
开发者ID:vmlobanov78,项目名称:tesseract,代码行数:35,代码来源:input.cpp
示例5: pixDisplayWriteFormat
/*!
* pixDisplayWriteFormat()
*
* Input: pix (1, 2, 4, 8, 16, 32 bpp)
* reduction (-1 to reset/erase; 0 to disable;
* otherwise this is a reduction factor)
* format (IFF_PNG or IFF_JFIF_JPEG)
* Return: 0 if OK; 1 on error
*
* Notes:
* (1) This writes files if reduction > 0. These can be displayed using
* pixDisplayMultiple("/tmp/junk_write_display*");
* (2) All previously written files can be erased by calling with
* reduction < 0; the value of pixs is ignored.
* (3) If reduction > 1 and depth == 1, this does a scale-to-gray
* reduction.
* (4) This function uses a static internal variable to number
* output files written by a single process. Behavior
* with a shared library may be unpredictable.
* (5) Output file format is as follows:
* format == IFF_JFIF_JPEG:
* png if d < 8 or d == 16 or if the output pix
* has a colormap. Otherwise, output is jpg.
* format == IFF_PNG:
* png (lossless) on all images.
* (6) For 16 bpp, the choice of full dynamic range with log scale
* is the best for displaying these images. Alternative outputs are
* pix8 = pixMaxDynamicRange(pixt, L_LINEAR_SCALE);
* pix8 = pixConvert16To8(pixt, 0); // low order byte
* pix8 = pixConvert16To8(pixt, 1); // high order byte
*/
l_int32
pixDisplayWriteFormat(PIX *pixs,
l_int32 reduction,
l_int32 format)
{
char buffer[L_BUF_SIZE];
l_float32 scale;
PIX *pixt, *pix8;
static l_int32 index = 0; /* caution: not .so or thread safe */
PROCNAME("pixDisplayWriteFormat");
if (reduction == 0) return 0;
if (reduction < 0) {
index = 0; /* reset; this will cause erasure at next call to write */
return 0;
}
if (format != IFF_JFIF_JPEG && format != IFF_PNG)
return ERROR_INT("invalid format", procName, 1);
if (!pixs)
return ERROR_INT("pixs not defined", procName, 1);
if (index == 0) {
snprintf(buffer, L_BUF_SIZE,
"rm -f /tmp/junk_write_display.*.png /tmp/junk_write_display.*.jpg");
system(buffer);
}
index++;
if (reduction == 1)
pixt = pixClone(pixs);
else {
scale = 1. / (l_float32)reduction;
if (pixGetDepth(pixs) == 1)
pixt = pixScaleToGray(pixs, scale);
else
pixt = pixScale(pixs, scale, scale);
}
if (pixGetDepth(pixt) == 16) {
pix8 = pixMaxDynamicRange(pixt, L_LOG_SCALE);
snprintf(buffer, L_BUF_SIZE, "/tmp/junk_write_display.%03d.png", index);
pixWrite(buffer, pix8, IFF_PNG);
pixDestroy(&pix8);
}
else if (pixGetDepth(pixt) < 8 || pixGetColormap(pixt) ||
format == IFF_PNG) {
snprintf(buffer, L_BUF_SIZE, "/tmp/junk_write_display.%03d.png", index);
pixWrite(buffer, pixt, IFF_PNG);
}
else {
snprintf(buffer, L_BUF_SIZE, "/tmp/junk_write_display.%03d.jpg", index);
pixWrite(buffer, pixt, format);
}
pixDestroy(&pixt);
return 0;
}
开发者ID:AngusHardie,项目名称:TesseractOCR-For-Mac,代码行数:91,代码来源:writefile.c
示例6: Java_com_googlecode_leptonica_android_Scale_nativeScale
jint Java_com_googlecode_leptonica_android_Scale_nativeScale(JNIEnv *env, jclass clazz,
jint nativePix, jfloat scaleX,
jfloat scaleY) {
PIX *pixs = (PIX *) nativePix;
PIX *pixd = pixScale(pixs, (l_float32) scaleX, (l_float32) scaleY);
return (jint) pixd;
}
开发者ID:slohman,项目名称:October2012Workspace,代码行数:8,代码来源:utilities.cpp
示例7: image
image_object::image_object( const char* fileName, const char* lang )
: image( pixScale( pixRead( fileName ), PIXSCALE, PIXSCALE ) ){
assert( image != NULL ); // TODO: Find a better way to fail.
tesseract.Init( TESSDATAPATH, lang );
tesseract.SetImage( image );
tesseract.SetVariable( "tessedit_char_whitelist",
"+-#~/:(),<>&* _0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" );
} //image_object (constructor)
开发者ID:albatros13,项目名称:utox,代码行数:8,代码来源:reader.cpp
示例8: main
main(int argc,
char **argv)
{
char *filein, *fileout;
l_int32 d;
l_float32 scalex, scaley;
PIX *pixs, *pixd;
static char mainName[] = "scaletest1";
if (argc != 5)
return ERROR_INT(" Syntax: scaletest1 filein scalex scaley fileout",
mainName, 1);
filein = argv[1];
scalex = atof(argv[2]);
scaley = atof(argv[3]);
fileout = argv[4];
if ((pixs = pixRead(filein)) == NULL)
return ERROR_INT("pixs not made", mainName, 1);
/* choose type of scaling operation */
#if 1
pixd = pixScale(pixs, scalex, scaley);
#elif 0
pixd = pixScaleLI(pixs, scalex, scaley);
#elif 0
pixd = pixScaleSmooth(pixs, scalex, scaley);
#elif 0
pixd = pixScaleAreaMap(pixs, scalex, scaley);
#elif 0
pixd = pixScaleBySampling(pixs, scalex, scaley);
#else
pixd = pixScaleToGray(pixs, scalex);
#endif
d = pixGetDepth(pixd);
#if 1
if (d <= 8)
pixWrite(fileout, pixd, IFF_PNG);
else
pixWrite(fileout, pixd, IFF_JFIF_JPEG);
#else
pixWrite(fileout, pixd, IFF_PNG);
#endif
pixDestroy(&pixs);
pixDestroy(&pixd);
return 0;
}
开发者ID:Strongc,项目名称:Tesseract_Ocr,代码行数:51,代码来源:scaletest1.c
示例9: upscale
Pix* upscale(Pix* pix) {
l_int32 pixPixelCount = pixGetWidth(pix)* pixGetHeight(pix);
const l_int32 MIN_PIXEL_COUNT = 3 * 1024*1024;
if (pixPixelCount < MIN_PIXEL_COUNT) {
l_float32 scale = ((double) MIN_PIXEL_COUNT) / pixPixelCount;
scale = sqrt(scale);
Pix* scaled = pixScale(pix, scale,scale);
l_int32 xres, yres;
pixGetResolution(pix, &xres, &yres);
pixSetResolution(scaled, 600, 600);
return scaled;
}
return pixClone(pix);
}
开发者ID:renard314,项目名称:textfairy,代码行数:14,代码来源:pixFunc.cpp
示例10: getImagePhash_px
unsigned long long getImagePhash_px( PIX *pix_orig, char *tmpFilename ) {
int free_8 = 0;
// Convert colour images down to grey
PIX *pix8;
if( pixGetDepth(pix_orig) > 8 ) {
pix8 = pixScaleRGBToGrayFast( pix_orig, 1, COLOR_GREEN );
if( pix8 == NULL ) {
printf("Covertion to 8bit, did not go well.");
return 0;
}
free_8 = 1;
}
else {
// already gray
free_8 = 0;
pix8 = pix_orig;
}
int width = pixGetWidth( pix8 );
int height = pixGetHeight( pix8 );
BOX* box = boxCreate(1, 1, width-2, height-2);
PIX* pixc = pixClipRectangle(pix8, box, NULL);
if(free_8 == 1) {
pixDestroy( &pix8 );
}
PIX *pix8s = pixScale(pixc, 0.2, 0.2);
pixDestroy( &pixc );
// Convert image down to binary (no gray)
/* PIX *pix1 = pixThresholdToBinary( pix8s, 200 );
if( pix1 == NULL ) {
printf( "Covertion to 1bit, did not go well.");
pixDestroy( &pix8s );
return 0;
}
pixDestroy( &pix8s );
*/
// Save the file for pHash processnig
pixWrite( tmpFilename, pix8s, IFF_JFIF_JPEG);
pixDestroy( &pix8s );
unsigned long long ret = calculateImagePhash( tmpFilename );
//unlink(tmpFilename);
return ret;
}
开发者ID:Rventric,项目名称:opendias,代码行数:50,代码来源:phash_test.c
示例11: GenerateSetOfMargePix
PIXA *
GenerateSetOfMargePix(void)
{
l_float32 factor;
BOX *box;
PIX *pixs, *pixt1, *pixt2, *pixt3, *pixt4;
PIXA *pixa;
pixs = pixRead("marge.jpg");
box = boxCreate(130, 93, 263, 253);
factor = sqrt(2.0);
pixt1 = pixClipRectangle(pixs, box, NULL); /* 266 KB */
pixt2 = pixScale(pixt1, factor, factor); /* 532 KB */
pixt3 = pixScale(pixt2, factor, factor); /* 1064 KB */
pixt4 = pixScale(pixt3, factor, factor); /* 2128 KB */
pixa = pixaCreate(4);
pixaAddPix(pixa, pixt1, L_INSERT);
pixaAddPix(pixa, pixt2, L_INSERT);
pixaAddPix(pixa, pixt3, L_INSERT);
pixaAddPix(pixa, pixt4, L_INSERT);
boxDestroy(&box);
pixDestroy(&pixs);
return pixa;
}
开发者ID:xmarston,项目名称:BillRecognizer,代码行数:24,代码来源:pixalloc_reg.c
示例12: GetPix
// Gets anything and everything with a non-NULL pointer, prescaled to a
// given target_height (if 0, then the original image height), and aligned.
// Also returns (if not NULL) the width and height of the scaled image.
// The return value is the scale factor that was applied to the image to
// achieve the target_height.
float ImageData::PreScale(int target_height, Pix** pix,
int* scaled_width, int* scaled_height,
GenericVector<TBOX>* boxes) const {
int input_width = 0;
int input_height = 0;
Pix* src_pix = GetPix();
ASSERT_HOST(src_pix != NULL);
input_width = pixGetWidth(src_pix);
input_height = pixGetHeight(src_pix);
if (target_height == 0)
target_height = input_height;
float im_factor = static_cast<float>(target_height) / input_height;
if (scaled_width != NULL)
*scaled_width = IntCastRounded(im_factor * input_width);
if (scaled_height != NULL)
*scaled_height = target_height;
if (pix != NULL) {
// Get the scaled image.
pixDestroy(pix);
*pix = pixScale(src_pix, im_factor, im_factor);
if (*pix == NULL) {
tprintf("Scaling pix of size %d, %d by factor %g made null pix!!\n",
input_width, input_height, im_factor);
}
if (scaled_width != NULL)
*scaled_width = pixGetWidth(*pix);
if (scaled_height != NULL)
*scaled_height = pixGetHeight(*pix);
}
pixDestroy(&src_pix);
if (boxes != NULL) {
// Get the boxes.
boxes->truncate(0);
for (int b = 0; b < boxes_.size(); ++b) {
TBOX box = boxes_[b];
box.scale(im_factor);
boxes->push_back(box);
}
if (boxes->empty()) {
// Make a single box for the whole image.
TBOX box(0, 0, im_factor * input_width, target_height);
boxes->push_back(box);
}
}
return im_factor;
}
开发者ID:0ximDigital,项目名称:appsScanner,代码行数:51,代码来源:imagedata.cpp
示例13: GetPix
// Gets anything and everything with a non-NULL pointer, prescaled to a
// given target_height (if 0, then the original image height), and aligned.
// Also returns (if not NULL) the width and height of the scaled image.
void ImageData::PreScale(int target_height, Pix** pix,
int* scaled_width, int* scaled_height,
GenericVector<TBOX>* boxes) const {
int input_width = 0;
int input_height = 0;
Pix* src_pix = GetPix();
ASSERT_HOST(src_pix != NULL);
input_width = pixGetWidth(src_pix);
input_height = pixGetHeight(src_pix);
if (target_height == 0)
target_height = input_height;
float im_factor = static_cast<float>(target_height) / input_height;
if (scaled_width != NULL)
*scaled_width = IntCastRounded(im_factor * input_width);
if (scaled_height != NULL)
*scaled_height = target_height;
if (pix != NULL) {
// Get the scaled image.
pixDestroy(pix);
*pix = pixScale(src_pix, im_factor, im_factor);
if (scaled_width != NULL)
*scaled_width = pixGetWidth(*pix);
if (scaled_height != NULL)
*scaled_height = pixGetHeight(*pix);
}
pixDestroy(&src_pix);
if (boxes != NULL) {
// Get the boxes.
boxes->truncate(0);
for (int b = 0; b < boxes_.size(); ++b) {
TBOX box = boxes_[b];
box.scale(im_factor);
boxes->push_back(box);
}
}
}
开发者ID:CryinRabbit,项目名称:WAYD,代码行数:39,代码来源:imagedata.cpp
示例14: pixDisplayWithTitle
/*!
* pixDisplayWithTitle()
*
* Input: pix (1, 2, 4, 8, 16, 32 bpp)
* x, y (location of display frame)
* title (<optional> on frame; can be NULL);
* dispflag (1 to write, else disabled)
* Return: 0 if OK; 1 on error
*
* Notes:
* (1) See notes for pixDisplay().
* (2) This displays the image if dispflag == 1.
*/
l_int32
pixDisplayWithTitle(PIX *pixs,
l_int32 x,
l_int32 y,
const char *title,
l_int32 dispflag)
{
char *tempname;
char buffer[L_BUF_SIZE];
static l_int32 index = 0; /* caution: not .so or thread safe */
l_int32 w, h, d, spp, maxheight, opaque, threeviews, ignore;
l_float32 ratw, rath, ratmin;
PIX *pix0, *pix1, *pix2;
PIXCMAP *cmap;
#ifndef _WIN32
l_int32 wt, ht;
#else
char *pathname;
char fullpath[_MAX_PATH];
#endif /* _WIN32 */
PROCNAME("pixDisplayWithTitle");
if (dispflag != 1) return 0;
if (!pixs)
return ERROR_INT("pixs not defined", procName, 1);
if (var_DISPLAY_PROG != L_DISPLAY_WITH_XZGV &&
var_DISPLAY_PROG != L_DISPLAY_WITH_XLI &&
var_DISPLAY_PROG != L_DISPLAY_WITH_XV &&
var_DISPLAY_PROG != L_DISPLAY_WITH_IV &&
var_DISPLAY_PROG != L_DISPLAY_WITH_OPEN) {
return ERROR_INT("no program chosen for display", procName, 1);
}
/* Display with three views if either spp = 4 or if colormapped
* and the alpha component is not fully opaque */
opaque = TRUE;
if ((cmap = pixGetColormap(pixs)) != NULL)
pixcmapIsOpaque(cmap, &opaque);
spp = pixGetSpp(pixs);
threeviews = (spp == 4 || !opaque) ? TRUE : FALSE;
/* If colormapped and not opaque, remove the colormap to RGBA */
if (!opaque)
pix0 = pixRemoveColormap(pixs, REMOVE_CMAP_WITH_ALPHA);
else
pix0 = pixClone(pixs);
/* Scale if necessary; this will also remove a colormap */
pixGetDimensions(pix0, &w, &h, &d);
maxheight = (threeviews) ? MAX_DISPLAY_HEIGHT / 3 : MAX_DISPLAY_HEIGHT;
if (w <= MAX_DISPLAY_WIDTH && h <= maxheight) {
if (d == 16) /* take MSB */
pix1 = pixConvert16To8(pix0, 1);
else
pix1 = pixClone(pix0);
} else {
ratw = (l_float32)MAX_DISPLAY_WIDTH / (l_float32)w;
rath = (l_float32)maxheight / (l_float32)h;
ratmin = L_MIN(ratw, rath);
if (ratmin < 0.125 && d == 1)
pix1 = pixScaleToGray8(pix0);
else if (ratmin < 0.25 && d == 1)
pix1 = pixScaleToGray4(pix0);
else if (ratmin < 0.33 && d == 1)
pix1 = pixScaleToGray3(pix0);
else if (ratmin < 0.5 && d == 1)
pix1 = pixScaleToGray2(pix0);
else
pix1 = pixScale(pix0, ratmin, ratmin);
}
pixDestroy(&pix0);
if (!pix1)
return ERROR_INT("pix1 not made", procName, 1);
/* Generate the three views if required */
if (threeviews)
pix2 = pixDisplayLayersRGBA(pix1, 0xffffff00, 0);
else
pix2 = pixClone(pix1);
if (index == 0) {
lept_rmdir("disp");
lept_mkdir("disp");
}
index++;
//.........这里部分代码省略.........
开发者ID:KevinSantos,项目名称:openalpr-windows,代码行数:101,代码来源:writefile.c
示例15: pixSaveTiledOutline
/*!
* pixSaveTiledOutline()
*
* Input: pixs (1, 2, 4, 8, 32 bpp)
* pixa (the pix are accumulated here)
* scalefactor (0.0 to disable; otherwise this is a scale factor)
* newrow (0 if placed on the same row as previous; 1 otherwise)
* space (horizontal and vertical spacing, in pixels)
* linewidth (width of added outline for image; 0 for no outline)
* dp (depth of pixa; 8 or 32 bpp; only used on first call)
* Return: 0 if OK, 1 on error.
*
* Notes:
* (1) Before calling this function for the first time, use
* pixaCreate() to make the @pixa that will accumulate the pix.
* This is passed in each time pixSaveTiled() is called.
* (2) @scalefactor scales the input image. After scaling and
* possible depth conversion, the image is saved in the input
* pixa, along with a box that specifies the location to
* place it when tiled later. Disable saving the pix by
* setting @scalefactor == 0.0.
* (3) @newrow and @space specify the location of the new pix
* with respect to the last one(s) that were entered.
* (4) @dp specifies the depth at which all pix are saved. It can
* be only 8 or 32 bpp. Any colormap is removed. This is only
* used at the first invocation.
* (5) This function uses two variables from call to call.
* If they were static, the function would not be .so or thread
* safe, and furthermore, there would be interference with two or
* more pixa accumulating images at a time. Consequently,
* we use the first pix in the pixa to store and obtain both
* the depth and the current position of the bottom (one pixel
* below the lowest image raster line when laid out using
* the boxa). The bottom variable is stored in the input format
* field, which is the only field available for storing an int.
*/
l_int32
pixSaveTiledOutline(PIX *pixs,
PIXA *pixa,
l_float32 scalefactor,
l_int32 newrow,
l_int32 space,
l_int32 linewidth,
l_int32 dp)
{
l_int32 n, top, left, bx, by, bw, w, h, depth, bottom;
BOX *box;
PIX *pix1, *pix2, *pix3, *pix4;
PROCNAME("pixSaveTiledOutline");
if (scalefactor == 0.0) return 0;
if (!pixs)
return ERROR_INT("pixs not defined", procName, 1);
if (!pixa)
return ERROR_INT("pixa not defined", procName, 1);
n = pixaGetCount(pixa);
if (n == 0) {
bottom = 0;
if (dp != 8 && dp != 32) {
L_WARNING("dp not 8 or 32 bpp; using 32\n", procName);
depth = 32;
} else {
depth = dp;
}
} else { /* extract the depth and bottom params from the first pix */
pix1 = pixaGetPix(pixa, 0, L_CLONE);
depth = pixGetDepth(pix1);
bottom = pixGetInputFormat(pix1); /* not typical usage! */
pixDestroy(&pix1);
}
/* Remove colormap if it exists; otherwise a copy. This
* guarantees that pix4 is not a clone of pixs. */
pix1 = pixRemoveColormapGeneral(pixs, REMOVE_CMAP_BASED_ON_SRC, L_COPY);
/* Scale and convert to output depth */
if (scalefactor == 1.0) {
pix2 = pixClone(pix1);
} else if (scalefactor > 1.0) {
pix2 = pixScale(pix1, scalefactor, scalefactor);
} else if (scalefactor < 1.0) {
if (pixGetDepth(pix1) == 1)
pix2 = pixScaleToGray(pix1, scalefactor);
else
pix2 = pixScale(pix1, scalefactor, scalefactor);
}
pixDestroy(&pix1);
if (depth == 8)
pix3 = pixConvertTo8(pix2, 0);
else
pix3 = pixConvertTo32(pix2);
pixDestroy(&pix2);
/* Add black outline */
if (linewidth > 0)
pix4 = pixAddBorder(pix3, linewidth, 0);
else
//.........这里部分代码省略.........
开发者ID:KevinSantos,项目名称:openalpr-windows,代码行数:101,代码来源:writefile.c
示例16: main
//.........这里部分代码省略.........
pixDisplay(pixd, 600, 200);
pixWrite("/tmp/filter.png", pixd, IFF_PNG);
pixDestroy(&pixd);
/* Get results for dilation */
startTimer();
pixt1 = pixDilateGray(pixs, 15, 15);
t = stopTimer();
fprintf(stderr, "Dilation time = %7.3f sec\n", t);
/* Get results for erosion */
pixt2 = pixErodeGray(pixs, 15, 15);
/* Get results using the rank filter for rank = 0.0 and 1.0.
* Don't use 0.0 or 1.0, because those are dispatched
* automatically to erosion and dilation! */
pixt3 = pixRankFilterGray(pixs, 15, 15, 0.0001);
pixt4 = pixRankFilterGray(pixs, 15, 15, 0.9999);
/* Compare */
pixEqual(pixt1, pixt4, &same);
if (same)
fprintf(stderr, "Correct: dilation results same as rank 1.0\n");
else
fprintf(stderr, "Error: dilation results differ from rank 1.0\n");
pixEqual(pixt2, pixt3, &same);
if (same)
fprintf(stderr, "Correct: erosion results same as rank 0.0\n");
else
fprintf(stderr, "Error: erosion results differ from rank 0.0\n");
pixDestroy(&pixt1);
pixDestroy(&pixt2);
pixDestroy(&pixt3);
pixDestroy(&pixt4);
fprintf(stderr, "\n----------------------------------------\n");
fprintf(stderr, "The next part takes about 30 seconds\n");
fprintf(stderr, "----------------------------------------\n\n");
nax = numaMakeSequence(1, 1, SIZE);
nay1 = numaCreate(SIZE);
nay2 = numaCreate(SIZE);
gplot = gplotCreate("/tmp/rankroot", GPLOT_X11, "sec/MPix vs filter size",
"size", "time");
for (i = 1; i <= SIZE; i++) {
t1 = t2 = 0.0;
for (j = 0; j < 5; j++) {
startTimer();
pixt1 = pixRankFilterGray(pixs, i, SIZE + 1, 0.5);
t1 += stopTimer();
pixDestroy(&pixt1);
startTimer();
pixt1 = pixRankFilterGray(pixs, SIZE + 1, i, 0.5);
t2 += stopTimer();
if (j == 0)
pixDisplayWrite(pixt1, 1);
pixDestroy(&pixt1);
}
numaAddNumber(nay1, 1000000. * t1 / (5. * w * h));
numaAddNumber(nay2, 1000000. * t2 / (5. * w * h));
}
gplotAddPlot(gplot, nax, nay1, GPLOT_LINES, "vertical");
gplotAddPlot(gplot, nax, nay2, GPLOT_LINES, "horizontal");
gplotMakeOutput(gplot);
gplotDestroy(&gplot);
/* Display tiled */
pixa = pixaReadFiles("/tmp/display", "file");
pixd = pixaDisplayTiledAndScaled(pixa, 8, 250, 5, 0, 25, 2);
pixWrite("/tmp/tiles.jpg", pixd, IFF_JFIF_JPEG);
pixDestroy(&pixd);
pixaDestroy(&pixa);
pixDestroy(&pixs);
pixDisplayWrite(NULL, -1); /* clear out */
pixs = pixRead("test8.jpg");
for (i = 1; i <= 4; i++) {
pixt1 = pixScaleGrayRank2(pixs, i);
pixDisplay(pixt1, 300 * (i - 1), 100);
pixDestroy(&pixt1);
}
pixDestroy(&pixs);
pixs = pixRead("test24.jpg");
pixt1 = pixConvertRGBToLuminance(pixs);
pixt2 = pixScale(pixt1, 1.5, 1.5);
for (i = 1; i <= 4; i++) {
for (j = 1; j <= 4; j++) {
pixt3 = pixScaleGrayRankCascade(pixt2, i, j, 0, 0);
pixDisplayWrite(pixt3, 1);
pixDestroy(&pixt3);
}
}
pixDestroy(&pixt1);
pixDestroy(&pixt2);
pixDestroy(&pixs);
pixDisplayMultiple("/tmp/display/file*");
return 0;
}
开发者ID:xmarston,项目名称:BillRecognizer,代码行数:101,代码来源:rank_reg.c
示例17: pixaDisplayTiledAndScaled
/*!
* pixaDisplayTiledAndScaled()
*
* Input: pixa
* outdepth (output depth: 1, 8 or 32 bpp)
* tilewidth (each pix is scaled to this width)
* ncols (number of tiles in each row)
* background (0 for white, 1 for black; this is the color
* of the spacing between the images)
* spacing (between images, and on outside)
* border (width of additional black border on each image;
* use 0 for no border)
* Return: pix of tiled images, or null on error
*
* Notes:
* (1) This can be used to tile a number of renderings of
* an image that are at different scales and depths.
* (2) Each image, after scaling and optionally adding the
* black border, has width 'tilewidth'. Thus, the border does
* not affect the spacing between the image tiles. The
* maximum allowed border width is tilewidth / 5.
*/
PIX *
pixaDisplayTiledAndScaled(PIXA *pixa,
l_int32 outdepth,
l_int32 tilewidth,
l_int32 ncols,
l_int32 background,
l_int32 spacing,
l_int32 border)
{
l_int32 x, y, w, h, wd, hd, d;
l_int32 i, n, nrows, maxht, ninrow, irow, bordval;
l_int32 *rowht;
l_float32 scalefact;
PIX *pix, *pixn, *pixt, *pixb, *pixd;
PIXA *pixan;
PROCNAME("pixaDisplayTiledAndScaled");
if (!pixa)
return (PIX *)ERROR_PTR("pixa not defined", procName, NULL);
if (outdepth != 1 && outdepth != 8 && outdepth != 32)
return (PIX *)ERROR_PTR("outdepth not in {1, 8, 32}", procName, NULL);
if (border < 0 || border > tilewidth / 5)
border = 0;
if ((n = pixaGetCount(pixa)) == 0)
return (PIX *)ERROR_PTR("no components", procName, NULL);
/* Normalize scale and depth for each pix; optionally add border */
pixan = pixaCreate(n);
bordval = (outdepth == 1) ? 1 : 0;
for (i = 0; i < n; i++) {
if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL)
continue;
pixGetDimensions(pix, &w, &h, &d);
scalefact = (l_float32)(tilewidth - 2 * border) / (l_float32)w;
if (d == 1 && outdepth > 1 && scalefact < 1.0)
pixt = pixScaleToGray(pix, scalefact);
else
pixt = pixScale(pix, scalefact, scalefact);
if (outdepth == 1)
pixn = pixConvertTo1(pixt, 128);
else if (outdepth == 8)
pixn = pixConvertTo8(pixt, FALSE);
else /* outdepth == 32 */
pixn = pixConvertTo32(pixt);
pixDestroy(&pixt);
if (border)
pixb = pixAddBorder(pixn, border, bordval);
else
pixb = pixClone(pixn);
pixaAddPix(pixan, pixb, L_INSERT);
pixDestroy(&pix);
pixDestroy(&pixn);
}
if ((n = pixaGetCount(pixan)) == 0) { /* should not have changed! */
pixaDestroy(&pixan);
return (PIX *)ERROR_PTR("no components", procName, NULL);
}
/* Determine the size of each row and of pixd */
wd = tilewidth * ncols + spacing * (ncols + 1);
nrows = (n + ncols - 1) / ncols;
if ((rowht = (l_int32 *)CALLOC(nrows, sizeof(l_int32))) == NULL)
return (PIX *)ERROR_PTR("rowht array not made", procName, NULL);
maxht = 0;
ninrow = 0;
irow = 0;
for (i = 0; i < n; i++) {
pix = pixaGetPix(pixan, i, L_CLONE);
ninrow++;
pixGetDimensions(pix, &w, &h, NULL);
maxht = L_MAX(h, maxht);
if (ninrow == ncols) {
//.........这里部分代码省略.........
开发者ID:0359xiaodong,项目名称:tess-two,代码行数:101,代码来源:pixafunc2.c
示例18: main
int main(int argc,
char **argv)
{
char bufname[256];
l_int32 i, w, h;
l_float32 *mat1, *mat2, *mat3, *mat1i, *mat2i, *mat3i, *matdinv;
l_float32 matd[9], matdi[9];
BOXA *boxa, *boxa2;
PIX *pix, *pixs, *pixb, *pixg, *pixc, *pixcs;
PIX *pixd, *pix1, *pix2, *pix3;
PIXA *pixa;
PTA *ptas, *ptad;
L_REGPARAMS *rp;
if (regTestSetup(argc, argv, &rp))
return 1;
pix = pixRead("feyn.tif");
pixs = pixScale(pix, 0.22, 0.22);
pixDestroy(&pix);
#if ALL
/* Test invertability of sequential. */
fprintf(stderr, "Test invertability of sequential\n");
pixa = pixaCreate(0);
for (i = 0; i < 3; i++) {
pixb = pixAddBorder(pixs, ADDED_BORDER_PIXELS, 0);
MakePtas(i, &ptas, &ptad);
pix1 = pixAffineSequential(pixb, ptad, ptas, 0, 0);
regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0,3,6 */
pixaAddPix(pixa, pix1, L_INSERT);
pix2 = pixAffineSequential(pix1, ptas, ptad, 0, 0);
regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 1,4,7 */
pixaAddPix(pixa, pix2, L_INSERT);
pixd = pixRemoveBorder(pix2, ADDED_BORDER_PIXELS);
pixXor(pixd, pixd, pixs);
regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 2,5,8 */
pixaAddPix(pixa, pixd, L_INSERT);
pixDestroy(&pixb);
ptaDestroy(&ptas);
ptaDestroy(&ptad);
}
pix1 = pixaDisplayTiledInColumns(pixa, 3, 1.0, 20, 3);
pix2 = pixScaleToGray(pix1, 0.2);
regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 9 */
pixDisplayWithTitle(pix2, 0, 100, NULL, rp->display);
pixDestroy(&pix1);
pixDestroy(&pix2);
pixaDestroy(&pixa);
#endif
#if ALL
/* Test invertability of sampling */
fprintf(stderr, "Test invertability of sampling\n");
pixa = pixaCreate(0);
for (i = 0; i < 3; i++) {
pixb = pixAddBorder(pixs, ADDED_BORDER_PIXELS, 0);
MakePtas(i, &ptas, &ptad);
pix1 = pixAffineSampledPta(pixb, ptad, ptas, L_BRING_IN_WHITE);
regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 10,13,16 */
pixaAddPix(pixa, pix1, L_INSERT);
pix2 = pixAffineSampledPta(pix1, ptas, ptad, L_BRING_IN_WHITE);
regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 11,14,17 */
pixaAddPix(pixa, pix2, L_INSERT);
pixd = pixRemoveBorder(pix2, ADDED_BORDER_PIXELS);
pixXor(pixd, pixd, pixs);
regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 12,15,18 */
pixaAddPix(pixa, pixd, L_INSERT);
pixDestroy(&pixb);
ptaDestroy(&ptas);
ptaDestroy(&ptad);
}
pix1 = pixaDisplayTiledInColumns(pixa, 3, 1.0, 20, 3);
pix2 = pixScaleToGray(pix1, 0.2);
regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 19 */
pixDisplayWithTitle(pix2, 200, 100, NULL, rp->display);
pixDestroy(&pix1);
pixDestroy(&pix2);
pixDestroy(&pixs);
pixaDestroy(&pixa);
#endif
#if ALL
/* Test invertability of interpolation on grayscale */
fprintf(stderr, "Test invertability of grayscale interpolation\n");
pix = pixRead("feyn.tif");
pixg = pixScaleToGray3(pix);
pixDestroy(&pix);
pixa = pixaCreate(0);
for (i = 0; i < 3; i++) {
pixb = pixAddBorder(pixg, ADDED_BORDER_PIXELS / 3, 255);
MakePtas(i, &ptas, &ptad);
pix1 = pixAffinePta(pixb, ptad, ptas, L_BRING_IN_WHITE);
regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 20,23,26 */
pixaAddPix(pixa, pix1, L_INSERT);
pix2 = pixAffinePta(pix1, ptas, ptad, L_BRING_IN_WHITE);
regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 21,24,27 */
pixaAddPix(pixa, pix2, L_INSERT);
//.........这里部分代码省略.........
开发者ID:MaTriXy,项目名称:tess-two,代码行数:101,代码来源:affine_reg.c
示例19: main
main(int argc,
char **argv)
{
l_float32 scalefact;
L_BMF *bmf, *bmftop;
L_KERNEL *kel, *kelx, *kely;
PIX *pixs, *pixg, *pixt, *pixd;
PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pix8;
PIXA *pixa;
L_REGPARAMS *rp;
if (regTestSetup(argc, argv, &rp))
return 1;
/* ----------------- Test on 8 bpp grayscale ---------------------*/
pixa = pixaCreate(5);
bmf = bmfCreate("./fonts", 6);
bmftop = bmfCreate("./fonts", 10);
pixs = pixRead("lucasta-47.jpg");
pixg = pixScale(pixs, 0.4, 0.4); /* 8 bpp grayscale */
pix1 = pixConvertTo32(pixg); /* 32 bpp rgb */
AddTextAndSave(pixa, pix1, 1, bmf, textstr[0], L_ADD_BELOW, 0xff000000);
pix2 = pixConvertGrayToSubpixelRGB(pixs, 0.4, 0.4, L_SUBPIXEL_ORDER_RGB);
AddTextAndSave(pixa, pix2, 0, bmf, textstr[1], L_ADD_BELOW, 0x00ff0000);
pix3 = pixConvertGrayToSubpixelRGB(pixs, 0.4, 0.4, L_SUBPIXEL_ORDER_BGR);
AddTextAndSave(pixa, pix3, 0, bmf, textstr[2], L_ADD_BELOW, 0x0000ff00);
pix4 = pixConvertGrayToSubpixelRGB(pixs, 0.4, 0.4, L_SUBPIXEL_ORDER_VRGB);
AddTextAndSave(pixa, pix4, 0, bmf, textstr[3], L_ADD_BELOW, 0x00ff0000);
pix5 = pixConvertGrayToSubpixelRGB(pixs, 0.4, 0.4, L_SUBPIXEL_ORDER_VBGR);
AddTextAndSave(pixa, pix5, 0, bmf, textstr[4], L_ADD_BELOW, 0x0000ff00);
pixt = pixaDisplay(pixa, 0, 0);
pixd = pixAddSingleTextblock(pixt, bmftop,
"Regression test for subpixel scaling: gray",
0xff00ff00, L_ADD_ABOVE, NULL);
regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 0 */
pixDisplayWithTitle(pixd, 50, 50, NULL, rp->display);
pixaDestroy(&pixa);
pixDestroy(&pixs);
pixDestroy(&pixg);
pixDestroy(&pixt);
pixDestroy(&pixd);
pixDest
|
请发表评论