open:opencv-visual-studio

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 버전을 의미합니다. 상황에 맞는 버전을 사용하시면 됩니다.

구성속성 → 링커 → 일반 → 추가 종속성opencvts300.lib opencvworld300.lib 를 추가합니다.

이 예시에서는, opencv 3.0 버전을 사용하였습니다.

소스 파일에 main.cpp 파일을 추가합니다. opencv.jpg 라는 이미지 파일을 복사합니다.

코드를 입력하고 실행합니다.

#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;
}

기본 익히기

제공 함수
<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