
開発環境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画像を配列に格納
//一列各行の黒色の数出力
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数ファイルの同時読み込みの...
-
ファイルへの書込み処理が異常...
-
なぜCSQとCIP形式ではコ...
-
数値のみ抽出(C言語)
-
ファイル出力で改行を入れたい!
-
C言語でファイル読み書きを早く...
-
OpenGLによる描画内容をBMP出力
-
FeliCaを利用した認証システム
-
大量の入力ファイルを扱うとき...
-
画像の白黒表示
-
エラーがわかりません、、
-
fgets( ) の返り値は何?
-
c言語でのfscanfについて
-
#define _CRT_SECURE_NO_WARNIN...
-
newかFILEでエラーのような
-
VisualStudioでのファイルの入...
-
fread()エラー
-
C,C++でのきれいに並んだ数値デ...
-
fopenでファイル名に、変数を使...
-
行毎の黒のドット(ピクセル)...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日本語ファイル名のFTPについて
-
C言語でファイル読み書きを早く...
-
複数ファイルの同時読み込みの...
-
ファイル出力で改行を入れたい!
-
c言語でのfscanfについて
-
ファイルへの書込み処理が異常...
-
テキストファイル内に対して, ...
-
CRC32の計算方法
-
fgets( ) の返り値は何?
-
VisualStudioでのファイルの入...
-
C言語にてXMLファイルから任意...
-
datファイルの読み込み
-
CSVファイルの内容を構造体に格...
-
C言語 連番データの読み込み
-
Winsockの通信処理にてファイル...
-
fopenでファイル名に、変数を使...
-
容量の大きいCSVファイルの読み...
-
画像の白黒表示
-
ライブラリ関数と同名のメンバ関数
-
YUV動画像を1ピクセルごとにず...
おすすめ情報