검색결과 리스트
글
OpenCV 핸드북 (cheatsheet)
제가 개인적 참고용으로 만든 opencv 함수들 사용법 목록입니다. 간단한 함수라 하더라도 함수이름이나 사용법이 잘 기억나지 않을 때가 종종 있습니다. 한 부 출력해 놓고 이럴 때 보면 꽤 유용합니다.
1. 이미지 읽기 & 저장
2. 이미지 생성, 복사, 형변환, 색상변환, roi 설정
3. 행렬 원소접근 및 생성초기화
4. 영상 크기변경 및 상하좌우 반전
5. 이미지에 그리기 (drawing)
6. 이미지 디스플레이하기 (display)
7. 웹캠 연결하기
8. avi 비디오 파일 읽어오기
9. avi 비디오 녹화하기
10. 창에 Trackbar 붙이기
1. 이미지 읽기 & 저장
Mat img_color = imread("sample.jpg"); // color load
Mat img_gray = imread("sample.jpg", 0); // gray load
Mat img_16bit = imread("sample.jpg", cv::IMREAD_ANYDEPTH); // 원본 depth로 읽기
imwrite("fname.jpg", img);
2. 이미지 생성, 복사, 형변환, 색상변환, roi 설정
int w = 320;// width
int h = 240;// height
// 생성
Mat img(h,w,CV_8UC1);//1채널 unsigned char
Mat img(h,w,CV_8UC3);//3채널 unsigned char
Mat img = Mat::zeros(h,w,CV_32FC1);//1채널 float
Mat img = Mat::ones(h,w,CV_64FC3);//3채널 double
unsigned char * img_buffer;// 이미지버퍼 포인터
Mat img(h, w, CV_8UC3, img_buffer);//메모리 공유
// 타입 만들기
CV_MAKETYPE(CV_32F, 3); // CV_32FC3
// 원소 초기화
Mat img(h,w,CV_8UC1);
img = Scalar(3); // img 모든 원소값 3으로 초기화
// 참조, 복사
Mat img2 = img; // 메모리 공유
Mat img2 = img.clone(); // 별도 메모리
Mat img2; img.copyTo(img2);//별도 메모리
// 형변환 복사
Mat img1(h,w,CV_32FC1);
Mat img2;
img1.convertTo(img2, CV_8U);
// gray-color 변환
cvtColor(color, gray, CV_BGR2GRAY);
cvtColor(gray, color, CV_GRAY2BGR);
// roi 설정
Rect roi;
Mat sub_img = img(roi);//메모리공유
Mat sub_img = img(roi).clone();//별도메모리
3. 행렬 원소접근 및 생성초기화
Mat A = (Mat_<int>(3,1) << 1, 2, 3);
Mat B = (Mat_<double>(3,2) << 1, 1, 2, 2, 3, 3); // 첫 번째 행부터 채워짐
A.at<int>(2,0) = 3; // .at<type>(y, x)
B.at<double>(2,1) = -0.1;
Mat C(h, w, CV_8UC3);
C.at<Vec3b>(y, x)[0]; // blue
C.at<Vec3b>(y, x)[1]; // green
C.at<Vec3b>(y, x)[2]; // red
4. 영상 크기변경 및 상하좌우 반전
// 크기 변경
Mat dst;
resize(img, dst, Size(new_w,new_h));
resize(img, dst, Size(), 0.5, 0.5);//scalex, scaley
// 영상 반전(flip)
flip(img, dst, 0);// vertical flip
flip(img, dst, 1);// horizontal flip
flip(img, dst, -1);// vertial & horizontal flip
5. 이미지에 그리기 (drawing)
Rect rc(x,y,w,h);
Scalar color(B,G,R);
int thickness=1; // line thickness
line(img, Point(x1,y1), Point(x2,y2), color, thickness);
rectangle(img, rc, color, thickness);
rectangle(img, rc.tl(), rc.br(), color, thickness);
rectangle(img, rc, color, CV_FILLED); // filled rectangle
Point center(rc.x+rc.width/2, rc.y+rc.height/2);
Size radius(rc.width/2, rc.height/2);
double rot_deg = 0; // rotation of ellipse
double s_deg = 0; // start angle of arc
double e_deg = 360; // end angle of arc
ellipse(img,center,radius,rot_deg,s_deg,e_deg,color,thickness);
ellipse(img,center,radius,rot_deg,s_deg,e_deg,color,CV_FILLED);
int circle_radius = 10;
circle(img, center, circle_radius, color, thickness);
circle(img, center, circle_radius, color, CV_FILLED);
putText(img, "text", Point(x,y), FONT_HERSHEY_SIMPLEX, 1., color, thickness);
putText(img, "text", Point(x,y), FONT_HERSHEY_DUPLEX, 1., color, thickness);
6. 이미지 디스플레이하기 (display)
namedWindow("name"); // auto resized
namedWindow("name",CV_WINDOW_NORMAL); // manual resize
imshow("name", img);
char ch = waitKey(); // 무한 대기
char ch = waitKey(10); // 10 msec 대기
if(ch == 27) ... // ESC key
if(ch == 32) ... // SPACE key
destroyWindow("name");
destroyAllWindows();
7. 웹캠 연결하기
VideoCapture vc(0);
if (!vc.isOpened()) return; // 연결실패
vc.set(CV_CAP_PROP_FRAME_WIDTH, 640);
vc.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
Mat img;
while(1){
vc >> img;
if(img.empty()) break;
imshow("cam",img);
if(waitKey(10)==27) break; //ESC
}
destroyAllWindows();
8. avi 비디오 파일 읽어오기
VideoCapture vc("sample.avi");
if (!vc.isOpened()) return; // 불러오기 실패
Mat img;
while(1){
vc >> img;
if(img.empty()) break;
imshow("video",img);
if(waitKey(10)==27) break; //ESC
}
destroyAllWindows();
9. avi 비디오 녹화하기
double fps = 15;
int fourcc = CV_FOURCC('X','V','I','D'); // codec (opencv3.0이하)
int fourcc = VideoWriter::fourcc('X','V','I','D'); // opencv3.0이상
bool isColor = true;
VideoWriter *video = new VideoWriter;
if(!video->open("result.avi", fourcc, fps, Size(img_w, img_h), isColor)){
delete video;
return;
}
Mat img;
while(1){
// ...
*video << img;
// ...
}
delete video;
※ 코덱 목록: http://www.fourcc.org/codecs.php
10. 창에 Trackbar 붙이기
int threshold = 10;
cv::namedWindow("display");
cv::createTrackbar("thr:", "display", &threshold, 1000);
11. 다운로드
참고로 영상처리 라이브러리인 OpenCV 공식 홈페이지에서 제공하는 cheatsheet라는게 있습니다. opencv 함수 사용법을 요약해 놓은 2페이지짜리 pdf 파일입니다.
- opencv cheatsheet 링크: opencv_cheatsheet.pdf
- opencv 홈페이지: http://opencv.willowgarage.com/wiki/
- opencv online reference 메뉴얼: http://docs.opencv.org/
by 다크 프로그래머
'프로그래밍 > opencv' 카테고리의 다른 글
OpenCV를 정적 라이브러리(static library)로 사용한 c++ 배포용 프로그램 만들기 (100) | 2013.03.28 |
---|---|
OpenCV 마우스 이벤트 처리하기 (9) | 2013.02.14 |
OpenCV 편하게 사용하기 (팁) (26) | 2013.02.13 |