画像の加工について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
葦酢

画像の加工について

#1

投稿記事 by 葦酢 » 6年前

プログラミングを初めて1年の初心者なのですが、今画像処理の問題ができなくて困っています。どうか皆様の知恵を貸していただければと思います。
画像は縦横のサイズが256の画像です。そしてこの画像から輝度値をー20するというプログラム作っていて、私は最初-20すればいいのではないかと思いout_image[y][x] = in_image[y][x] - 20;と書いて実行してみたのですが出力された画像はなぜか真っ白な部分が多くできあがった状態になりました。
そして調べてみたら負の数字がunsigned charでは表現できないらしくじゃあ別のを使えばいいのかと思ったのですがその問題にはキャスト?も別のも使わずunsigned charだけでできると書いてありました。
いろいろためしてみたのですが結局白い部分が残ってしまい失敗してしまいました。
もうお手上げ状態なので助けてほしいです。


コード:


#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>



void main(void)
{
	int x, y;
	char fni[40], fno[40];
	unsigned char head[1078], buf[YSIZE][XSIZE]; 
	unsigned char in_image[YSIZE][XSIZE];  
	unsigned char out_image[YSIZE][XSIZE]; 
	FILE *fp, *fp2;
	printf("ファイル名を入力:");
	scanf("%s", fni);
	fp = fopen(fni, "rb"); 
	fread(head, sizeof(unsigned char), 1078, fp); 
	fread(buf, sizeof(unsigned char), XSIZE*YSIZE, fp);

	for (y = 0; y<YSIZE; y++){
		for (x = 0; x<XSIZE; x++){
			in_image[y][x] = buf[y][x]; 
		}
	}

	printf("読み込み終了!\n");

	printf("出力ファイル名を入力:");
	scanf("%s", fno);

	for (y = 0; y<YSIZE; y++){
		for (x = 0; x<XSIZE; x++){
			out_image[y][x] = in_image[y][x] - 20;
			if (out_image[y][x] <= 0){

				out_image[y][x] = 0;
			}

		}
	}


	fp2 = fopen(fno, "wb");

	
	fwrite(head, sizeof(unsigned char), 1078, fp2);

	
	fwrite(out_image, sizeof(unsigned char), XSIZE*YSIZE, fp2);

	fclose(fp);  
	fclose(fp2); 

	printf("終了!\n");

}

アバター
usao
記事: 1887
登録日時: 11年前

Re: 画像の加工について

#2

投稿記事 by usao » 6年前

・20よりも大きい値であれば20を引く
・20以下の値については0にする

でよいのではないでしょうか.

返信

“C言語何でも質問掲示板” へ戻る