OpenCvSharp로 웹캠 영상을 캡처하고 저장
13194 단어 OpenCvSharpVisualStudio캡처웹캠C#
개요
Visual Studio 2019에서 웹캠 비디오를 캡처하는 방법에 대해 설명
새 버전인 OpenCvSharp4 환경에서 캡처 이미지 저장 정보가 적었기 때문에 공유
환경
windows10
Visual Studio 2019
구현
먼저 Visual Studio 2019 (이하 VS)를 공식 사이트에서 설치
OpenCvSharp 라이브러리는 NuGet에서 설치하기 때문에 이제 방치
프로젝트 만들기
1.VS를 기동해, 새로운 프로젝트의 작성을 선택
2. Windows Forms 응용 프로그램(.NET Framework) 선택
3. 프로젝트명과 저장 장소를 적당히 입력하여 프로젝트를 작성
패키지 설치
1. VS 프로젝트 탭에서 NuGet 패키지 관리 선택
2. 찾아보기 탭의 검색 상자에 opencvsharp4를 입력합니다.
3.OpenCvSharp4.Windows를 설치(이번 사용한 버전은 「4.1.1.20191017」)
4. 설치된 탭에서 OpenCvSharp4.Windows가 설치되어 있는지 확인
아래 준비
1.Form1.cs[디자인] 탭으로 이동하여 화면 왼쪽(표시되어 있지 않은 경우, [표시] 탭 → [도구 상자])에 있는 [도구 상자] → [공통 컨트롤] → [PictureBox]를 Form1 위 D&D
하나 돌아가, 「컴포넌트」→「BackgroundWorker」도 마찬가지로 D&D
2. Form1 창의 속성에서 아래 그림의 이벤트 탭 선택
FormClosing 이벤트를 추가하고 마찬가지로 BackgroundWorker에 "DoWork"및 "ProgressChanged"이벤트를 추가합니다.
3. BackgroundWorker 속성 탭에서 아래 그림과 같이 "WorkerReportsProgress""WorkerSupportsCancellation"의 두 가지를 false에서 true로 변경합니다.
영상을 PictureBox로 출력
코드는 다음
Form1.csusing System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
int WIDTH = 640;
int HEIGHT = 480;
Mat frame;
VideoCapture capture;
Bitmap bmp;
Graphics graphic;
public Form1()
{
InitializeComponent();
//カメラ画像取得用のVideoCapture作成
capture = new VideoCapture(0);
if (!capture.IsOpened())
{
MessageBox.Show("camera was not found!");
this.Close();
}
capture.FrameWidth = WIDTH;
capture.FrameHeight = HEIGHT;
//取得先のMat作成
frame = new Mat(HEIGHT, WIDTH, MatType.CV_8UC3);
//表示用のBitmap作成
bmp = new Bitmap(frame.Cols, frame.Rows, (int)frame.Step(), System.Drawing.Imaging.PixelFormat.Format24bppRgb, frame.Data);
//PictureBoxを出力サイズに合わせる
pictureBox1.Width = frame.Cols;
pictureBox1.Height = frame.Rows;
//描画用のGraphics作成
graphic = pictureBox1.CreateGraphics();
//画像取得スレッド開始
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//描画
graphic.DrawImage(bmp, 0, 0, frame.Cols, frame.Rows);
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bw = (BackgroundWorker)sender;
while (!backgroundWorker1.CancellationPending)
{
//画像取得
capture.Grab();
OpenCvSharp.Internal.NativeMethods.videoio_VideoCapture_operatorRightShift_Mat(capture.CvPtr, frame.CvPtr);
bw.ReportProgress(0);
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
//スレッドの終了を待機
backgroundWorker1.CancelAsync();
while (backgroundWorker1.IsBusy)
Application.DoEvents();
}
}
}
실행하면 PictureBox에 웹캠 영상이 출력됩니다.
영상 캡처
1. 캡처 이미지를 저장할 파일 설정
이번에는 C:\cs_source\img\를 작성해, 거기에 저장하기로 한다
2.「툴 박스」→「커먼 컨트롤」→「Button」을 Form1 윈도우의 적당한 장소에 D&D
2. 버튼을 더블 클릭하여 클릭 이벤트 추가
3. 클릭 이벤트에 다음 코드를 추가합니다.
Form1.csprivate void button1_Click(object sender, EventArgs e)
{
frame.SaveImage(@"C:\cs_source\img\cap.png");
using (Mat cap = new Mat(@"C:\cs_source\img\cap.png"))
{
//保存されたキャプチャ画像の出力
Cv2.ImShow("test1", frame);
}
}
실행 결과
C:\cs_source\img\에 대한 출력 결과의 스크린샷
참고 URL
카메라 영상을 PictureBox로 출력
htp : // bg. 아오오오 r. jp / 우세 r5 / 아 r ゔ s / 46255389. HTML
Reference
이 문제에 관하여(OpenCvSharp로 웹캠 영상을 캡처하고 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/miwazawa/items/50cf5b913b058f59daa6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
windows10
Visual Studio 2019
구현
먼저 Visual Studio 2019 (이하 VS)를 공식 사이트에서 설치
OpenCvSharp 라이브러리는 NuGet에서 설치하기 때문에 이제 방치
프로젝트 만들기
1.VS를 기동해, 새로운 프로젝트의 작성을 선택
2. Windows Forms 응용 프로그램(.NET Framework) 선택
3. 프로젝트명과 저장 장소를 적당히 입력하여 프로젝트를 작성
패키지 설치
1. VS 프로젝트 탭에서 NuGet 패키지 관리 선택
2. 찾아보기 탭의 검색 상자에 opencvsharp4를 입력합니다.
3.OpenCvSharp4.Windows를 설치(이번 사용한 버전은 「4.1.1.20191017」)
4. 설치된 탭에서 OpenCvSharp4.Windows가 설치되어 있는지 확인
아래 준비
1.Form1.cs[디자인] 탭으로 이동하여 화면 왼쪽(표시되어 있지 않은 경우, [표시] 탭 → [도구 상자])에 있는 [도구 상자] → [공통 컨트롤] → [PictureBox]를 Form1 위 D&D
하나 돌아가, 「컴포넌트」→「BackgroundWorker」도 마찬가지로 D&D
2. Form1 창의 속성에서 아래 그림의 이벤트 탭 선택
FormClosing 이벤트를 추가하고 마찬가지로 BackgroundWorker에 "DoWork"및 "ProgressChanged"이벤트를 추가합니다.
3. BackgroundWorker 속성 탭에서 아래 그림과 같이 "WorkerReportsProgress""WorkerSupportsCancellation"의 두 가지를 false에서 true로 변경합니다.
영상을 PictureBox로 출력
코드는 다음
Form1.csusing System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
int WIDTH = 640;
int HEIGHT = 480;
Mat frame;
VideoCapture capture;
Bitmap bmp;
Graphics graphic;
public Form1()
{
InitializeComponent();
//カメラ画像取得用のVideoCapture作成
capture = new VideoCapture(0);
if (!capture.IsOpened())
{
MessageBox.Show("camera was not found!");
this.Close();
}
capture.FrameWidth = WIDTH;
capture.FrameHeight = HEIGHT;
//取得先のMat作成
frame = new Mat(HEIGHT, WIDTH, MatType.CV_8UC3);
//表示用のBitmap作成
bmp = new Bitmap(frame.Cols, frame.Rows, (int)frame.Step(), System.Drawing.Imaging.PixelFormat.Format24bppRgb, frame.Data);
//PictureBoxを出力サイズに合わせる
pictureBox1.Width = frame.Cols;
pictureBox1.Height = frame.Rows;
//描画用のGraphics作成
graphic = pictureBox1.CreateGraphics();
//画像取得スレッド開始
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//描画
graphic.DrawImage(bmp, 0, 0, frame.Cols, frame.Rows);
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bw = (BackgroundWorker)sender;
while (!backgroundWorker1.CancellationPending)
{
//画像取得
capture.Grab();
OpenCvSharp.Internal.NativeMethods.videoio_VideoCapture_operatorRightShift_Mat(capture.CvPtr, frame.CvPtr);
bw.ReportProgress(0);
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
//スレッドの終了を待機
backgroundWorker1.CancelAsync();
while (backgroundWorker1.IsBusy)
Application.DoEvents();
}
}
}
실행하면 PictureBox에 웹캠 영상이 출력됩니다.
영상 캡처
1. 캡처 이미지를 저장할 파일 설정
이번에는 C:\cs_source\img\를 작성해, 거기에 저장하기로 한다
2.「툴 박스」→「커먼 컨트롤」→「Button」을 Form1 윈도우의 적당한 장소에 D&D
2. 버튼을 더블 클릭하여 클릭 이벤트 추가
3. 클릭 이벤트에 다음 코드를 추가합니다.
Form1.csprivate void button1_Click(object sender, EventArgs e)
{
frame.SaveImage(@"C:\cs_source\img\cap.png");
using (Mat cap = new Mat(@"C:\cs_source\img\cap.png"))
{
//保存されたキャプチャ画像の出力
Cv2.ImShow("test1", frame);
}
}
실행 결과
C:\cs_source\img\에 대한 출력 결과의 스크린샷
참고 URL
카메라 영상을 PictureBox로 출력
htp : // bg. 아오오오 r. jp / 우세 r5 / 아 r ゔ s / 46255389. HTML
Reference
이 문제에 관하여(OpenCvSharp로 웹캠 영상을 캡처하고 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/miwazawa/items/50cf5b913b058f59daa6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
int WIDTH = 640;
int HEIGHT = 480;
Mat frame;
VideoCapture capture;
Bitmap bmp;
Graphics graphic;
public Form1()
{
InitializeComponent();
//カメラ画像取得用のVideoCapture作成
capture = new VideoCapture(0);
if (!capture.IsOpened())
{
MessageBox.Show("camera was not found!");
this.Close();
}
capture.FrameWidth = WIDTH;
capture.FrameHeight = HEIGHT;
//取得先のMat作成
frame = new Mat(HEIGHT, WIDTH, MatType.CV_8UC3);
//表示用のBitmap作成
bmp = new Bitmap(frame.Cols, frame.Rows, (int)frame.Step(), System.Drawing.Imaging.PixelFormat.Format24bppRgb, frame.Data);
//PictureBoxを出力サイズに合わせる
pictureBox1.Width = frame.Cols;
pictureBox1.Height = frame.Rows;
//描画用のGraphics作成
graphic = pictureBox1.CreateGraphics();
//画像取得スレッド開始
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//描画
graphic.DrawImage(bmp, 0, 0, frame.Cols, frame.Rows);
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bw = (BackgroundWorker)sender;
while (!backgroundWorker1.CancellationPending)
{
//画像取得
capture.Grab();
OpenCvSharp.Internal.NativeMethods.videoio_VideoCapture_operatorRightShift_Mat(capture.CvPtr, frame.CvPtr);
bw.ReportProgress(0);
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
//スレッドの終了を待機
backgroundWorker1.CancelAsync();
while (backgroundWorker1.IsBusy)
Application.DoEvents();
}
}
}
private void button1_Click(object sender, EventArgs e)
{
frame.SaveImage(@"C:\cs_source\img\cap.png");
using (Mat cap = new Mat(@"C:\cs_source\img\cap.png"))
{
//保存されたキャプチャ画像の出力
Cv2.ImShow("test1", frame);
}
}
C:\cs_source\img\에 대한 출력 결과의 스크린샷
참고 URL
카메라 영상을 PictureBox로 출력
htp : // bg. 아오오오 r. jp / 우세 r5 / 아 r ゔ s / 46255389. HTML
Reference
이 문제에 관하여(OpenCvSharp로 웹캠 영상을 캡처하고 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/miwazawa/items/50cf5b913b058f59daa6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(OpenCvSharp로 웹캠 영상을 캡처하고 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/miwazawa/items/50cf5b913b058f59daa6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)