Opencv 픽셀 값 접근하기 - IplImage 데이터 구조
OpenCV의 영상 데이터 구조체인 IplImage는 imageData라는 배열에 영상의 픽셀 정보를 저장한다. IplImage로부터 픽셀 값을 읽어오는 방법은 두가지로 분류된다. 1. 직접 imageData라는 배열에 접근해서 가져오는 방법 2. cvGet* 함수를 이용하는 방법 1. 픽셀에 직접 접근하는 방법 픽셀에 직접 접근하는 경우는 imageData에서 픽셀의 인덱스를 계산하여 값을 얻어온다. 인덱스를 계산할 때는 보통 widthStep을 이용한다. 왜냐하면 IplImage에서 row하나가 저장되는 메모리의 폭을 나타내게된다. 그러나 영상의 폭이 홀수로 끝나는 경우는 영상의 한 row가 저장되는 메모리 폭이 width와 다를 수 있기 때문에 x 좌표가 하나씩 밀리는 현상이 나타날 수 있다. 그렇..
2016.01.05
no image
OpenCV 트랙바 처리된 이진화 영상처리 in C++
트랙바 처리 1. cvCreateTrackbar(const char* trackbar_name, const char* window_name, int* value, int count, CvTrackbarCallback on_change); 이 함수는 지정된 윈도우에 트랙바를 생성해주는 함수이다. 인자 값은 왼쪽부터 차례대로 트랙바 이름, 트랙바를 붙일 윈도우 이름, 트랙바가 생성될 떄 슬라이더의 위치, 트랙바 슬라이더의 최대 위치 값(최소위치 값은 자동으로 0), 슬라이더가 변경될 때마다 자동 호출되는 핸들러 함수 로 이루어진다. 2. void on_change(int pos); 이 함수는 트랙바 슬라이더가 변경될 때 마다 자동 호출되며, pos는 트랙바의 슬라이더 위치이다. 3. int cvGetTrac..
2016.01.05
no image
OpenCV에서 IplImage와 Mat의 차이 그리고 호환
OpenCV에서 IplImage와 Mat 구조체의 차이와 호환 C++에서는 IplImage(ex Imread)를 사용하고 C에서는 Mat 구조체(ex CvLoadImage)를 사용한다. 둘의 차이가 궁금해서 구글링해보니 스택오버플로우에서는 아래와 같은 답변을 해주었다. 결론은 C++를 사용하자는 것.. 필요에 따라 C가 필요할 수 있겠지만 그때는 호환해서 사용함이 좋겠다. 스택오버플로우 답변 : http://stackoverflow.com/questions/11115272/cvmat-and-imread-vs-ipimage-and-cvloadimage 그리고 IplImage가 OpenCV1에서 부터 사용되어왔기 때문에 예제나 소스코드가 구글에 널린건 다 알려진 사실이다. IplImage는 C언어를 쓰던 시..
2016.01.05
no image
OpenCV 히스토그램 그리기 in C++
영상처리에서 히스토그램은 필수적이다. 히스토그램은 영상의 중요한 정보를 담은 자료이며, 영상의 명암값 프로필을 보여주기 위해 사용되는 도구이다. 히스토그램은 영상의 명암도 분포 상태를 나타내는 좋은 지표이다. 히스토그램은 0부터 255까지 명암값을 가로축 인덱스로 하고, 영상을 구성하고 있는 각 화소의 명암값에 해당하는 개수를 빈도수로 간주하여 세로축에 표시하는 것이다. 다음은 C++ 로 구현된 히스토그램의 예제 코드이다. #include #include #include #include #include using namespace cv; class Histogram1D{ private: int histSize[1]; // 히스토그램 빈도수 float hranges[2]; // 히스토그램 최소/최대 화소값..
2016.01.05
no image
64bit 환경에서 Opencv 3.0 설치 시 에러
64bit 환경에서 OpenCV 3.0 설치 후 run 할 때 에러 해결 법 1. 컴퓨터 사양이 64bit라고 하더라도 링크 빌드 설정은 컴파일러 버전에 따라 x86으로 해준다.(저는 컴파일러가 32비트 기준이였어요) 컴퓨터 사양이 32비트인지 64비트인지에 따라 다르게 설정해야 할 것 같지만 전혀 아니다.자신의 컴파일러에 따라 x86이나 x64로 설정해주어야한다.근데 보통은 x86을 사용한다. 위 사진은 잘못된 설정의 예시이다. x64로 설정하라는 설치법 보고 실행해보니계속 에러가 떠서 개고생했다. 2. 응용프로그램 0xb000007b 시작할 수 없다는 오류C:\opencv\build\x86\vc12\bin에서 모든 dll 파일을C:\Windows\SysWOW64 으로 복사해준다. 3. 컴퓨터에 ope..
2016.01.01
no image
lnk2019 외부 기호 참조 위치 함수 에서 확인 하지 못했습니다
위와 같이 이러한 에러가 날 때 Error1error LNK2019: unresolved external symbol _cvCreateImage referenced in function _mainError2error LNK2019: unresolved external symbol _cvReleaseImage referenced in function _mainError3error LNK2019: unresolved external symbol _cvGetSize referenced in function _mainError8error LNK2019: unresolved external symbol _cvRetrieveFrame referenced in function _mainError9error LNK20..
2016.01.01
no image
윤곽(contour) 추출과 에지(edge) 추출
소스코드 #include #include #define Width780 #define Height1024 struct stMap{ unsigned char r; unsigned char g; unsigned char b; } Map[Height][Width]; void Img2Aray(IplImage* img) { for (int i = 0; iheight; i++){ for (int j = 0; jwidth; j++){ Map[i][j].r = img->imageData[i*img->widthStep + j*img->nChannels + 2]; Map[i][j].g = img->imageData[i*img->widthStep + j*img->nChannels + 1]; Map[i][j].b = img-..
2015.12.29
no image
Threshold함수를 이용한 간단한 영상 이진화
소스코드 #include #include void main(){ int i, threshold = 128; IplImage* image = 0; IplImage* output = 0; IplImage* gray = 0; CvCapture* capture = cvCaptureFromCAM(0); cvNamedWindow("original", 0); cvNamedWindow("Thresh_binary",0); cvCreateTrackbar("T", "seohee-camera", &threshold, 255, NULL); while (1){ cvGrabFrame(capture); image = cvRetrieveFrame(capture); cvShowImage("original", image); if (!ou..
2015.12.29
no image
OpenCV 자료구조
2.1 CvPoint, CvScalar, CvSize, CvRect CvPoint 영상을 행렬형태의 2차원 화소들의 집합으로 생각할 수 있는데 OpenCV는 각 화소 또는 2차원 점의 좌표를 표현하기 위해 CvPoint, CvPoint2D32f, CvPoint2D64f 등의 구조체를 사용한다. (각 int형 2D 화소 위치, float형 2D 화소 위치, double형 2D 화소 위치를 뜻함) CvScalar 화소의 밝기 값 또는 컬러 값 표현을 위해 존재하는 함수이다. 이 함수는 4개의 인수(val0, val1, val2, val3)를 가지며, val0은 반드시 가져야하고, 나머지는 지정하지 않을 경우 0으로 간주된다. ScalarAll 함수는 하나의 인수 val0123을 입력받아 배열 val에 동일한..
2015.12.29
no image
Visual Studio 2013에 OpenCV 3.0 설치하기
설치환경 윈도우 32비트 visual studio 2013 opencv 3.0 1. OpenCV 라이브러리 다운 먼저 아래 링크로 들어가서 opencv 라이브러리를 다운받습니다. http://opencv.org/ 저는 아래 화면과 같이 C:\ 에 opencv를 다운받았습니다. opencv 폴더에 들어가면 build, sources 폴더 두개가 생깁니다. 2. 환경변수 설정 환경변수 설정 중요합니다. 저는 32비트, visual studio 2013을 사용중입니다. 내컴퓨터 - 속성 - 고급시스템 설정 - 환경변수 로 들어가 준 뒤, 아래 칸인 시스템변수에서 Path를 편집해줍니다. 저는 C:\에 opencv 가 존재하므로 경로를 위와 같이 적어주었습니다. 여기서 주의해야할 점은 이미 적혀있는 경로를 건들..
2015.12.28