본문 바로가기
Open CV

[OPENCV-C++ ] visual studio 환경에서 세팅하기

by TYB 2023. 11. 3.
반응형

image watch 라는 플러그인이 있음. 이미지가 바뀌는걸 쉽게 볼 수 있음.

https://marketplace.visualstudio.com/items?itemName=VisualCPPTeam.ImageWatchForVisualStudio2022

 

visual studio 닫고 다운로드 진행

다운 끝나면 다시 visual studio 열어서

 

설치 잘 됬는지 확인하고 열어줌

opencv를 설치해줘야 사용이 가능함. 사용할라면 여기에 opencv 포팅해줘야함. 디버깅 할 때 사용하는게 image watch

이제 opencv를 깔아보자. https://opencv.org/ →library→release

 

우리는 window버전을 받아서 exe파일을 사용해야한다..!

exe로 압축풀고 build에 해당하는 정보가 포함되어 있느것을 확인할 수 있다. 실행할때 사용할 bin→dll들과 include→lib들이 들어있다.

우리가 진행중인 sln폴더에 opencv라는 thirdparty폴더를 만들고 안에 아까 받은 opencv 폴더를 넣어준다.

 

 

 

프로젝트→속성 →일반→ 출력 디렉터리→ $(SolutionDir)$Build\$(Platform)

 

solutiondir= D:\woochangmin\C++\src\_AI\VisionAPP이고 그 아래에

\Build가 만들어지고 그 아래에 \x64로 해주고

여기까지 했으면 하나 더 해야 되는데 대상이

디버그와 릴리즈를 구분하기 위해서 디버그일때는 뒤에 d를 붙여주고싶다.

 

디버그 출력 디렉터리 설정

 

opencv는 디버그와 릴리즈가 performance차이가 좀 나서 테스트는 디버그에서 성능확인은 릴리즈에서 해줘야됨.

 

 

릴리즈 출력 디렉터리 설정

 

 

릴리즈로 바꾸고 출력디렉터리 변경

실행한 번 하면 폴더안에 $build파일이 생긴다.

 

 

 

 

기존 코드들이 이렇게 되있으면

디버그와 릴리즈 바꿔가면서 소스파일 속성에서 빌드에서 제외해줘야됨.
프로젝트→속성→C/C++→언어→언어표준을 ISO C++20 표준(/std:c++20)로 변경

 

라이브러리 상대경로: ..\thirdparty\opencv-4.8.0_wnd\build\include

 

상대경로로 해야한다. 절대경로로 하면 다른 사람에게 줄때 경로가 꼬여서 error난다. 디버그도 해주고 릴리즈도 해줘야됨

 

링커 라이브러리 추가 ..\thirdparty\opencv-4.8.0_wnd\build\x64\vc16\lib

마찬가지로 디버그도 해주고 릴리즈도 해줘야된다

 

아까 세팅한 설정들은 proj 기준으로 위쪽에 있는 cpp,h파일들은 모두 적용된다

 

프로젝트 속성→C/C++→링커→입력→추가종속성 추가(..\thirdparty\opencv-4.8.0_wnd\build\x64\vc16\lib안에 lib파일 2개)를 해야하지만 이런식으로 추가하면 프로젝트 추가할때마다 계속 추가해줘야됨. 그래서 헤더파일 하나 만들어서 사용할 헤더파일들 다 복사해서 넣어줌 넣어야 할 파일은 아래에 있다.

 

 

 

 

 

//Common.h
#pragma once

#include <string>
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <memory>
#include <fstream> // ofstream header
#include <format>

#define OPENCV_480
#include <opencv2/opencv.hpp>
#include <opencv2/core/ocl.hpp>
#ifdef OPENCV_480
#include <opencv2/highgui/highgui_c.h>
#include <opencv2/imgproc/imgproc_c.h>
#include <opencv2/imgproc/types_c.h>
#endif // OPENCV_480

#ifdef _DEBUG//디버그일때는 뭘쓰고 
#pragma comment(lib,"opencv_world480d.lib")//pragma comment는 
#else	//RELEASE//릴리즈일때는 뭘쓰고 
#pragma comment(lib,"opencv_world480.lib")
#endif
using namespace std;
using namespace cv;

 

//03.ISP_Basic.cpp
//image signal processing

#include "Common.h"


int main()
{
	std::string fileName = "../KCCImageNet/stop_img.png";
	cv::Mat src = cv::imread(fileName, cv::ImreadModes::IMREAD_ANYCOLOR);
	return 1;
}

실행시키면 오류 뜨는데

..\thirdparty\opencv-4.8.0_wnd\build\x64\vc16\bin

이거 dll파일들 복사

..\$Build\x64 폴더에 붙여넣고
빌드&rarr;디버그&rarr;보기&rarr;다른창&rarr;image watch 열고

라인을 cv::Mat src = cv::imread(fileName, cv::ImreadModes::IMREAD_ANYCOLOR); 다음 라인으로 넘겨주면 image watch에 이미지가 뜸. 그 이미지 확대해보면 아래에 색깔정보가 나옴.

rgb는 3X UINT8 보면 3채널이고 채널 당 1 바이트씩이라는 뜻임.

 

RGB값을 표현하는거고 아래가 R 가운데가 G 위가 B

만약 flag의 color를 cv::ImreadModes::IMREAD_GRAYSCALE로 바꾼다면 아래처럼나온다.

gray scale은 1X UINT8 보면1채널이고 채널 당 1 바이트씩이라는 뜻임.

반응형