質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Q&A

解決済

2回答

1640閲覧

平滑化させたら真っ黒になってしまうので、どこに穴があるのか教えてほしいです

shiki_willow

総合スコア6

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

1グッド

1クリップ

投稿2020/01/21 09:13

編集2020/01/21 09:28

画像の平均化フィルタによる平滑化処理

bmp画像を変換させるプログラムの課題を行っているものです。出力の画素数を4角、上端、下端、左端、右端、その他で分けて、入力の画素数を変換させて代入させています。フィルタ処理できない部分は0にします。ubuntuのgccでコンパイルしたところ、真っ黒な画像になりました。入力はあのLENNAさんの画像です。課題内容が入力の変換のみコードを書き換えるので、画像の読み取りや出力は問題ないです。

該当のソースコード

C言語です。入力はfloat** inputimageR,G,Bで出力はfloat** outimageR,G,Bです。それぞれ[ny][nx]です。
//左上、左下、右上、右下 outimageR[0][0]=1/9*(inputimageR[0][0]+inputimageR[0][1]+inputimageR[1][1]+inputimageR[1][0]); outimageG[0][0]=1/9*(inputimageG[0][0]+inputimageG[0][1]+inputimageG[1][1]+inputimageG[1][0]); outimageB[0][0]=1/9*(inputimageB[0][0]+inputimageB[0][1]+inputimageB[1][1]+inputimageB[1][0]); outimageR[0][nx-1]=1/9*(inputimageR[0][nx-2]+inputimageR[1][nx-1]+inputimageR[1][nx-2]+inputimageR[0][nx-1]); outimageG[0][nx-1]=1/9*(inputimageG[0][nx-2]+inputimageG[1][nx-1]+inputimageG[1][nx-2]+inputimageG[0][nx-1]); outimageB[0][nx-1]=1/9*(inputimageB[0][nx-2]+inputimageB[1][nx-1]+inputimageB[1][nx-2]+inputimageB[0][nx-1]); outimageR[ny-1][0]=1/9*(inputimageR[ny-1][0]+inputimageR[ny-1][1]+inputimageR[ny-2][0]+inputimageR[ny-2][1]); outimageG[ny-1][0]=1/9*(inputimageG[ny-1][0]+inputimageG[ny-1][1]+inputimageG[ny-2][0]+inputimageG[ny-2][1]); outimageB[ny-1][0]=1/9*(inputimageB[ny-1][0]+inputimageB[ny-1][1]+inputimageB[ny-2][0]+inputimageB[ny-2][1]); outimageR[ny-1][nx-1]=1/9*(inputimageR[ny-1][nx-1]+inputimageR[ny-1][nx-2]+inputimageR[ny-2][nx-2]+inputimageR[ny-2][nx-1]); outimageG[ny-1][nx-1]=1/9*(inputimageG[ny-1][nx-1]+inputimageG[ny-1][nx-2]+inputimageG[ny-2][nx-2]+inputimageG[ny-2][nx-1]); outimageB[ny-1][nx-1]=1/9*(inputimageB[ny-1][nx-1]+inputimageB[ny-1][nx-2]+inputimageB[ny-2][nx-2]+inputimageB[ny-2][nx-1]); //上端 for(i=0,j=1;j<nx-1;j++){ outimageR[i][j]=1/9*(inputimageR[i][j]+inputimageR[i][j-1]+inputimageR[i][j+1]+inputimageR[i+1][j-1]+inputimageR[i+1][j]+inputimageR[i+1][j+1]); outimageG[i][j]=1/9*(inputimageG[i][j]+inputimageG[i][j-1]+inputimageG[i][j+1]+inputimageG[i+1][j-1]+inputimageG[i+1][j]+inputimageG[i+1][j+1]); outimageB[i][j]=1/9*(inputimageB[i][j]+inputimageB[i][j-1]+inputimageB[i][j+1]+inputimageB[i+1][j-1]+outimageB[i+1][j]+inputimageB[i+1][j+1]); } //下端 for(i=ny-1,j=1;j<nx-1;j++){ outimageR[i][j]=1/9*(inputimageR[i][j]+inputimageR[i][j-1]+inputimageR[i][j+1]+inputimageR[i-1][j-1]+inputimageR[i-1][j]+inputimageR[i-1][j+1]); outimageG[i][j]=1/9*(inputimageG[i][j]+inputimageG[i][j-1]+inputimageG[i][j+1]+inputimageG[i-1][j-1]+inputimageG[i-1][j]+inputimageG[i-1][j+1]); outimageB[i][j]=1/9*(inputimageB[i][j]+inputimageB[i][j-1]+inputimageB[i][j+1]+inputimageB[i-1][j-1]+inputimageB[i-1][j]+inputimageB[i-1][j+1]); } //左端 for(i=1,j=0;i<ny-1;i++){ outimageR[i][j]=1/9*(inputimageR[i][j]+inputimageR[i+1][j]+inputimageR[i-1][j]+inputimageR[i-1][j+1]+inputimageR[i][j+1]+inputimageR[i+1][j+1]); outimageG[i][j]=1/9*(inputimageG[i][j]+inputimageG[i+1][j]+inputimageG[i-1][j]+inputimageG[i-1][j+1]+inputimageG[i][j+1]+inputimageG[i+1][j+1]); outimageB[i][j]=1/9*(inputimageB[i][j]+inputimageB[i+1][j]+inputimageB[i-1][j]+inputimageB[i-1][j+1]+inputimageB[i][j+1]+inputimageB[i+1][j+1]); } //右端 for(i=1,j=nx-1;i<ny-1;i++){ outimageR[i][j]=1/9*(inputimageR[i][j]+inputimageR[i+1][j]+inputimageR[i-1][j]+inputimageR[i-1][j-1]+inputimageR[i][j-1]+inputimageR[i+1][j-1]); outimageG[i][j]=1/9*(inputimageG[i][j]+inputimageG[i+1][j]+inputimageG[i-1][j]+inputimageG[i-1][j-1]+inputimageG[i][j-1]+inputimageR[i+1][j-1]); outimageB[i][j]=1/9*(inputimageB[i][j]+inputimageB[i+1][j]+inputimageB[i-1][j]+inputimageB[i-1][j-1]+inputimageB[i][j-1]+inputimageR[i+1][j-1]); } //others for (i = 1; i < ny-1; i++) { for (j = 1; j < nx-1; j++) { outimageR[i][j]=1/9*(inputimageR[i-1][j-1]+inputimageR[i][j-1]+inputimageR[i+1][j-1]+inputimageR[i-1][j]+inputimageR[i][j]+inputimageR[i+1][j]+inputimageR[i-1][j+1]+inputimageR[i][j+1]+inputimageR[i+1][j+1]); outimageG[i][j]=1/9*(inputimageG[i-1][j-1]+inputimageG[i][j-1]+inputimageG[i+1][j-1]+inputimageG[i-1][j]+inputimageG[i][j]+inputimageG[i+1][j]+inputimageG[i-1][j+1]+inputimageG[i][j+1]+inputimageG[i+1][j+1]); outimageB[i][j]=1/9*(inputimageB[i-1][j-1]+inputimageB[i][j-1]+inputimageB[i+1][j-1]+inputimageB[i-1][j]+inputimageB[i][j]+inputimageB[i+1][j]+inputimageB[i-1][j+1]+inputimageB[i][j+1]+inputimageB[i+1][j+1]); } }

試したこと

別のbmp画像でもやってみましたが、真っ黒でした。

langhtorn👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/01/21 09:20

このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
guest

回答2

0

ベストアンサー

整数演算における1/9が0になってしまうからだと思います。
足し算の後に/9を入れれば小数点以下切り捨ての値になるはずです。

投稿2020/01/21 09:20

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shiki_willow

2020/01/21 14:03

なるほど。見落としていました。おかげでうまく動きました。ありがとうございます。
guest

0

1/9

ってのは0ですよ

投稿2020/01/21 09:21

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shiki_willow

2020/01/21 14:03

そうでした。float型に気をつけようとおもいます。ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問