728x90
반응형
트랙바 처리
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 cvGetTrackvarPos(const char* trackbar_name, const char* window_name);
이 함수는 윈도우에서 트랙바의 슬라이더 위치 값을 반환한다.
4. void cvSetTrackbarPos(const char* trackvar name, const char* window name, int pos);
이 함수는 윈도우에서 트랙바의 슬라이더 위치를 pos로 지정한다.
이러한 네가지를 바탕으로 트랙바 처리를 하며, 트랙바 처리를 하여 이진화 한 영상은 다음 소스에 의해 생성된다.
#include<iostream> #include<opencv\cv.h> #include<opencv\highgui.h> void on_change(int th = 0); IplImage *srcImage, *dstImage; // 입력영상과 출력영상을 위한 IplImage int main(){ if ((srcImage = cvLoadImage("lena.png", CV_LOAD_IMAGE_GRAYSCALE)) == NULL){ std::cout << "파일을 열지 못했습니다 ㅠㅠ" << std::endl; return -1; } dstImage = cvCreateImage(cvGetSize(srcImage),IPL_DEPTH_8U,1); cvNamedWindow("srcImage", CV_WINDOW_AUTOSIZE); cvShowImage("srcImage", srcImage); cvNamedWindow("dstImage", CV_WINDOW_AUTOSIZE); cvShowImage("dstImage", dstImage); // 트랙바를 위한 함수를 호출하여 트랙바 초기 위치를 100으로 설정 int th = 100; on_change(th); // 윈도우 ditImage에 T라는 이름을 가진 트랙바를 생성하여 붙임 // 초기 슬라이더의 위치는 &th에 의해 100이고, 최소0(자동) 최대255 // 슬라이더가 변경될 떄 마다 on_change함수가 호출된다 cvCreateTrackbar("T", "dstImage", &th, 255, on_change); cvWaitKey(0); // cvMat을 쓰면 자동으로 메모리 관리를 해서 이런건 안해줘도 됨 // OpenCV 1.0에서 썼던 IplImage를 써서 메모리 관리를 직접 해주어야함 cvDestroyWindow("srcImage"); cvDestroyWindow("dstImage"); cvReleaseImage(&srcImage); cvReleaseImage(&dstImage); } void on_change(int th){ //direct thresholding int x, y, s, r; int nThreshold = th; // 슬라이더의 위치 저장 for (y = 0; y < srcImage->height; y++){ for (x = 0; x < srcImage->width; x++){ // cvRound는 정수형으로 변환할 때 반올림을 함 r = cvRound(cvGetReal2D(srcImage, y, x)); // 입력영상에서 nThreshold(100)보다 큰 값을 갖는 화소는 255 // 그렇지 않는 화소는 0으로 설정함 if (r > nThreshold) s = 255; else s = 0; // 영상포인터인 dstImage에 행(y),열(x) 요소 값에 s(value)값을 저장 cvSetReal2D(dstImage, y, x, s); } } cvShowImage("dstImage",dstImage); }
728x90
반응형
'Programming > OpenCV' 카테고리의 다른 글
OpenCV 픽셀 값 접근하기 - cvMat 데이터 구조 (4) | 2016.01.06 |
---|---|
Opencv 픽셀 값 접근하기 - IplImage 데이터 구조 (0) | 2016.01.05 |
OpenCV에서 IplImage와 Mat의 차이 그리고 호환 (2) | 2016.01.05 |
OpenCV 히스토그램 그리기 in C++ (2) | 2016.01.05 |
64bit 환경에서 Opencv 3.0 설치 시 에러 (2) | 2016.01.01 |