こんにちは、C言語初心者です。下記のプログラムでセグメンテーションエラーが生じてしまいつまづいてしまいました。
image.jpgの画像データを求めるプログラミングです。
jpegioは独自のライブラリとなっています。
平均を出す迄は上手くいったのですが、その後の標準偏差でエラーが出てしまいます。
2回目のforのループが原因だとは思うのですが、どう対処すればいいでしょうか。
宜しくお願いします。
/*画像のR,G,Bの平均と標準偏差を求めるプログラム*/
#include "jpegio.h"
#include <math.h>
int main()
{
char *filename = "image.jpg";
BYTE *data = NULL;
int imageSize = 0;
int i;
int imageWidth = 0, imageHeight = 0;
double SumR = 0, SumG = 0, SumB = 0;
double averageR =0, averageG =0, averageB = 0;
double tempR = 0.0, tempG = 0.0, tempB = 0.0;
double R_deviation = 0.0, G_deviation = 0.0, B_deviation = 0.0;
imageWidth = readHeader(filename, IMAGE_WIDTH);
imageHeight = readHeader(filename, IMAGE_HEIGHT);
imageSize = readJpeg(filename, &data);
if (imageSize == 0) return 1;
/*----平均を求める計算式----*/
for(i = 0; i < imageWidth * imageHeight; i += 1){
SumR += data[3*i];
SumG += data[3*i + 1];
SumB += data[3*i + 2];
}
averageR = SumR / (imageWidth * imageHeight);
averageG = SumG / (imageWidth * imageHeight);
averageB = SumB / (imageWidth * imageHeight);
/*----平均の結果の出力----*/
fprintf(stdout, "averageR:%.1f averageG:%.1f averageB:%.1f\n",
averageR, averageG, averageB);
/*----標準偏差を求める計算式----*/
for(i = 0; i < imageWidth * imageWidth; i += 1){
tempR += (data[3*i] - averageR) * (data[3*i] - averageR);
tempG += (data[3*i+1] - averageG)*(data[3*i+1] - averageG);
tempB += (data[3*i+2] - averageB)*(data[3*i+2] - averageB);
}
R_deviation = sqrt(tempR / (imageWidth * imageHeight));
G_deviation = sqrt(tempG / (imageWidth * imageHeight));
B_deviation = sqrt(tempB / (imageWidth * imageHeight));
/*----標準偏差の結果の出力----*/
fprintf(stdout, "deviationR:%.1f deviationG:%.1f deviationB:%.1f\n",
R_deviation, G_deviation, B_deviation);
free(data);
return 0;
}
+++++出力結果+++++
averageR:163.7 averageG:172.6 averageB:165.3
Segmentation fault: 11
標準偏差を求める計算の途中でセグメンテーションエラー。。。
Re: 標準偏差を求める計算の途中でセグメンテーションエラー。。。
すみません、初めてこの掲示板を使ったのでルールなど熟知しておりませんでした。申し訳御座いません。
/*画像のR,G,Bの平均と標準偏差を求めるプログラム*/
#include "jpegio.h"
#include <math.h>
int main()
{
char *filename = "image.jpg";
BYTE *data = NULL;
int imageSize = 0;
int i;
int imageWidth = 0, imageHeight = 0;
double SumR = 0, SumG = 0, SumB = 0;
double averageR =0, averageG =0, averageB = 0;
double tempR = 0.0, tempG = 0.0, tempB = 0.0;
double R_deviation = 0.0, G_deviation = 0.0, B_deviation = 0.0;
imageWidth = readHeader(filename, IMAGE_WIDTH);
imageHeight = readHeader(filename, IMAGE_HEIGHT);
imageSize = readJpeg(filename, &data);
if (imageSize == 0) return 1;
/*----平均を求める計算式----*/
for(i = 0; i < imageWidth * imageHeight; i += 1){
SumR += data[3*i];
SumG += data[3*i + 1];
SumB += data[3*i + 2];
}
averageR = SumR / (imageWidth * imageHeight);
averageG = SumG / (imageWidth * imageHeight);
averageB = SumB / (imageWidth * imageHeight);
/*----平均の結果の出力----*/
fprintf(stdout, "averageR:%.1f averageG:%.1f averageB:%.1f\n",
averageR, averageG, averageB);
/*----標準偏差を求める計算式----*/
for(i = 0; i < imageWidth * imageWidth; i += 1){
tempR += (data[3*i] - averageR) * (data[3*i] - averageR);
tempG += (data[3*i+1] - averageG)*(data[3*i+1] - averageG);
tempB += (data[3*i+2] - averageB)*(data[3*i+2] - averageB);
}
R_deviation = sqrt(tempR / (imageWidth * imageHeight));
G_deviation = sqrt(tempG / (imageWidth * imageHeight));
B_deviation = sqrt(tempB / (imageWidth * imageHeight));
/*----標準偏差の結果の出力----*/
fprintf(stdout, "deviationR:%.1f deviationG:%.1f deviationB:%.1f\n",
R_deviation, G_deviation, B_deviation);
free(data);
return 0;
}
Re: 標準偏差を求める計算の途中でセグメンテーションエラー。。。
freeがあるのにmallocがないのが気になりましたが
平均を求めることはできているのでそれが問題なわけではないですね。
2回目のfor文の条件をもう一度よく見てください。そこが原因です。
平均を求めることはできているのでそれが問題なわけではないですね。
2回目のfor文の条件をもう一度よく見てください。そこが原因です。
Re: 標準偏差を求める計算の途中でセグメンテーションエラー。。。
readJpeg関数で、
変数dataに対し
適切に領域を
割り付けていますね?
変数dataに対し
適切に領域を
割り付けていますね?