🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Q&A

解決済

2回答

3969閲覧

C#とOpenCVを用いてwebカメラからの画像の取得と保存がしたいです。

namekuhito

総合スコア21

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

0グッド

0クリップ

投稿2019/06/26 04:14

編集2019/06/28 03:19

C#

1namespace kamera3 2{ 3public partial class Form1 : Form 4{ 5int WIDTH = 640; 6int HEIGHT = 480; 7Mat frame; 8VideoCapture capture; 9Bitmap bmp; 10Graphics graphic; 11public Form1() 12{ 13InitializeComponent(); 14//カメラ画像取得用のVideoCapture作成 15capture = new VideoCapture(0); 16if (!capture.IsOpened()) 17{ 18MessageBox.Show("cannot open camera"); 19this.Close(); 20} 21capture.FrameWidth = WIDTH; 22capture.FrameHeight = HEIGHT; 23//取得先のMat作成 24frame = new Mat(HEIGHT, WIDTH, MatType.CV_8UC3); 25//表示用のBitmap作成 26bmp = new Bitmap(frame.Cols, frame.Rows, (int)frame.Step(), System.Drawing.Imaging.PixelFormat.Format24bppRgb, frame.Data); 27//PictureBoxを出力サイズに合わせるframe.Cols、frame.Rows  28pictureBox1.Width = 320; 29pictureBox1.Height = 240; 30//描画用のGraphics作成 31graphic = pictureBox1.CreateGraphics(); 32//画像取得スレッド開始 33backgroundWorker1.RunWorkerAsync(); 34} 35private void Form1_Load(object sender, EventArgs e) 36{ 37} 38private void button1_Click(object sender, EventArgs e) 39{ 40//MessageBox.Show("あ\n"); 41// フィルターの設定 42saveFileDialog1.Filter = "GIF形式|*.gif|JPEG形式|*.jpeg|PNG形式|*.png"; 43// ファイル保存ダイアログを表示 44saveFileDialog1.ShowDialog(); 45} 46private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 47{ 48BackgroundWorker bw = (BackgroundWorker)sender; 49while (!backgroundWorker1.CancellationPending) 50{ 51//画像取得 52//capture.Read(frame); //これだとエラー 53capture.Grab(); 54NativeMethods.videoio_VideoCapture_operatorRightShift_Mat(capture.CvPtr, frame.CvPtr); 55bw.ReportProgress(0); 56} 57} 58private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) 59{ 60//描画 61graphic.DrawImage(bmp, 0, 0, frame.Cols, frame.Rows); 62} 63private void Form1_FormClosing(object sender, FormClosingEventArgs e) 64{ 65//スレッドの終了を待機 66backgroundWorker1.CancelAsync(); 67while (backgroundWorker1.IsBusy) 68Application.DoEvents(); 69} 70private void saveFileDialog1_FileOk(object sender, EventArgs e) 71{ 72string extension = System.IO.Path.GetExtension(saveFileDialog1.FileName); 73switch (extension.ToUpper()) 74{ 75case ".GIF": 76// ★★★PictureBoxのイメージをGIF形式で保存する★★★ 77pictureBox1.Image.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Gif); 78break; 79case ".JPEG": 80// ★★★PictureBoxのイメージをJPEG形式で保存する★★★ 81pictureBox1.Image.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Jpeg); 82break; 83case ".PNG": 84// ★★★PictureBoxのイメージをGIF形式で保存する★★★ 85pictureBox1.Image.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Png); 86break; 87} 88} 89} 90}

Windowsフォームアプリケーションです。
このコードでは、カメラから画像は取得できましたが保存ができませんでした。pictureboxで表示されている画像を保存しようとして、webカメラの画像はpictureboxに表示されていないからだと考えています。他に良い保存方法やwebカメラからの画像をpictureboxに表示できる方法など知りたいです。また、出来ればOpenCVを用いてwebカメラからの画像を表示したいと考えています。よろしくお願いいたします。

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

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

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

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

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

takabosoft

2019/06/27 00:50

コードは ```csharp ここにコード ``` という感じで囲ってください。
namekuhito

2019/06/28 03:20

すみません、修正しました。
guest

回答2

0

C#

1//描画用のGraphics作成 2graphic = pictureBox1.CreateGraphics();

ここですね。描画を、pictureBox1 そのものに対して行っています。CreateGrahics の元は、bmp でしょう。
で、「いや、それだと更新されなかったんだ」という場合。今出てこないのですが、Control に「再描画が必要なことを通知する」メソッドがあるので、pictureBox1 のそれを呼んでください。

投稿2019/06/27 01:17

Q71

総合スコア995

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

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

namekuhito

2019/06/28 03:29

ありがとうございます。解決することができました。
Q71

2019/06/28 09:19

「解決しました」だけでなく、「これこれの箇所をこう修正したところ、望み通りの動作になりました」という報告が欲しいです。仕事では、そういうのを求められますよ。
namekuhito

2019/07/05 08:26

遅くなりましたが、pictureboxでの保存ではなく、bitmapで描画されているものを保存することで出来ました。 ありがとうございました。
guest

0

ベストアンサー

こんにちは。未検証ですが、

pictureBox1.Image.Save

ではなく

bmp.Save

でどうでしょうか。

投稿2019/06/27 00:50

takabosoft

総合スコア8356

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

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

namekuhito

2019/06/28 03:29

ありがとうございます。解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問