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
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
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
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
OpenCV 기본클래스 (3)
벌써 세번째 Mat 포스팅이다. 기본클래스의 마지막 포스팅이 될 것 같다. 책에 수록되어있는 Mat에 대한 함수들이 너무 많아서, 자주 쓸 것 같고, 자주 쓰이는 것만 다뤄보도록 하겠다 ㅠㅠ 3.3 Mat 행렬 정보 행렬에 대한 정보들은 영상처리 프로그래밍을 할 때 필수적이다. 쭉 훑어보면 좋을 것 같다. 자주 쓰이는 것은 굵은색으로 표시해두었다. - Mat::rows 행의 개수- Mat::cols 열의 개수- Mat::data 행렬 데이터의 포인터- Mat::dims 행렬의 차원(2보다 같거나 크다)- Mat::isContinuous 각 행의 마지막에 공백없이 연속으로 데이터가 저장되었는지를 확인- Mat::total() 행렬 요소의 전체 개수- Mat:: elemSize() 행렬 요소 하나의 바이트 ..
2016.08.13
no image
OpenCV 기본클래스 (2)
OpenCV 기본클래스 두번째 포스팅이다. 첫번째 포스팅 바로가기 클릭 2. Matx Vec, Scalar_, Range, Ptr 클래스 2.1 Matx 클래스 이 클래스는 고정된 작은 크기의 행렬을 위한 템플릿 클래스이다. 1x1에서 6x6 까지 작은 크기의 행렬과 다양한 행렬 연산함수를 제공한다. 예를 들어 Matx33f 자료형은 3x3 의 float 행렬이다. 더욱 더 일반적인 행렬의 형태는 알다시피 Mat 클래스로 변환하여 사용한다. 이 Matx 클래스에서는 '
2016.08.13
no image
OpenCV 기본클래스 (1)
OpenCV를 공부하는데 앞서 제일 기본적인 OpenCV 기본 클래스에 대해서 간단히 정리해보기로 한다. 개발을 하다보면 제일 먼저 클래스가 어떤건지, 어떤식으로 돌아가는건지 기본적인 이해가 있어야 나중에 간단한 오류를 범하지 않게 된다. 책은 가메출판사의 "C++API OpenCV 프로그래밍"을 쓰고 있고, 앞으로 이 폴더에 있는 대부분의 OpenCV 코드나, 내용은 이 책을 기반으로 한다. 내가 생각하기에 현재 나와있는 OpenCV 3.0 기반으로 제일 명확하고 자세하게 잘 나와있는 책이 아닌가싶다. 1. DataType, Point, Point3 클래스 1.1 기본 자료형 및 DataType 클래스 OpenCV는 uchar, bool, char, unsigned short, signed short,..
2016.08.13
OpenCV 응용프로그램을 제대로 시작하지 못했습니다(0xc000007b) 오류 해결법
OpenCV 3.0을 visual studio 2013, windows 10, 64bit 환경에서 설치하다 에러가 났다."응용프로그램을 제대로 시작하지 못했습니다. (0xc000007b)" 라는 오류가 발생했는데 컴파일(ctrl+f7)엔 문제가 없는데 빌드(ctrl+f5)하는 과정에서 에러가 발생했다. 문장 그대로 구글링해보니 해결법이 다섯가지 정도가 있었다.급하면 4번의 방법을 참고해주길 바란다. 1. Dependency Walker 프로그램 사용 이 프로그램을 사용하면 어떤 dll 이 없어서 프로그램 실행이 안되는지 알려준다고 한다.모두 영어로 설명되어있어서 귀찮아서 일단 다운로드 한다음에 최후의 수단으로 보류해 두었다. 2. 자신의 개발툴 컴파일러에 맞게 환경을 설정 프로젝트 - 옵션 에서 설정해야..
2016.08.13
no image
OpenCV Sobel Mask and Prewitt Mask (소벨 마스크와 프리윗 마스크)
정말정말 오랜만에 티스토리 OpenCV 포스팅해요 영상에서 경계선을 검출하는 방법은 영상의 1차 미분 값을 이용하는 방법이 대표적이다. 미분이란 함수의 변화량을 의미한다. 미분을 적용한 그래프는 보통 y값을 고정한 상태에서 x값의 변화에 따른 함수의 변화량을 보여주게된다. (출처 :http://kylog.tistory.com) 사진에서 볼 수 있듯, 이러한 함수의 변화는 경계선 부근에서 나타나는 현상이며, 실제 영상에서는 x값이 증가함에 따라 밝기가 급격하게 증가하는 현상으로 나타나기도 한다. 그러므로 영상에서 경계선을 검출하기 위해서는 영상을 미분한 후, 미분 값이 특정 임계값(Threshold)보다 큰 부분을 찾으면 된다. 참고로, 영상처리에서는 기울기를 그레디언트라고 한다. 그래서 자료를 찾다보면 ..
2016.04.05
no image
OpenCV Adaptive thresholding(적응적 경계화)
OpenCV를 이용한 적응적 경계화 (Adaptive Thresholding) 적분 영상으로 화소 개수 세기 영상 안의 여러 관심 영역을 대상으로 히스토그램 같은 여러 가지를 계산 해야한다고 가정하자, 이런 모든 계산에 드는 비용은 급격히 늘어 날 수 있는데, 이러한 문제점을 해결해 줄 수 있는 것이 바로 적분 영상(Integral Image)이다. 적분 영상은 영상 부분 영역에 걸친 화소를 셀 때의 효율성을 극적으로 개선할 수 있는 도구이다. 또한, 적분영상은 각 화소를 해당 화소로 범위를 정해진 왼쪽 상단 사분면의 내부에 위치한 모든 화소의 합으로 바꿈으로써 적분영상을 얻을 수 있다. 현재 화소의 적분 값은 앞에 설명했던 화소의 적분 값을 더한 현재 줄의 누적 합인 값이기 때문에 한 번만 영상을 조회..
2016.01.18
no image
OpenCV 히스토그램 구현하기
히스토그램 구현하기 영상은 다양한 화소 값으로 이루어져있으며, 영상에 걸친 화소 값 분포는 영상의 중요한 특징을 구성하게된다. 예를 들어, 1채널 그레이레벨 영상에서 각 화소는 0~255 사이의 값을 갖는다. 영상 내용에 따라 영상 내부에 펼처진 그레이 음영의 양이 저마다 다르므로 여기서 히스토그램은 영상에서 특정 값을 갖는 화소 개수를 제공하게되는 단순한 테이블이다. 그레이레벨의 히스토그램은 256개 항목(빈, bin)을 갖게 되며, 빈의 합이 1이 되게끔 히스토그램을 정규화 할 수 도 있다. cv::calcHist 함수를 이용하여 OpenCV를 이용하여 히스토그램을 쉽게 계산 할 수 있다. 다음은 히스토그램을 계산하는 histogram.h 코드이다. /*--------------------------..
2016.01.18
no image
OpenCV 픽셀 값 접근하기 - cvMat 데이터 구조
OpenCV 픽셀 값 접근하기 - cvMat 데이터 구조 저번 OpenCV 픽셀 값 접근하기 - IplImage 데이터구조 포스팅 http://eehoeskrap.tistory.com/33 지난 포스팅에서는 IplImage 데이터 구조에서 픽셀 값에 어떻게 접근하는지에 대해 포스팅하였다. 이번에는 OpenCV cv::Mat 데이터 구조에서 각 픽셀에 어떻게 접근하는지에 대해 살펴보겠다. Gray 흑백 영상의 경우 Image.at(x, y); BGR 컬러 영상의 경우 (RGB 컬러 영상을 뜻함, 보통 화소값 자체에는 BGRBGR..순서로 되어있음을 유의) using namespace cv; Image.at(x, y)[0]; // Blue Image.at(x, y)[1]; // Green Image.at(x..
2016.01.06