2017-11-30 25 views
1

私はPythonでプログラミングするのに慣れていて、cでプログラムする方法を友達に教えようとしています。私は彼に基本を教えることができましたが、すぐに試験を受けて、彼を助けることができればと思っていますが、PythonからCへのコードの変換に問題があります。 彼は例として与えられた1つの質問。ピクセルを白黒に変換する

プログラムは、ループを使用してpixelsIn.txt.fileからグレースケールのピクセル値を読み取る必要があります。ファイルの行は、プログラムによって読み込まれます。画像の本体には画像内の各ボディのグレースケール値が含まれており、プログラムはピクセル値が110に等しいかどうかを判断し、そうであればプログラムはこのピクセル値を225(白)に変換する必要があります。 0(黒)に戻ります。

enter image description here

私はPythonで、私は、各行に読んでラインを分割し、その後数は110であるかどうかをチェックするためにforループを使用することをやっていた場合。しかし、これがC言語でどのように行われるのか、私は非常に確信していますか? 私はあいまいである場合は申し訳ありませんが、私は十分に明確でない場合は、私は質問に答えるでしょう。どんな助けでも大歓迎です。

たとえば、左の小さな画像では、文字Hはピクセル値110を使用してエンコードされます。これは、周囲のピクセルのグレースケール値が非常に近いため、左のイメージであまり明確ではありません。 メッセージのピクセル値が255(白)に変更され、メッセージ以外のピクセル値が0 (黒)に変更された場合、右側の画像は非表示のHを明確に示します

+1

概念的には全く同じことをします。違いは、構文とAPIにあります。 – dbush

+0

サンプル画像と期待結果を投稿できますか? – Marco

+0

はい、まさに私が立ち往生しているところです。私はCの構文とAPIについて非常に不確かです。 – catherine

答えて

1

私はあなたFILE *imageで画像を開き、画像のP2ヘッダーを読み、幅をint widthに、高さをint heightに保存し、最大強度255を読み取りました。

fscanfを使用してimageの各ピクセルを繰り返し処理するだけで各整数を読み取ることができます。ここではサンプルコードはCである:

その後
int i, j, **matrix = malloc(height * sizeof(int *)); 
for (i = 0; i < height; i++) { 
    matrix[i] = malloc(width * sizeof(int)) 
    for (j = 0; j < width; j++) { 
     int pixel; 
     fscanf(image, "%d", &pixel); 
     matrix[i][j] = (pixel == 110) ? 255 : 0; 
    } 
} 

、あなたの変更画像は行列になります。保存するだけです。

希望しました。

関連する問題