Microsoft MVP성태의 닷넷 이야기
.NET Framework: 615. C# - AForge.NET을 이용한 웹캠 영상 출력 [링크 복사], [링크+제목 복사],
조회: 25396
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
(연관된 글이 3개 있습니다.)

C# - AForge.NET을 이용한 웹캠 영상 출력

주간닷넷에 AForge.NET이 소개되었군요. ^^

주간닷넷 2016년 8월 2일 - AForge.NET
; https://blogs.msdn.microsoft.com/eva/?p=11715

AForge.NET Framework 2.2.5 is now available
; http://www.aforgenet.com/news/2013.07.17.releasing_framework_2.2.5.html

보니까, 재미있는 기능들이 많이 있습니다. 그중에서 오늘의 제목에 걸맞게 VideoCaptureDevice 타입의 간단한 사용법을 보겠습니다.

VideoCaptureDevice Class
; http://www.aforgenet.com/framework/docs/html/f4d3c2ba-605c-f066-f969-68260ce5e141.htm

This video source class captures video data from local video capture device, like USB web camera (or internal), frame grabber, capture board - anything which supports DirectShow interface. For devices which has a shutter button or support external software triggering, the class also allows to do snapshots. Both video size and snapshot size can be configured.


NuGet 덕분에 설치도 간단하고,

AForge.Video.DirectShow 2.2.5 
; https://www.nuget.org/packages/AForge.Video.DirectShow/

PM> Install-Package AForge.Video.DirectShow

도움말이 잘 되어 있어 사용법도 간단합니다.

Access to USB cameras and video files using DirectShow
; http://www.aforgenet.com/framework/features/directshow_video.html

따라서, WinForm 용 예제 코드를 이렇게 쉽게 작성할 수 있습니다.

using System;
using System.Drawing;
using System.Windows.Forms;
using AForge.Video;
using AForge.Video.DirectShow;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        FilterInfoCollection _videoDevices;

        private void Form1_Load(object sender, EventArgs e)
        {
            _videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);

            if (_videoDevices.Count == 0)
            {
                button1.Enabled = false;
                MessageBox.Show("NO video input device");
                return;
            }
        }

        private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            Bitmap bitmap = eventArgs.Frame;

            this.Invoke((Action)(() =>
            {
                pictureBox1.Image = (Bitmap)bitmap.Clone();
            }), null);
        }

        VideoCaptureDevice _videoSource;

        private void button1_Click(object sender, EventArgs e)
        {
            if (button1.Text == "Start")
            {
                _videoSource = new VideoCaptureDevice(_videoDevices[0].MonikerString);
                _videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);
                _videoSource.Start();

                button1.Text = "Stop";
            }
            else
            {
                _videoSource.SignalToStop();
                button1.Text = "Start";
            }
        }
    }
}

다음은, 카메라가 설치된 제 노트북에서 실행한 화면입니다.

video_capture_aforge_1.PNG

(첨부 파일은 이 글의 예제 코드를 포함합니다.)




AForge.NET에 아쉬운 점이 있다면, 2013년의 2.2.5 버전 이후로 업데이트가 중단된 듯하다는 것입니다. 일부 그 명맥을 GitHub에서 개인 자격으로 이어가고는 있으나... 글쎄요...

암튼, 적어도 윈도우 10 환경까지는 무난하게 사용할 수 있습니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 10/27/2016]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2017-06-28 02시37분
[초보자] 안녕하세요, AFroge로 테블릿에서 사진촬영하는 프로그램을 만들고있는데요,
혹시 여기서 해상도? 사진의 품질을 높이고 싶은데..어떻게 방법이 없을까요?
지금 해상도가 640,480에 PixelFormat이 Format24bppRgb으로 받아오네요....
[guest]
2017-06-28 12시40분
글쎄요. 해당 태블릿의 카메라가 원하는 품질의 해상도를 먼저 지원하는지 확인해 봐야 하지 않을까요? (저도 위에 소개한 내용 이상으로 AForge를 알진 못합니다.)
정성태

... 46  47  48  49  50  51  52  [53]  54  55  56  57  58  59  60  ...
NoWriterDateCnt.TitleFile(s)
12312정성태9/5/202015921개발 환경 구성: 508. Logstash 기본 사용법 [2]
12311정성태9/4/202011117.NET Framework: 937. C# - 간단하게 만들어 보는 리눅스의 nc(netcat), json_pp 프로그램 [1]
12310정성태9/3/202010389오류 유형: 644. Windows could not start the Elasticsearch 7.9.0 (elasticsearch-service-x64) service on Local Computer.
12309정성태9/3/202010138개발 환경 구성: 507. Elasticsearch 6.6부터 기본 추가된 한글 형태소 분석기 노리(nori) 사용법
12308정성태9/2/202011399개발 환경 구성: 506. Windows - 단일 머신에서 단일 바이너리로 여러 개의 ElasticSearch 노드를 실행하는 방법
12307정성태9/2/202012153오류 유형: 643. curl - json_parse_exception / Invalid UTF-8 start byte
12306정성태9/1/202010338오류 유형: 642. SQL Server 시작 오류 - error code 10013
12305정성태9/1/202011211Windows: 172. "Administered port exclusions"이 아닌 포트 범위 항목을 삭제하는 방법
12304정성태8/31/202010175개발 환경 구성: 505. 윈도우 - (네트워크 어댑터의 우선순위로 인한) 열거되는 IP 주소 순서를 조정하는 방법
12303정성태8/30/202010323개발 환경 구성: 504. ETW - 닷넷 프레임워크 기반의 응용 프로그램을 위한 명령행 도구 etrace 소개
12302정성태8/30/202010226.NET Framework: 936. C# - ETW 관련 Win32 API 사용 예제 코드 (5) - Private Logger파일 다운로드1
12301정성태8/30/202010539오류 유형: 641. error MSB4044: The "Fody.WeavingTask" task was not given a value for the required parameter "IntermediateDir".
12300정성태8/29/20209948.NET Framework: 935. C# - ETW 관련 Win32 API 사용 예제 코드 (4) CLR ETW Consumer파일 다운로드1
12299정성태8/27/202010874.NET Framework: 934. C# - ETW 관련 Win32 API 사용 예제 코드 (3) ETW Consumer 구현파일 다운로드1
12298정성태8/27/202010619오류 유형: 640. livekd - Could not resolve symbols for ntoskrnl.exe: MmPfnDatabase
12297정성태8/25/20209821개발 환경 구성: 503. SHA256 테스트 인증서 생성 방법
12296정성태8/24/202010249.NET Framework: 933. C# - ETW 관련 Win32 API 사용 예제 코드 (2) NT Kernel Logger파일 다운로드1
12295정성태8/24/20209682오류 유형: 639. Bitvise - Address is already in use; bind() in ListeningSocket::StartListening() failed: Windows error 10013: An attempt was made to access a socket ,,,
12293정성태8/24/202011004Windows: 171. "Administered port exclusions" 설명
12292정성태8/20/202012327.NET Framework: 932. C# - ETW 관련 Win32 API 사용 예제 코드 (1)파일 다운로드2
12291정성태8/15/202011256오류 유형: 638. error 1297: Device driver does not install on any devices, use primitive driver if this is intended.
12290정성태8/11/202011916.NET Framework: 931. C# - IP 주소에 따른 국가별 위치 확인 [8]파일 다운로드1
12289정성태8/6/20209423개발 환경 구성: 502. Portainer에 윈도우 컨테이너를 등록하는 방법
12288정성태8/5/20209414오류 유형: 637. WCF - The protocol 'net.tcp' does not have an implementation of HostedTransportConfiguration type registered.
12287정성태8/5/20209866오류 유형: 636. C# - libdl.so를 DllImport로 연결 시 docker container 내에서 System.DllNotFoundException 예외 발생
12286정성태8/5/202010722개발 환경 구성: 501. .NET Core 용 container 이미지 만들 때 unzip이 필요한 경우
... 46  47  48  49  50  51  52  [53]  54  55  56  57  58  59  60  ...