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カメラからの画像を表示したいと考えています。よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー