行毎の黒のドット(ピクセル)数を教えていただけませんか?
開発環境Microsoft Visual Studio .NET 2003
2値画像を読み込んだ時、各行毎の黒のピクセル(ドット)数を表示する
プログラムを組もうとしているのですがわかりません。
画像読み込みまではできたのですがその後のプログラムがわかりません
誰か組んでいただけないでしょうか?
#include <stdio.h>
#include <process.h>
#define Y_SIZE 3648 // 処理できる最大画像
#define X_SIZE 3648
#define HIGH 255 // 画像の最大強度値
#define LOW 0 // 画像の最小強度値
#define LEVEL 256 // 画像の強度レベル値
// BMPファイルのフォーマットに従って用意した変数
typedef unsigned short WORD;
typedef unsigned long DWORD;
WORD bfType;
DWORD bfSize;
WORD bfReserved1,
bfReserved2;
DWORD bfOffBits;
DWORD biSize,
biWidth, biHeight;
WORD biPlanes,
biBitCount;
DWORD biCompression,
biSizeImage,
biXPelsPerMeter,
biYPelsPerMeter,
biClrUsed,
biClrImportant;
unsigned char image_in[Y_SIZE][X_SIZE][3]; // 入力カラー画像配列
unsigned char image_out[Y_SIZE][X_SIZE][3]; //出力カラー画像配列
unsigned char image_bw[Y_SIZE][X_SIZE]; //濃淡画像配列
unsigned char data_rgb[Y_SIZE][X_SIZE][3]; // RGB画像配列
//********************************************
// 24Bitビットマップファイル読み込み *
//********************************************
void readBMP(
char *filename, // BMPファイル名
unsigned char image[Y_SIZE][X_SIZE][3] // 24ビットRGB画像配列
)
{
FILE *fp;
int i, j, k;
// ファイルオープン
if ((fp = fopen(filename, "rb"))==NULL) {
printf("readBmp: Open error!\n");
exit(1);
}
printf("input file : %s\n", filename);
// ヘッダー情報読み込む
fread(&bfType, sizeof(bfType), 1, fp);
fread(&bfSize, sizeof(bfSize), 1, fp);
fread(&bfReserved1, sizeof(bfReserved1), 1, fp);
fread(&bfReserved2, sizeof(bfReserved2), 1, fp);
fread(&bfOffBits, sizeof(bfOffBits), 1, fp);
fread(&biSize, sizeof(biSize), 1, fp);
fread(&biWidth, sizeof(biWidth), 1, fp);
fread(&biHeight, sizeof(biHeight), 1, fp);
fread(&biPlanes, sizeof(biPlanes), 1, fp);
fread(&biBitCount, sizeof(biBitCount), 1, fp);
fread(&biCompression, sizeof(biCompression), 1, fp);
fread(&biSizeImage, sizeof(biSizeImage), 1, fp);
fread(&biXPelsPerMeter, sizeof(biXPelsPerMeter), 1, fp);
fread(&biYPelsPerMeter, sizeof(biYPelsPerMeter), 1, fp);
fread(&biClrUsed, sizeof(biClrUsed), 1, fp);
fread(&biClrImportant, sizeof(biClrImportant), 1, fp);
// RGB画像データ読み込む
for (i=0; i<(int)biHeight; i++)
for (j=0; j<(int)biWidth; j++) {
for (k=0; k<3; k++) {
//fread(&image[i][j][2-k], 1, 1, fp);
fread(&image[biHeight-i][j][2-k], 1, 1, fp);
}
}
fclose(fp);
}
//**********************************************
// RGBカラー画像を256諧調白黒濃淡画像へ変換 *
//**********************************************
void BMPto256BW(
unsigned char image[Y_SIZE][X_SIZE][3],
unsigned char image_bw[Y_SIZE][X_SIZE] )
{
int y, x, a;
for (y=0; y<(int)biHeight; y++)
for (x=0; x<(int)biWidth; x++) {
a = (int)(0.3*image[y][x][0] + 0.59*image[y][x][1] + 0.11*image[y][x][2]);
if (a<LOW) a = LOW;
if (a>HIGH) a = HIGH;
image_bw[y][x] = a;
}
}
//*****************************************
//各行の黒色判定
//*****************************************
//****************************************
// 白黒濃淡画像配列のコピー *
//****************************************
void imageCopyBW(
unsigned char image1[Y_SIZE][X_SIZE],
unsigned char image2[Y_SIZE][X_SIZE] )
{
int x, y;
for (y=0; y<(int)biHeight; y++)
for (x=0; x<(int)biWidth; x++)
image2[y][x] = image1[y][x];
}
void main(void)
{
char input[100], output[100];
int intensity;
printf("入力画像ファイル名(*.bmp):"); scanf("%s", input);
readBMP(input, image_in); // 画像の入力,RGB24ビットカラーBMP画像を配列に格納
//一列各行の黒色の数出力
}
補足
不明確で申し訳ありません system("PAUSE"); return 0; } unsigned long *readBmp(char *filename) { unsigned short bfType, biBitCount; unsigned long bfSize,biSizeImage,biWidth,biHeight; FILE *fp; unsigned long data; static unsigned long image[Y_CHORD_Max * X_CHORD_Max + 2]; int i; unsigned long *pointer; if ((fp = fopen(filename, "rb"))==NULL) { printf("readBmp: Open error!\n"); getch(); exit(1); } /*The head part of BMP file*/ fread(&bfType, 2, 1, fp);/*Type*/ fseek(fp,16L,SEEK_CUR); fread(&biWidth, 4, 1, fp);/* Width*/ fread(&biHeight, 4, 1, fp);/*Height*/ fseek(fp,2L,SEEK_CUR); fread(&biBitCount, 2, 1, fp);/**/ fseek(fp,4L,SEEK_CUR); fread(&biSizeImage, 4, 1, fp);/**/ fseek(fp,24L,SEEK_CUR); /**/ if (bfType != 0x4d42) { printf("Not an available .BMP file\n"); fclose(fp); getch(); exit(1); } if (biBitCount != 0x01) { printf("Not an available Monochrome Bitmap file\n"); fclose(fp); getch(); exit(1); } if ((biWidth > X_CHORD_Max)||(biHeight > Y_CHORD_Max)) { printf("Out of range\n"); fclose(fp); getch(); exit(1); } image[0] = biSizeImage * 8 / biHeight; image[1] = biHeight; for(i = 2; i < (biSizeImage * 8 + 2); i++) { fread(&image[i], 4, 1, fp); } rewind(fp); fclose(fp); pointer = &image[0]; return(pointer); } こちらの読み込み部分が欠如したまま質問を行っていました もうしわけありません あと32bitで処理を行うのではなく8bitで行いたいと考えてます