%
% The format of the ConnectedComponentsImage method is:
%
-% Image *ConnectedComponentsImage(const Image *image,
-% const size_t connectivity,ExceptionInfo *exception)
+% Image *ConnectedComponentsImage(const Image *image,FILE *file,
+% const size_t connectivity,const MagickBooleanType verbose,
+% ExceptionInfo *exception)
%
% A description of each parameter follows:
%
% o image: the image.
%
+% o file: the file, typically stdout.
+%
% o connectivity: how many neighbors to visit, choose from 4 or 8.
%
+% o verbose: A value other than zero prints more detailed information
+% about the image.
+%
% o exception: return any errors or warnings in this structure.
%
*/
return((int) (q->area-(ssize_t) p->area));
}
-MagickExport Image *ConnectedComponentsImage(const Image *image,
- const size_t connectivity,ExceptionInfo *exception)
+MagickExport Image *ConnectedComponentsImage(const Image *image,FILE *file,
+ const size_t connectivity,const MagickBooleanType verbose,
+ ExceptionInfo *exception)
{
#define ConnectedComponentsImageTag "ConnectedComponents/Image"
}
}
(void) SyncImage(component_image,exception);
- artifact=GetImageArtifact(image,"connected-components:verbose");
- if (IsStringTrue(artifact) != MagickFalse)
+ if (verbose != MagickFalse)
{
/*
Report statistics on unique objects.
component_view=DestroyCacheView(component_view);
qsort((void *) object,component_image->colors,sizeof(*object),
CCObjectCompare);
- (void) fprintf(stdout,
+ (void) fprintf(file,
"Objects (id: bounding-box centroid area mean-color):\n");
for (i=0; i < (ssize_t) component_image->colors; i++)
{
if (object[i].area < MagickEpsilon)
continue;
GetColorTuple(&object[i].color,MagickFalse,mean_color);
- (void) fprintf(stdout,
+ (void) fprintf(file,
" %.20g: %.20gx%.20g%+.20g%+.20g %.1f,%.1f %.20g %s\n",(double)
object[i].id,(double) object[i].bounding_box.width,(double)
object[i].bounding_box.height,(double) object[i].bounding_box.x,
#endif
extern MagickExport Image
- *ConnectedComponentsImage(const Image *,const size_t,ExceptionInfo *);
+ *ConnectedComponentsImage(const Image *,FILE *,const size_t,
+ const MagickBooleanType,ExceptionInfo *);
#if defined(__cplusplus) || defined(c_plusplus)
}
if (LocaleCompare("connected-component",option+1) == 0)
{
(void) SyncImageSettings(mogrify_info,*image,exception);
- mogrify_image=ConnectedComponentsImage(*image,
- (size_t) StringToInteger(argv[i+1]),exception);
+ mogrify_image=ConnectedComponentsImage(*image,stdout,
+ (size_t) StringToInteger(argv[i+1]),mogrify_info->verbose,
+ exception);
break;
}
if (LocaleCompare("contrast",option+1) == 0)
{
if (IfMagickFalse(IsGeometry(arg1)))
CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
- new_image=ConnectedComponentsImage(_image,(size_t)
- StringToInteger(arg1),_exception);
+ new_image=ConnectedComponentsImage(_image,stdout,(size_t)
+ StringToInteger(arg1),_image_info->verbose,_exception);
break;
}
if (LocaleCompare("contrast",option+1) == 0)
{"distance", RealReference} } },
{ "Kuwahara", { {"geometry", StringReference}, {"radius", RealReference},
{"sigma", RealReference}, {"channel", MagickChannelOptions} } },
- { "ConnectedComponents", { {"connectivity", IntegerReference} } },
+ { "ConnectedComponents", { {"connectivity", IntegerReference},
+ {"verbose", MagickBooleanOptions} } },
{ "CopyPixels", { {"image", ImageReference}, {"geometry", StringReference},
{"width", IntegerReference}, {"height", IntegerReference},
{"x", IntegerReference}, {"y", IntegerReference},
}
case 142: /* ConnectedComponent */
{
+ MagickBooleanType
+ verbose;
+
size_t
connectivity;
connectivity=4;
+ verbose=MagickFalse;
if (attribute_flag[0] != 0)
connectivity=argument_list[0].integer_reference;
- image=ConnectedComponentsImage(image,connectivity,exception);
+ if (attribute_flag[1] != 0)
+ verbose=argument_list[1].integer_reference != 0 ?
+ MagickTrue : MagickFalse;
+ image=ConnectedComponentsImage(image,stdout,connectivity,verbose,
+ exception);
break;
}
case 143: /* Copy */
{"double", RealReference} } },
{ "Kuwahara", { {"geometry", StringReference}, {"radius", RealReference},
{"sigma", RealReference}, {"channel", MagickChannelOptions} } },
- { "ConnectedComponents", { {"connectivity", IntegerReference} } },
+ { "ConnectedComponents", { {"connectivity", IntegerReference},
+ {"verbose", MagickBooleanOptions} } },
{ "CopyPixels", { {"image", ImageReference}, {"geometry", StringReference},
{"width", IntegerReference}, {"height", IntegerReference},
{"x", IntegerReference}, {"y", IntegerReference},
}
case 142: /* ConnectedComponent */
{
+ MagickBooleanType
+ verbose;
+
size_t
connectivity;
connectivity=4;
+ verbose=MagickFalse;
if (attribute_flag[0] != 0)
connectivity=argument_list[0].integer_reference;
- image=ConnectedComponentsImage(image,connectivity,exception);
+ if (attribute_flag[1] != 0)
+ verbose=argument_list[1].integer_reference != 0 ?
+ MagickTrue : MagickFalse;
+ image=ConnectedComponentsImage(image,stdout,connectivity,verbose,
+ exception);
break;
}
case 143: /* Copy */