// グレイスケール画像のヒストグラムをCSVファイルを作成するプログラム // プログラム名:histogram_csv.cpp #include "eps-header.hh" // 元画像(src)の輝度値のヒストグラムをCSVファイルに出力する関数 void histogram_csv( class image& src) // 元画像クラス(入力) { if (src.p == NULL) { printf("元画像がありません。"); return; } printf("\n画像のヒストグラムを作成し,CSVファイルに出力します。\n"); int nr_lines = src.get_nr_lines(); // 元画像のライン数 (縦の画素数) int nr_pixels = src.get_nr_pixels(); // 元画像のピクセル数 (横の画素数) long int hist[NR_GRAY_LEVEL]; // ヒストグラムの頻度 // 元画像のヒストグラムの頻度を計数する。 for (int ia = 0; ia < NR_GRAY_LEVEL; ia ++) { hist[ia] = 0; } for (int iy = 0; iy < nr_lines; iy ++) { for (int ix = 0; ix < nr_pixels; ix ++) { hist[ src.p[iy][ix] ] ++; } } // CSVファイルにヒストグラムを出力する。 char fn_csv[MAX_FILENAME_LEN]; printf("CSVファイル名:"); fgets(fn_csv, MAX_FILENAME_LEN - 1, stdin); if (fn_csv[strlen(fn_csv) - 1] == 0x0d || fn_csv[strlen(fn_csv) - 1] == 0x0a ) fn_csv[strlen(fn_csv) - 1] = 0; if (fn_csv[strlen(fn_csv) - 2] == 0x0d || fn_csv[strlen(fn_csv) - 2] == 0x0a ) fn_csv[strlen(fn_csv) - 2] = 0; FILE * fp_csv = fopen(fn_csv, "w"); if (fp_csv == NULL) { printf("CSVファイル:%s がオープンできませんでした。\n", fn_csv); return; } fprintf(fp_csv,"Level,Count\n"); for (int ia = 0; ia < NR_GRAY_LEVEL; ia ++) { fprintf(fp_csv,"%d,%d\n", ia, hist[ia]); } fclose(fp_csv); } // プログラムの開始位置 int main() { class image src; // 元画像クラスを宣言 src.gload(); // 元画像をBMPファイルから読み込む // BMPファイルを指定したい場合は, // src.gload("パス付きBMPファイル名"); // とする。 // 元画像(src)の輝度値のヒストグラムをCSVファイルに出力する。 histogram_csv( src); // 元画像クラス(入力) }