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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

フィルタ

フィルタとは、特定の条件に合わせてデータへのアクセスをブロックするプログラムやルーチンを指します。

Q&A

2回答

1459閲覧

画像処理の研究について

kazukun

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

フィルタ

フィルタとは、特定の条件に合わせてデータへのアクセスをブロックするプログラムやルーチンを指します。

0グッド

0クリップ

投稿2021/10/19 08:46

編集2022/01/12 10:55

前提・実現したいこと

C#で元画像をガウシアンフィルタでフィルタ処理した後に、二値化するという作業をしています。
フィルタ機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

名前'Filter'は現在のコンテキスト内に存在しません。

該当のソースコード

C#

1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Text; 7using System.Windows.Forms; 8using System.IO; 9using System.Drawing.Imaging; 10using System.Linq; 11 12namespace 二値化とサイズ変更 13{ 14 public partial class Form1 : Form 15 { 16 public Form1() 17 { 18 InitializeComponent(); 19 } 20 21 Bitmap bmp1_im1;//資料画像(原画像)のビットマップ 22 Bitmap bmp1_im2;//資料画像(二値化後)のビットマップ 23 Bitmap bmp1_im3;//資料画像(フィルタ処理後)のビットマップ 24 25 PictureBox pb1, pb2, pb3; 26 27 private void Form1_Load(object sender, EventArgs e) 28 { 29 pb1 = pictureBox1; 30 pb2 = pictureBox2; 31 pb3 = pictureBox3; 32 33 } 34 35 private void File_Open_Click(object sender, EventArgs e) 36 { 37 if (openFileDialog1.ShowDialog() == DialogResult.OK) 38 { 39 Image im1 = Image.FromFile(openFileDialog1.FileName); 40 DrawPicture1(im1); 41 } 42 } 43 44 private void DrawPicture1(Image im1) 45 46 { 47 double a; 48 int maxsize = 200; 49 50 if (im1.Width < maxsize && im1.Height < maxsize) 51 { 52 pb1.Width = pb1.Height = maxsize; 53 Rectangle rect1 = new Rectangle(0, 0, im1.Width, im1.Height);//イメージのサイズ 54 Rectangle rect2 = new Rectangle(0, 0, pb1.Width, pb1.Height);//PictureBox1のサイズ 55 bmp1_im1 = new Bitmap(pb1.Width, pb1.Height); 56 Graphics g = Graphics.FromImage(bmp1_im1); 57 g.DrawImage(im1, rect2, rect1, GraphicsUnit.Pixel); 58 g.Dispose(); 59 pb1.Image = bmp1_im1; 60 } 61 else 62 { 63 if (im1.Width > im1.Height) 64 { 65 /*a = (double)maxsize / (double)im1.Width;*/ 66 pb1.Width = maxsize; 67 pb1.Height = maxsize /* (int)(a * im1.Height)*/; 68 } 69 else 70 { 71 /*a = (double)maxsize / (double)im1.Height;*/ 72 pb1.Height = maxsize; 73 pb1.Width =maxsize /*(int)(a * im1.Width)*/; 74 } 75 Rectangle rect3 = new Rectangle(0, 0, im1.Width, im1.Height);//イメージのサイズ 76 Rectangle rect4 = new Rectangle(0, 0, pb1.Width, pb1.Height);//PictureBox1のサイズ 77 bmp1_im1 = new Bitmap(pb1.Width, pb1.Height); 78 Graphics g = Graphics.FromImage(bmp1_im1); 79 g.DrawImage(im1, rect4, rect3, GraphicsUnit.Pixel); 80 g.Dispose(); 81 pb1.Image = bmp1_im1; 82 } 83 } 84 85 private void File_SaveBMP_Click(object sender, EventArgs e) 86 { 87 if (saveFileDialog1.ShowDialog() == DialogResult.OK) 88 { 89 pb2.Image.Save(saveFileDialog1.FileName, ImageFormat.Bmp); 90 } 91 } 92 93 private void P_GrayScale_Click(object sender, EventArgs e) 94 { 95 int i, j, nx, ny; 96 int gray; 97 Color col; 98 nx = pb3.Width; 99 ny = pb3.Height; 100 bmp1_im2 = new Bitmap (pb3.Image); 101 for (j = 0; j < ny; j++) 102 for (i = 0; i < nx; i++) 103 { 104 col = bmp1_im2.GetPixel(i, j); 105 if (col.R > 200 && col.B > 200 && col.G > 200) gray = 255; 106 else gray = 0; 107 bmp1_im2.SetPixel(i, j, Color.FromArgb(gray, gray, gray)); 108 } 109 pb2.Image = bmp1_im2; 110 } 111 112 113 private void gausian_Click(object sender, EventArgs e) 114 { 115 int nx, ny; 116 int gray; 117 118 nx = pb1.Width; 119 ny = pb1.Height; 120 121 // 画像の読み込み(グレースケールに変換) 122 bmp1_im3 = new Bitmap(pb1.Image); 123 124 // フィルタ用のカーネル 125 const int kernelSize = 3; // カーネルサイズ 126 double[,] kernel = new double[kernelSize, kernelSize]{ 127 {1/16.0, 1/8.0, 1/16.0}, 128 {1/8.0, 1/4.0, 1/8.0}, 129 {1/16.0, 1/8.0, 1/16.0}}; 130 /* フィルタ処理 131 bmp1_im3 = Filter(pb3.Image, kernel); 132 */ 133 pb3.Image = bmp1_im3; 134 135 136 137 } 138 139 } 140}

試したこと

'Filter'の定義をしないとだめだと思い、試しましたがエラーがでるだけで、使用できませんでした。フィルタ処理の知識がないプログラム初心者ですみません。

補足情報(FW/ツールのバージョンなど)

大学のPCで visual studio 2005でコードを書いています。
※詳しいデザイン画面を貼るので少しおまちください。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/10/19 09:07

まずは、とにかく、コードを ``` と ``` で囲ってください(``` はバッククォート 3 つ)。インデントされて見やすくなるので。インデントされてないコードは質問者さん自身も読む気がしないのでは? 閲覧者はなおさらです。
退会済みユーザー

退会済みユーザー

2021/10/19 09:08 編集

(被ったので削除しました)
kazukun

2021/10/22 15:41

解答ありがとうございます! もう一度書き直してみます
dodox86

2021/10/26 06:15

[2021/10/26 15:07]の編集を見て: エラーメッセージは、言い方を変えると「Filterという名前のメソッドが無い(未定義)」と報告しています。そのFilterメソッドは質問者さん自身がコードを書くもののはずです。 また、マークダウン記法を使っ質問を編集されたようですが、コードのインデント(字下げ)がメチャクチャです。Visual Studio 上で編集しているときは適切に表示されていませんでしたか? それをそのままコードとしてコピー&ペーストするなりしましょう。
kazukun

2021/10/26 06:31

定義しようと試みたのですが、知識が浅すぎて定義する場所がわかりませんでした。 よければ教えていただけないでしょうか?
退会済みユーザー

退会済みユーザー

2021/10/26 07:14

Form1内ならどこでもいいですよ。
guest

回答2

0

C#

1 private void button1_Click(object sender, EventArgs e) 2 { 3 int a = 1, b = 2; 4 label1.Text = plus(a, b).ToString(); 5 } 6 /* 7 private int plus(int a, int b) 8 { 9 return a + b; 10 } 11 */

エラーを再現させるコードを書きました。
ここでのplus()はa+bを計算するメソッドですが、ここがコメント/* */になっていて見えないのと同じです。
/* */を消してメソッドを有効にすれば、a+bが計算されます。
他の回答者さんもおっしゃっていますが、自分で3x3のフィルタ処理を行うコードを書きましょう。

投稿2021/10/26 08:20

Wind

総合スコア442

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

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

kazukun

2021/10/28 05:06

ありがとうございます。 コメント化はエラーが出ている部分をわかりやすくするためにしました 逆にわかりにくくなってしまいすみません。 3*3のフィルタ処理のコードを入れてみます!
guest

0

定義しようと試みたのですが、知識が浅すぎて定義する場所がわかりませんでした。

private void Form1_Load(object sender, EventArgs e)だとか
private void File_Open_Click(object sender, EventArgs e)だとか
private void DrawPicture1(Image im1)などと同じところに定義してください。

投稿2021/10/26 06:44

編集2021/10/26 06:45
ozwk

総合スコア13512

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

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

kazukun

2021/10/28 05:08

ありがとうございます。 定義してみたのですが、エラーが消えませんでした(ToT) 3*3のフィルタコードを入れて試してみることにしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問