0

2 つの画像がどの程度類似しているかを調べようとしていますが、セグメンテーション違反が発生しています。私は何を間違っていますか?

ExceptionInfo     *exception;
Image             *base_image, *reference_image, *composed_image,  *image, *images, *images1;
double            *similarity;
RectangleInfo     offset;
ImageInfo         *image_info, *image_info1;

char base_image_src[] = "jpgs/100000.jpg";
char reference_image_src[] = "jpgs/100000.jpg";

MagickCoreGenesis(NULL, MagickTrue);
exception = AcquireExceptionInfo();

image_info = CloneImageInfo((ImageInfo *) NULL);
(void) strcpy(image_info->filename, base_image_src);
base_image = ReadImage(image_info, exception);

image_info1 = CloneImageInfo((ImageInfo *) NULL);
(void) strcpy(image_info1->filename, reference_image_src);
reference_image = ReadImage(image_info1, exception);

offset.width = (unsigned int) 1200;
offset.height = (unsigned int) 1200;
offset.x = 0;
offset.y = 0;

composed_image = SimilarityImage(base_image, reference_image, &offset, similarity, exception);

編集:SimilarityImageで壊れていることに気付きました。/usr/lib64/libMagickCore.so.2 からの SimilarityImage () の 0x000000371dc5fdfa

4

1 に答える 1

0

この例では、セグメンテーション違反/バス エラーがsimilarity変数のダブル ポインターに関連していると考えられます。のようにoffset、スタック内で宣言し、参照を渡します。

// From
double  *similarity;
// To
double   similarity;

// And from
composed_image = SimilarityImage(base_image, reference_image, &offset, similarity, exception);
// To
composed_image = SimilarityImage(base_image, reference_image, &offset, &similarity, exception);

またはダブルを割り当てます

double  *similarity = (double *)malloc(sizeof(double));
于 2013-12-23T18:57:47.260 に答える