xcode에서 C++을 이용한 openCV 사용법

 
(이미지출처: 구글링 Link)
 
 
Introduction

  Xcode에서 C/C++언어를 사용하는 방법 및 openCV Library를 사용하는 방법을 확인하고자 합니다. 다른 블로그를 보면서 쉽게 해결이 가능할꺼라 생각했는데, 아래 블로그에 참조된 내용들도 다 따라하고, 이후 기타 해외커뮤니티에서도 진행하는 것들을 해결을 다해보았지만 안되더군요. 그래서 발생한 부분에 대해 문제가 무엇인지 및 해결방법이 어떠한지에 맞춰서 찾다보니, 결국 해결하였습니다. (오늘 안되면 그냥 포기하려고 했는데 말이죠…)
해결된 덕분에 다시 포스팅을 위해 캡쳐를 진행해야할 것 같네요…^^;; 문의사항은 블로그 댓글로 남겨주세요
 
  • 참고: 아래 내용에 대한 요약은 포스팅의 젤 마지막 부분에 정리해두었습니다. 

 

 

# Homebrew 설치 

MacOS에서 openCV를 먼저 설치하기위해서는 homebrew 및 git이 설치되어 있어야 합니다.  먼저 Homebrew의 경우는 아래의 홈페이지에 접속하면 설치하는 명령어가 있습니다. 
 
  • Terminal 실행
  • 명령문 입력
 
위의 명령문을 수행하면 다음은 git 을 설치해주시기 바랍니다. (향후 계속 사용하기 때문에 미리 설치합니다.)
 
 
# Install the git

 
Git 은 홈페이지를 접속하여 패키지파일을 다운 받아 설치를 해도 됩니다. 하지만, homebrew를 설치를 하였기때문에 아래의 명령문을 터미널에서 실행하면 자동으로 간단히 설치됩니다. 
 
  • brew install git
 

 

 

# Install openCV

 
이제 MacOS에서 영상처리를 사용하기위해 openCV를 설치하는 방법을 알아보도록 하겠습니다. openCV 경우도 brew에서 명령문을 수행하여 설치가 가능합니다. 명령문은 아래와 같습니다. 
 
  • brew install opencv
    • 상위 명령 수행시, 현재 release된 최신 버전을 설치합니다. 
  • 참고사항
    • 이전 버전을 설치할 때는 아래의 명령문 입력
    • Brew install opencv@3 (3.x.x version 의 최신버전이 설치됨)
    • Brew install opencv@4 (이 명령어도 수행가능)
명령문을 수행하면 다음과 같은 화면이 나옵니다. 
(설치 진행중) 시간이 다소 걸리니, 다른 작업을 하면서 끝나기를 확인하시면 됩니다. 
위와 같은 화면이 나오면, 정상적으로 설치가 완료되었습니다. 
 
 

 

 

  • pkg-config 설치
    • brew install pkg-config
 
다른 블로그를 살펴보니, 링크 플래그 라는 용어로 되어있는데, Windows 환경에서만 익숙하다보니, 용어가 조금 익숙하지는 않네요. linux기반과 동일하지만, 개념은  향후 Project에 추가하기 위해 openCV Library의 Lib files의 이름 리스트를 출력한다고 보시면 됩니다. 
 
링크 플래그 추출을 위해서 아래의 명령문 수행이 가능합니다. 여러가지 방법으로 가능하니, 상황에 맞춰서 적절히 사용하시면 됩니다. 
 
  • 링크 플래그 추출
    • pkg-config --cflags --libs /usr/local/Cellar/opencv/4.4.0/lib/pkgconfig/opencv4.pc
    • pkg-config  --flags --libs opencv 
    • pkg-config  --flags --libs opencv4 (버전에 따라 명령이 다름)
  • 참고
    • pkg-config --cflags --libs /usr/local/Cellar/opencv@3/3.4.10_4/lib/pkgconfig/opencv.pc. (하위버전)
 
위의 명령문 아래 출력된 library path/name는 이후 Xcode에 입력을 해야하니, 터미널 창을 닫지말고, Xcode를 실행합니다. 
 
Project 선택시, Command Line Tool 선택합니다. 
 
Xcode를 실행하여 Project를 생성합니다. 이때, Language는 C/C++로 선택하시기 바랍니다. 
 
프로젝트를 생성하면 위와 같이 나옵니다. (기본적인 iOS project와 다릅니다.)
 
 
  • 위의 화면에서 Header search paths 검색 후 아래 path 추가 
 
 
  • Header Search Paths
    • /usr/local/Cellar/opencv/4.4.0/include/opencv4
 
 
이후, 아래에 있는 Library Search Paths에 아래의 path를 추가합니다. 
  • Library Search Paths
    • /usr/local/Cellar/opencv/4.4.0/lib
 
 
  • Other Linker Flags 검색 후 터미널에 마지막으로 뜬 path를 복사해서 붙여 넣기 함
    • -I/usr/local/Cellar/opencv/4.4.0/include/opencv4 -L/usr/local/Cellar/opencv/4.4.0/lib -lopencv_gapi -lopencv_stitching -lopencv_alphamat -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_highgui -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_sfm -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_videostab -lopencv_videoio -lopencv_viz -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core
 
위와 같이 정렬되어 보이게 됩니다. 
 

 

 

 
main.cpp files

 
이제 Xcode(C++)환경에서 openCV Library를 사용하기위해, Main.cpp 파일에 아래의 내용을 입력합니다. 
#include <iostream>
#include <opencv2/opencv.hpp>
//#include <opencv4/opencv2/opencv.hpp>
using namespace std;
using namespace cv;

int main(int argc, const char * argv[]) {
   cout << "OpenCV version : " << CV_VERSION << endl;
   cout << "Major version: " << CV_MAJOR_VERSION << endl;
   cout << "Minor version: " << CV_MINOR_VERSION << endl;
   cout << "Subminor version: " << CV_SUBMINOR_VERSION << endl;
   return 0;
}
 
 
 
여기서 아래와 같은 오류가 발생 후, 해결하는데 3일정도 걸렸습니다. 아래와 같은 동일한 오류가 뜨는 분들은 다음과 같이 해결을 하시면 됩니다. 
 
#오류
  •  

    _abort_with_payload
  • Did: Library not loaded:
 
위와 같은 오류는 Library를 찾지 못해서 발생하는 오류인데, 해결방안은 간단하였습니다. 기타 다른 방법도 있는 것 같지만, 아래의 방법만 캡쳐하여 공유드립니다. 다른분들에게도 도움이 되셨으면 합니다. 
 

 

 

 

 
#해결방안
Targets > Signing & Capabilities > Hardened Runtime 항목에서 Disable Library Validation 선택 합니다. 
 
 
#실행결과
 
 
  • 참고
    • 빌드를 하고, 시간이 조금 걸린 후 콘솔로 출력이 됩니다. 
    • (2012 mid macbook air 사용중이라, 속도가 다를수도…) 맥북 지원 환영합니다. !!
 
 
 
요약

 
  본 블로그 내용 이해는 되는데, 명령문만 따로 보고 싶은 경우가 있어, 아래와 같이 추가요약본을 남깁니다. 내용을 모르실 경우, 본 블로그 포스팅을 다시 천천히 읽어보시기 바랍니니다. 블로그 퍼가실 때는 꼭 출처(http://vbflash.net) 남겨주시기 바랍니다. 
 
  • Homebrew 설치
  • Git 설치 (필요에 따라 설치 할 것)
    • brew install git
  • openCV 설치
    • Brew install opencv
    • 이전 버전을 설치할 때는 아래의 명령문 입력
    • Brew install opencv@3 (3.x.x version 의 최신버전이 설치됨)
    • Brew install opencv@4 (이 명령어도 수행가능)
  • pkg-config 설치
    • brew install pkg-config
  • 링크 플래그 추출
    • pkg-config --cflags --libs /usr/local/Cellar/opencv/4.4.0/lib/pkgconfig/opencv4.pc
    • pkg-config  --flags --libs opencv 
    • pkg-config  --flags --libs opencv4 (버전에 따라 명령이 다름)
    • pkg-config --cflags --libs /usr/local/Cellar/opencv@3/3.4.10_4/lib/pkgconfig/opencv.pc. (하위버전)
  • Xcode Project 생성
    • 생성시, command tool chain 선택
    • Language는 C++ 선택
  • Project Header/Library Setting (Project > Build Settings 선택)
    • Header Search Paths
      • /usr/local/Cellar/opencv/4.4.0/include/opencv4
    • Library Search Paths
      • /usr/local/Cellar/opencv/4.4.0/lib
    • Other Linker Flags
      • -I/usr/local/Cellar/opencv/4.4.0/include/opencv4 -L/usr/local/Cellar/opencv/4.4.0/lib -lopencv_gapi -lopencv_stitching -lopencv_alphamat -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_highgui -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_sfm -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_videostab -lopencv_videoio -lopencv_viz -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core
  • Project 코드 작성 후 오류 발생시 아래와 같이 해결
    • Targets > Signing & Capabilities > Hardened Runtime 항목에서 Disable Library Validation 선택
 
 
 
# Reference

 

이 글을 공유하기

댓글(0)

Designed by JB FACTORY