소개
강의
수강평
- C# OpenCV 컴퓨터비전 입문 강좌
게시글
질문&답변
섹션2 1강 중, CvCapture 초기화 중 에러 발생.
안녕하세요. 윤대희입니다.NuGet 패키지가 제대로 설치가 되지 않아서 발생하는 문제일 수 있습니다.NuGet 패키지를 한 번 다시 설치해보세요.NuGet 패키지는 2개를 설치해야하는 설치와 1개만 설치해도 되는 패키지가 있습니다.또한, OS 플랫폼에 맞는 설치를 진행하셨는지도 확인 부탁드립니다.설치 이후, 디버그 버튼(▶)을 눌러 빌드를 진행해보세요.모두 맞게 설치했음에도 불구하고 동일한 오류가 발생한다면 크게 다음과 같은 문제일 수 있습니다.패키지 버전 문제(강의에 사용한 패키지 버전과 다름)패키지 누락 문제(설치시 모종의 이유로 인해 패키지가 누락됨)패키지가 누락된 경우,https://github.com/shimat/opencvsharp/releases/tag/2.4.10.20150820에 접속하여 직접 다운로드를 수행해주세요.https://luckygg.tistory.com/331 이 블로그 방식대로 dll을 직접 추가하고 빌드를 수행해보세요. 감사합니다. 윤대희 드림.
- 0
- 2
- 80
질문&답변
20강 threshold 질문이요.
안녕하세요. 윤대희입니다.threshold를 150은 설명을 위해 임의로 입력한 값으로 특별한 의미를 지니고 있지 않습니다.이진화 관련 설명은 인프런 AI 인턴이 설명해준 것처럼 이미지의 픽셀 값이 88을 기준으로 나뉘기 때문입니다.감사합니다.윤대희 드림.
- 0
- 2
- 93
질문&답변
동영상 실행이 안돼요
안녕하세요. 윤대희입니다.코드와 파일 경로가 모두 올바르다면, 폼과 이벤트가 연결되었는지 확인 부탁드립니다.
- 0
- 2
- 263
질문&답변
OpenCV에서 사용 가능한 이미지의 최대 크기
안녕하세요. Kim J님 윤대희입니다. 말씀하시는 크기가, 파일의 크기를 말씀하시는 걸로 이해가 됩니다. 사용하시는 버전이나 플랫폼에 따라 약간씩 다를 수 있으나, 2147483647 bytes를 제한으로 합니다. 용량 제한이 아니더라도, 최대 픽셀 개수에서 제한이 될 수 있습니다. 픽셀은 2^32개 까지 가능합니다. 600MB가 넘는 대용량 이미지도 사용은 가능합니다. 만약에 이미지가 아닌 동영상이라면 메모리 누수 문제가 발생할 수 있습니다. 파일의 크기가 큰 동영상의 경우, FFmpeg 라이브러리를 이용해서 불러오신 다음, CV처리를 하시길 권장 드립니다. 감사합니다.
- 0
- 1
- 1.1K
질문&답변
차량 번호 인식 프로그램을 만들려면 제가 뭘 더 공부해야 되나요?
idenfrin님 안녕하세요. 윤대희입니다. 말씀하신 동영상의 내용을 구현하는 방법은 여러가지 방법이 있을 것 같습니다. 그 중 몇 가지를 공유해드리겠습니다. 첫 번째로는 인식의 개념이 아닌, OpenCV를 활용해 검출하는 방법입니다. 공유해주신 동영상에서는 자동차의 번호판의 이미지 패턴이 하얀색 네모 안에 검은색 글자 영역으로 구성되어 있습니다. 그러므로, 하얀색 사각형을 찾은 다음, 내부의 검은색 영역을 검출한다음 boundingBox로 생성하는 방법이 있을 수 있습니다. 이 방법은 비슷한 이미지 패턴이 반복되는 경우 단순하게 검출하는 방법입니다. 두 번째는 OpenCV ML 기능을 활용해 검출하는 방법입니다. SVM, ORB, BRIEF 등의 함수를 활용해 글자나 글자 모양을 학습시키고 검출하는 방법입니다. 현재 인프런 강의에서는 제공되지는 않지만, OpenCV 함수에서 지원되는 기능이므로 OpenCV Docs나 https://076923.github.io/posts/Python-opencv-38/ 를 비롯해 오픈소스 등을 참고해보시면 쉽게 구현하실 수 있습니다. 세 번째는 PyTorch나 Tensorflow 등 딥 러닝을 통해 구현하는 방법입니다. 데이터 세트를 구축하신 다음, 모델링을 통해 OCR 모델을 구현하시면 됩니다. 또는 사전에 구현되어 있는 모델을 적용하시면 됩니다. 네 번째는 Tesseract-OCR을 활용하는 방법입니다. https://076923.github.io/posts/C-tesseract-1/ C#에서는 다음과 같이 설치하셔서 테스트해보실 수 있습니다. 마지막으로 API를 통해 OCR 기능을 구매하여 사용하시는 방법이 있습니다. 대표적으로 Google Vision API OCR이나 CLOVA OCR이 있습니다. 현재 가장 권장드리는 방법은 Tesseract-OCR를 활용하여 텍스트를 추출하시는 것을 권유드립니다. 감사합니다. 윤대희 드림.
- 0
- 1
- 3K
질문&답변
동영상 저장시 저장시간과 재생시간 상이함
안녕하세요. ukyo1003님 윤대희입니다. 비디오 저장 클래스는 CvVideoWriter("경로 및 이름", "FourCC", FPS, 영상 크기) 입니다. CvVideoWriter OpenCV_video = new CvVideoWriter("../../Record.avi", "XVID", 15, Cv.Size(640, 480)); 의 형태로 인스턴스를 생성했다면, FPS는 15가 됩니다. - FPS는 영상이 바뀌는 속도를 의미합니다. 그러므로, 초당 15개의 프레임(이미지)를 저장해야합니다. 초당 15개의 프레임을 저장하기 위해서는 timer2의 Interval 간격이 초당 15개의 프레임을 저장할 수 있으면 됩니다. Timer에서 Interval = 1000 = 1초 를 의미합니다. 그러므로 15개의 프레임을 1초에 저장하면 되므로, 1000 / 15 = 66.66666666666667입니다. Interval을 66.6666.. 으로 설정한다면 FPS 15의 처리와 동일하게 설정할 수 있습니다. 만약, 비디오 파일과 동일한 속도의 파일로 저장하려면, 불러온 동영상 파일의 프레임 속도를 확인하면 재생시간과 동일한 속도로 저장할 수 있습니다. (사진) 특정 동영상 파일의 프레임 속도가 29.97 프레임/초라면, 1000ms동안 약 30개를 처리합니다. 그러므로, Timer의 Interval을 1000/30 = 33.333333으로 설정하면 동일한 시간으로 설정될 수 있습니다. 단, Timer 내부에 이미지 프로세싱 등을 처리하는 코드가 존재한다면, Interval 동안 연산시간이 포함되므로, 연산을 모두 완료한 후에 프레임을 저장하는 코드를 구현하거나 연산 시간을 고려해서 Interval을 조정합니다. 감사합니다. - 윤대희 드림
- 0
- 2
- 1.9K
질문&답변
코너검출 일정 부분검출이 가능한 것인가요?
안녕하세요. 이현우님 윤대희입니다. 구현하신 코드를 보았을 때, 카메라의 프레임마다 실시간으로 corner.png와 부합되는 영역을 찾는 것으로 이해 됩니다. 만약, 카메라에서 불러오는 이미지(src)가 ◆가 여러 개 있는 이미지고, 템플릿 매칭 이미지(temp)가 ◆가 하나라면, 현재 코드에서는 좌측 상단의 ◆만 인식되는 것으로 이해됩니다. ◆ 위치를 하나의 이미지에서 여러 번 검색하는 방법은 다음과 같습니다. 1. 템플릿 매칭이 검출된 (minloc.X, minloc.Y, templit.Width, templit.Height) 좌표를 src 에 덮어씌운다음에 TemplitImage 메서드를 다시 반복하는 방법 2. 템플릿 매칭을 통해 반환된 calc 이미지에 최솟값을 갖는 location 뿐만아니라, 두 번째, 세 번째, 네 번째 ... 등까지 검색하는 방법입니다. 말씀하신 threshold는 최대 개수 제한치로 고려하시면 됩니다. - 2번 방법이 가장 효율적인 방법이지만, 두 번째, 세 번째, ... N 번째까지 찾으셔야 하기 때문에 세밀한 조건 설정이 필요합니다. 이 조건에 if문을 사용하시면 될 것 같습니다. 만약, 여러 문양을 비교하시려면 TemplitImage를 여러 번 실행하셔야 합니다. 감사합니다. 윤대희 드림.
- 0
- 4
- 424
질문&답변
코너검출 일정 부분검출이 가능한 것인가요?
안녕하세요. 이현우님 윤대희입니다. 하나의 화면에서 여러 개의 템플릿 매칭을 수행하는 방법으로는 반복문을 활용하여 적용하는 방법입니다. 템플릿 매칭은 주사선 방향으로 검색했을 때 가장 먼저 발견되는 매치 객체를 반환합니다. (상단, 좌측 우선) 그러므로, 처음 객체를 발견한 다음, 원본 이미지에 해당 영역만큼 마스크(하얀색, 검은색 등)를 씌워 해당 영역에서 객체를 삭제하고 다시 검색을 진행하시면 됩니다. 예를 들어 반복문: 템플릿 매칭(검색하려는 이미지, 검색 대상) if 검색에 성공했다면: 검색하려는 이미지 = 검색한 대상을 덮어씌운(삭제한) 이미지 else: # 더이상 발견하지 못했다면 종료 다음과 같은 형태로 구현할 수 있습니다. 위와 같은 방식으로 적용하신 코드를 구현하셨다면, 간단히 피드백 드리도록 하겠습니다. 감사합니다. 윤대희 드림
- 0
- 4
- 424
질문&답변
코너검출 일정 부분검출이 가능한 것인가요?
안녕하세요. 이현우님 윤대희입니다. 특정 문양이나 숫자와 같은 의미가 있는 데이터의 경우 코너 검출이나 윤곽선 검출로는 어려울 수 있습니다. OpenCV에서는 다음과 같은 함수로 검출이 가능합니다. 1. ORB (Oriented FAST and Rotated BRIEF) 2. SIFT (Scale-Invariant Feature Transform) 3. Template matching 4. 머신러닝/덥러닝 활용 - Support Vector Machine - Darknet You only look once (YOLO) 5. 텐서플로, 파이토치를 활용하여 Object Detection Model 학습 주로 위와 같은 방법을 활용하여 객체 검출을 진행합니다. 특정 크기라는 것이 주 키포인트라면, 윤곽선의 면적을 계산하는 방법이 있습니다. cv.ContourArea 메서드입니다.
- 0
- 4
- 424
질문&답변
동작 에러관련 문의
안녕하세요. 윤대희입니다. DllNotFoundException 오류가 발생한 것으로 보아, 설치가 제대로 진행되지 않은 것 같습니다. 설치를 다시 진행해보시고, 카메라가 아닌 imread를 통해 이미지를 먼저 불러와보시기 바랍니다. 만약, 이미지 제대로 불러와지는데 카메라만 인식이 되지 않는다면, 장치관리자에서 카메라를 제대로 인식하고 있는지 확인 부탁드립니다. 설치 방법은 동영상 강의나 다음 링크의 설치 안내 방법을 통해 진행해보시기 바랍니다. https://076923.github.io/posts/C-opencv-1/ 감사합니다. - 윤대희 드림
- 0
- 1
- 266