문서 보기역링크PDF로 내보내기맨 위로 이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요. # OpenCV + Visual Studio ## 설치 OpenCV 윈도우용 다운로드. 홈페이지 : http://opencv.org/ 윈도우용 파일을 다운로드 받고, 압축을 풉니다. 빌드된 파일을 사용합니다. 빌드된 파일의 경로는 /opencv/opencv/build/x86/ 입니다. x64, x86 두가지로, 64비트, 32비트 파일이 있는데, 이 중에서 32비트를 사용합니다. 해당 폴더에는 vc11, vc12 두가지가 있습니다. vc11 은 Visual Studio 2012 vc12 는 Visual Studio 2013 용 입니다. 비주얼 스튜디오 버전에 맞게 사용하시면 됩니다. ## 설정 비주얼 스튜디오를 실행합니다. C++ 프로젝트를 생성합니다. 콘솔로, 빈 프로젝트를 생성합니다. 프로젝트 → 속성 창을 엽니다. ''구성 속성 → C/C++ → 일반 → 추가 포함 디렉터리'' 에 ''opencv/opencv/build/include'' 경로를 추가합니다. ''구성 속성 → 링커 → 일반 → 추가 라이브러리 디렉터리'' 에 ''opencv/opencv/build/x86/vc11/lib'' 경로를 추가합니다. 여기서 x86은 32비트, vc11은 비주얼 스튜디오 2013 버전을 의미합니다. 상황에 맞는 버전을 사용하시면 됩니다. ''구성속성 → 링커 → 일반 → 추가 종속성'' 에 ''opencv_ts300.lib opencv_world300.lib'' 를 추가합니다. 이 예시에서는, opencv 3.0 버전을 사용하였습니다. ## 작성 소스 파일에 main.cpp 파일을 추가합니다. opencv.jpg 라는 이미지 파일을 복사합니다. 코드를 입력하고 실행합니다. <code> #include <opencv\cv.h> #include <opencv\highgui.h> int main(void ) { char* filePath = "C:\\프로젝트경로\\OpenCV\\ConsoleApplication3\\Debug\\opencv.jpg" ; IplImage* image = cvLoadImage(filePath); cvShowImage( "OpenCV", image); cvWaitKey(0); cvReleaseImage(&image); return 0; } </code> # 기본 익히기 ## 사각형 그리기 제공 함수 <sxh cpp> rectangle(image, Point(0,0), Point(w, h), Scalar(0,0,255), -1, 8); </sxh> 포인트 또는, Rect로 위치를 지정하고, Scalar 로 색상을 정의하면 사각형이 생깁니다. 연습으로 비슷하게 구현한 코드입니다. <sxh cpp> void drawRect(Mat* mat, Rect rt, Scalar sc){ //int h = mat->size().height; int w = mat->size().width; int c = mat->channels(); cout << "x, y, width, height " << rt.x <<":"<<rt.y<<":"<<rt.width<<":"<<rt.height<<endl ; for (int i = rt.x ; i < rt.width ; i++){ for (int j= rt.y; j< rt.height; j++){ for (int k=0; k < c; k++){ mat->data[j*w*c+i*c+k] = sc.val[k]; } } } } </sxh> 그냥 3차원 배열로 접근하면 되지 않을까... 하는 생각을 해봅니다.. ## 화면 뒤집기 제공함수는 아래와 같습니다. <sxh cpp> flip(image, image, 0); </sxh> 0 은 상하, 1은 좌우, -1은 상하좌우로 화면을 뒤집습니다. 비슷하게 구현한 코드입니다. <sxh cpp> Mat flipData(Mat mat, int type){ int h = mat.size().height; int w = mat.size().width; int c = mat.channels(); Mat rst; rst.create(Size(w,h),CV_8UC3); for(int i = 0; i<h; i++){ for (int j=0; j < w; j++){ for (int k=0; k <c; k++){ if (type == 0){ rst.data[k+ c*j + c*w*(h-i-1)] = mat.data[k+ c*j + c*w*i]; }else if (type == 1){ rst.data[k+ c*(w-j-1) + c*w*i] = mat.data[k+ c*j + c*w*i]; }else if (type == -1){ rst.data[k+ c*(w-j-1) + c*w*(h-i-1)] = mat.data[k+ c*j + c*w*i]; } } } } return rst; } </sxh> ## 화면 합성 제공 함수 <sxh cpp> addWeighted(mat, 0.5, bg, 0.5, 1, mat, -1); </sxh> alpha 값을 변경하여 합성할 수 있습니다. 연습용 코드 <sxh cpp> Mat composeMat(Mat mat, Mat bg){ int h = mat.size().height; int w = mat.size().width; int c = mat.channels(); Mat rst; rst.create(Size(w,h),CV_8UC3); for (int i =0 ; i < h*w*c; i++){ rst.data[i] = mat.data[i]/2+bg.data[i]/2; } return rst; } </sxh> alpha 적용 없습니다. 그냥, 절반씩 합성합니다. open/opencv-visual-studio.txt 마지막으로 수정됨: 2020/06/02 09:25저자 127.0.0.1