no image
[OpenCV] Image Denoising
Image Denoising 영상처리 분야에서 중요한 부분이며 가장 많이 쓰이게 되는 부분중 하나로 이미지 노이즈 제거를 뽑을 수 있겠다. 이미 opencv에 이미지 노이즈를 제거하는 많은 알고리즘들과 함수들이 존재한다. 그 중 알아볼 것은 Non-local means Denoising 알고리즘이다. 이 전에 나왔던 기술들인 Gaussian blurring, Median Blurring 등과 같은 많은 이미지 평활화 기법을 보았으며, 노이즈가 조금 있는 영상에 대해 어느정도 효과를 보일 수 있었다. 또한 이러한 기능에서 각 픽셀 주변 작은 이웃 화소를 통해 중심요소를 대체해버리는 등 가우시안 기법, 평균, 중앙값 등을 이용한 연산을 수행해 왔다. 즉, 픽셀에서 노이즈 제거는 그 근처에 국한되었다는 것이다..
2017.02.16
no image
[OpenCV] Bilateral Filter 적용하기
Bilateral Filter OpenCV에서 대표적인 필터로는 blur, GaussianBlur, medianBlur 그리고 BilateralFilter 가 있다. 이 필터는 선형으로 처리되지 않고, 엣지와 노이즈를 줄여주어 부드러운 영상이 만들어지게 된다. 변수의 값이 크면 클수록 픽셀에 미치는 영향이 많아져 가중치가 커지게 된다. bilateralFilter(src, dst, d, sigmaColor, sigmaSpace); src : 입력 이미지 dst : 출력 이미지 d : 필터링에 이용하는 이웃한 픽셀의 지름을 정의 불가능한경우 sigmaspace 를 사용 sigmaColor : 컬러공간의 시그마공간 정의, 클수록 이웃한 픽셀과 기준색상의 영향이 커진다 sigmaSpace : 시그마 필터를 조..
2017.02.15
no image
[OpenCV] SimpleBlobDetector 을 이용한 Blob Detection
OpenCV에 내장되어있는 SimpleBlobDetector() 이용하여 간단한 Blob Detection을 수행해 보았다. 이 클래스는 features2d.hpp 에 내장되어있다. 그리고 Params 변수를 조절하여 원하는 값을 넣을 수 있고, 그 값으로는 다음과 같다. 자세한 사항은 레퍼러스를 참조해 보도록 한다. By color. This filter compares the intensity of a binary image at the center of a blob to blobColor. If they differ, the blob is filtered out. Use blobColor = 0 to extract dark blobs and blobColor = 255 to extract light..
2017.02.08
no image
[OpenCV] pyrMeanShiftFiltering 적용하여 영상분할
pyrMeanShiftFiltering에 의한 피라미드 기반 영상 분할 (color segmentation) 피라미드(Pyrimid) 영상 일단 이 함수를 영상에 적용시키기에 앞서 피라미드 기반 영상분할에 대하여 알아야 한다. 피라미드 생성은 각각 축소와 확대로 나타난다. pyrDown 함수 같은 경우 오리지널 영상에 가우시안 필터링을 한 후, 결과영상 사이즈를 축소한다. 보통 디폴트 값은 가로, 세로 각각을 1/2배 크기로 축소하는 것을 적용한다. 즉 Size((src.cols+1)/2, (src.rows+1)/2)가 된다. pyrUp 함수는 마찬가지로 영상에 가우시안 필터링을 적용하여 주어진 크기로 결과영상을 확대하게 된다. 디폴트는 가로, 세로 각각 2배 크기로 확대하게 된다. 즉 Size(src...
2017.01.17
no image
[OpenCV] MOG2 함수를 이용한 배경추출
안녕하세요 오랜만에 티스토리 포스팅을 해요. 포스팅을 하는 주된 목적이 하루 또는 일주일 동안 공부한 내용을 정리하는 목적 그리고 공유하는 목적으로 썼었는데 요 며칠간 공부만하느라고, 정리를 못했네요. 정리를 안하니 머리에 남는 것도 없고 다시 정리를 하자는 마음으로 포스팅을 오랜만에 해요. 배경추출 알고리즘을 찾던 도중 OpenCV에 내장되어있는 MOG2 함수를 써보게 되었어요. OpenCV 3.1 도큐멘트에 있는 내용을 참고하여 작성하였습니다. MOG2의 기본 원리는 다음과 같습니다. 현재 프레임(currentframe)과 객체를 추출하기 위한 배경 모델(background model)의 차영상(substraction)을 구하여 Thresholding을 하여 foreground mask를 구하는 것입..
2017.01.17
no image
[OpenCV] 간단한 웹캠 영상 띄우기 및 CANNY EDGE
소스코드 (OpenCV 3.0 버전) if(frame_valid) 부분의 try 문에 처리하고자 하는 영상처리 소스를 입력하면 된다. #include "opencv/cv.h" #include "opencv/highgui.h" #include "opencv2/opencv.hpp" #include using namespace cv; using namespace std; int main(int argc, char *argv[]){ VideoCapture capture(0); if (!capture.isOpened()){ cerr frame; } catch (Exception& e){ cerr
2017.01.17
no image
[MFC] 3. MFC 프로그램 기본 구조 및 MFC 기초 클래스
정말 오랜만에 다시 꺼내든 MFC 윈도우 프로그래밍 책, 다시 여유시간이 생겨 공부해보려고 한다. 지난번에는 SDK 프로그램 기본구조에 대해서 살펴보았는데 이번엔 그와 비슷한 MFC 프로그램 기본 구조를 살펴보려고 한다. SDK 기본 구조의 골격은 다음과 같다. 1. 윈도우 클래스를 정의(초기화)하고 운영체제에 등록한다.2. 윈도우를 생성하고 화면에 보이게 한다.3. 메시지 루프를 구동한다.4. 윈도우 프로시저에서 메시지를 처리한다. 그와 비슷한 MFC 기본 구조의 골격은 다음과 같다. 1. 응용 프로그램 클래스를 정의한다.2. 메인(프레임) 윈도우 클래스를 정의한다.3. 응용 프로그램 객체를 선언한다.4. 메시지 맵을 선언한다. MFC 응용 프로그램을 개발 할 때는 일반적으로 AppWizard를 이용하..
2017.01.02
no image
OpenCV contrib 설치 및 Cmake
참고자료 1 : http://m.blog.naver.com/imsujin91/220596347249참고자료 2 : http://kimjuyoung.blogspot.kr/2015/11/window-opencvcontrib-master-install.html참고자료 3 : https://github.com/opencv/opencv_contrib참고자료 4 : http://dongjinlee.tistory.com/entry/%ED%8D%BC%EC%98%B4-OpenCV-ExtraModules%EC%9D%84-windows-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-%EC%84%A4%EC%B9%98%EB%B2%95참고자료 5 : http://neodreamer-dev.tistory.com..
2016.11.14
no image
[MFC] 2. 윈도우 프로그래밍 및 SDK 프로그램 기초
1. 윈도우 프로그래밍 개요 윈도우 프로그래밍이란 윈도우 운영체제에서 구동되는 응용 프로그램을 만드는 것이다. 따라서 윈도우 운영체제의 특징을 알아야 한다. 기존에 운영되었던 DOS와 같은 텍스트 기반 운영체제에 비해 WINDOW와 같은 그래픽 기반 운영체제가 훨씬 보기 편한게 사실이다. 이러한 프로그램을 만들기 위해서 메세지 구동 구조에 대해 알아야한다. 윈도우 운영체제에서 실행되는 대부분의 응용 프로그램은 메세지 구동 구조(Message-Driven Architecture)로 동작한다. 메세지는 운영체제가 프로그램의 외부 또는 내부에 변화가 발생했음을 해당 프로그램에 알리기 위한 개념이다. 하지만 대부분의 윈도우 응용 프로그램은 순차적으로 실행되지 않고 어떤 메세지를 받는가에 따라 코드의 실행 순서가..
2016.11.12
OpenCV 설치 시 에러 LNK1112
error LNK1112: module machine type 'x64' conflicts with target machine type 'X86' 위와 같은 오류 발생 시 아래와 같은 방법으로 해결 할 수 있었다. 나같은 경우 OpenCV 3.1.0 버전을 설치하는 과정에서 오류가 나서 2번 방법으로 해결할 수 있었다. I wrote a blog entry about this, as I encountered this maddening problem, and finally yanked my system back into working order.These are the things to check, in this order:Check your properties options in your linker s..
2016.11.12
no image
[MFC] 1. MFC 기본 및 프로젝트 생성
실행환경 : Visual Studio 2013, Windows 32........ 영상처리 프로그램을 개발하는 데 있어서 가장 기본적인... 가장 기본적인 MFC 프로그래밍이 필요할 때가 와서 드디어 배워보려고 마음을 먹었다. 원래 프로그램을 짤 때 Qt 를 이용하여 작성하였었는데, 내가 생각하기엔 MFC를 먼저 배우고 Qt를 더 배우는게 낫지 않을까 싶다. 현업에서도 Qt 보다는 MFC를 많이 쓰는 실정이니깐... DC 관리를 하라고 꾸지람을 들은게 1년 정도 지난 것 같은데 이제서야 배우게 되서 조금 부끄럽기도 하지만 11월 한달 간 열심히 배워봐야겠다. 일단 MFC 프로그래밍은 Microsoft foundation classes 의 약자라고 내가 참고하는 블로그 관리자가 친절히 알려주었다. MFC는..
2016.10.31
no image
OpenCV 직선 그리기, 사각형 그리기, 직선 클리핑
이제 지겨운 OpenCV 자료형 공부는 끝내고 그나마 재미있는(?) 직선그리기, 사각형그리기, 직선 클리핑을 해보겠다. 직선, 사각형을 그리고 직선 클리핑을 할 수 있는 함수에 대해서 소개하도록 하겠다. 직선 그리는 함수 line()void line(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0);차례대로, 영상Mat, 좌표점1, 좌표점2, 색상, 두께, 타입(CV_AA 이면 안티에일리징 라인), 좌표 시프트연산을 한 결과를 나타낸다. 사각형 그리는 함수 rectanglevoid rectangle(Mat& img, Point pt1, Point pt2, const Scalar&..
2016.08.13