ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Visual Studio 2017에서 OpenCV 4.1.1을 사용하는 방법
    OpenCV/Windows개발 환경&라이브러리 빌드 2019.09.16 21:53
     
     

    미리 빌드되어 배포되는 윈도우용 OpenCV 4.1.1을  Visual Studio 2017에서 사용하기 위해 필요한 과정을 설명합니다. 

     

    경험을 미루어봤을때  Visual Studio 2019에서도 빌드되어 배포되는 OpenCV를 사용할 수 있을 듯 싶지만 예상치 못한 문제가 발생할 수 있습니다. 

     

     

    최초 작성 2017. 4. 25

    최종 작성 2019. 9. 16

    by webnautes

     

    OpenCV를 위해 설정한 프로젝트를 템플릿으로 만들어서 사용하는 방법을 추가하였습니다. 

    자세한 내용은 아래 포스트를 참고하세요.


    Visual Studio 2017에서 프로젝트 설정을 템플릿으로 만들기

    https://webnautes.tistory.com/1380

     

     

     

     

     

    1. OpenCV 깃허브에서는 opencv-4.1.1-vc14_vc15.exe를 다운로드 받습니다.

     

    https://github.com/opencv/opencv/releases 

     




    2. 다운로드 받은 파일의 이름 opencv-4.1.1-vc14_vc15.exe 에서도 알 수 있듯이  vc14(Visual Studio 2015)와 vc15(Visual Studio 2017)를 위해 미리 빌드된 라이브러리가 배포되고 있습니다. 

     

    실행하면 압축을 해제할 위치를 물어봅니다. 위치 변경없이 바로 Extract를 클릭하면 설치 파일이 위치한 곳에 압축이 풀립니다.  

     

    디폴트 폴더 이름인  opencv를 변경할 수 없기 때문에 기존에 설치된 OpenCV 라이브러리에 덮어쓰기가 될 수 있습니다. 

    가급적이면 압축을 풀고 이름을 변경한 후에 해당 위치로 복사하세요. 

     




    3. 압축을 풀어 생성된 opencv 폴더는 미리 빌드된 라이브러리가 포함되어 있는 build 폴더와 OpenCV  소스 코드가 포함되어 있는 sources 폴더로 구성되어 있습니다. 

     




    opencv 폴더 이름을  적당한 이름으로 변경 후 원하는 위치로 복사해줍니다. 

    본 포스트에서는 OpenCV 폴더가 C:\opencv-4.1.1 에 있는 것으로 가정하고 진행합니다. 

     




    4. Visual Studio의  메뉴에서 파일 > 새로 만들기 > 프로젝트를 선택합니다.




    5. 왼쪽 항목에서 Visual C++ > Windows 데스크톱을 선택하면 중앙에 보이는 항목에서  Windows 데스크톱 마법사를 선택합니다. 

    (예전에 있던 Win32 콘솔 프로젝트가 Visual Studio 버전업에 따라 사라져서 대신 사용합니다.)

     

    이름 항목에 원하는 프로젝트 이름을 적어줍니다.

     




    6. 응응 프로그램 종류콘솔 응용 프로그램을 선택하고 빈 프로젝트를 체크합니다.

     

    SDL을 체크하면 보안상 대체해서 사용해야 하는 함수들을 알려줍니다. 예를 들어 scanf() 대신 scanf_s() 를 사용하라는 메시지가 보입니다. 

    테스트 시에는 체크해제해두는 편이 좋을 듯합니다.

     




    7. 솔루션 탐색기소스 파일 항목에서  마우스 우클릭하면 보이는 메뉴에서 추가 > 새 항목을 선택합니다. 

     




    8. C++ 파일(cpp)를 선택하고 이름 항목에 소스코드 파일이름을 적어준후  추가 버튼을 클릭합니다.

     




    소스 파일 항목에 cpp 파일이 추가됩니다.

     




    9. 툴바의 솔루션 플랫폼을  x64로 변경합니다. 

     




    현재는 빌드된 64비트용(x64) 라이브러리만 배포되고 있기 때문에 32비트용(x86)이 필요한 경우에는  OpenCV 소스 코드를 가지고 컴파일해야 합니다. 

     




    10. 솔루션 탐색기에서 다음처럼 프로젝트 이름을 선택하고 메뉴에서 프로젝트 > 속성을 선택합니다.

     




    11. 속성 페이지 창 왼쪽 위에 보이는 구성모든 구성으로 변경합니다.

    Debug 모드와 Release 모드의 공통 부분을 한번에 설정할 수 있습니다. 

     




    12. 왼쪽 항목에서 C/C++를 선택하고 추가 포함 디렉터리 항목에 OpenCV 헤더 파일 위치를 입력합니다.

     

    C:\opencv-4.1.1\build\include

     




    13. 왼쪽 항목에서 링커를 선택하고 추가 라이브러리 디렉터리 항목에 OpenCV 라이브러리 파일 위치를 입력합니다.

     

    C:\opencv-4.1.1\build\x64\vc15\lib

     




    14. 왼쪽 항목에서 디버깅을 선택하고 환경 항목에  OpenCV 라이브러리  DLL 파일 위치를 입력합니다. 

     

    PATH=C:\opencv-4.1.1\build\x64\vc15\bin;%PATH%

     




    15. 구성활성(Debug)로 변경하고 변경된 설정 저장 여부를 물어보는  메시지 박스가 보이면 예 버튼을 클릭합니다..

     




    16. 왼쪽 항목에서 링커 > 입력을 선택하고 추가 종속성 항목의  값 맨 앞에 디버그용 라이브러리 이름을 입력합니다. 이름 뒤에 세미콜론(;)을 넣어줘야 합니다. 

     

    opencv_world411d.lib;

     




    17. 구성Release로 변경하고 변경된 설정 저장 여부를 물어보는  메시지 박스가 보이면 예 버튼을 클릭합니다.

     




    18. 왼쪽 항목에서 링커 > 입력을 선택하고 추가 종속성 항목의 값 맨 앞에 릴리즈용 라이브러리 이름을 입력합니다. 이름 뒤에 세미콜론을 넣어줘야 합니다. 

     

    opencv_world411.lib;

     




    19. 이제 설정이 완료되었습니다. 확인 버튼을 클릭하여 속성 페이지 창을 닫습니다.




    20. 다음 경로에 있는 소스 코드를  테스트에 사용합니다.

     

    C:\opencv-4.1.1\sources\samples\cpp\videocapture_basic.cpp

    /**
    @file videocapture_basic.cpp
    @brief A very basic sample for using VideoCapture and VideoWriter
    @author PkLab.net
    @date Aug 24, 2016
    */
    
    #include <opencv2/opencv.hpp>
    #include <iostream>
    #include <stdio.h>
    
    using namespace cv;
    using namespace std;
    
    int main(int, char**)
    {
    	Mat frame;
    	//--- INITIALIZE VIDEOCAPTURE
    	VideoCapture cap;
    	// open the default camera using default API
    	cap.open(0);
    	// OR advance usage: select any API backend
    	int deviceID = 0;             // 0 = open default camera
    	int apiID = cv::CAP_ANY;      // 0 = autodetect default API
    								  // open selected camera using selected API
    	cap.open(deviceID + apiID);
    	// check if we succeeded
    	if (!cap.isOpened()) {
    		cerr << "ERROR! Unable to open camera\n";
    		return -1;
    	}
    
    	//--- GRAB AND WRITE LOOP
    	cout << "Start grabbing" << endl
    		<< "Press any key to terminate" << endl;
    	for (;;)
    	{
    		// wait for a new frame from camera and store it into 'frame'
    		cap.read(frame);
    		// check if we succeeded
    		if (frame.empty()) {
    			cerr << "ERROR! blank frame grabbed\n";
    			break;
    		}
    		// show live and wait for a key with timeout long enough to show images
    		imshow("Live", frame);
    		if (waitKey(5) >= 0)
    			break;
    	}
    	// the camera will be deinitialized automatically in VideoCapture destructor
    	return 0;
    }
    


    프로젝트의 소스 파일로 해당 코드를 복사해오고 나서 Ctrl + F5를 눌러서 컴파일 및 실행시켜 봅니다.


    실행에 문제가 있다면 백신의 실시간 보호 기능 때문일 가능성이 높습니다. 끄고 다시 해보세요. 




    21. 툴바의  솔루션 구성이 Debug / Release 로 설정되어 있을 때, 각각 문제 없이 동작하는지 확인해봅니다.

     

     

    22. 참고로 F5를 눌러서 실행하면 디버거와 함께 프로그램이 실행되고,  Ctrl + F5를 눌러서 실행하면 프로그램만 실행됩니다. 

     

    문제 없다면 웹캠으로부터 캡처된 영상을 보여주는 창이 보입니다. 아무 키나 누르면 실행이 중단됩니다. 

     




    포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
    댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

    여러분의 응원으로 좋은 컨텐츠가 만들어집니다. 지금 본 내용이 도움이 되었다면 후원 또는 유튜브 구독 부탁드립니다. 감사합니다 : )

    유튜브 구 독 하 기
    후 원 하 기


    댓글 203

    • 이전 댓글 더보기
    • 백두현 2019.06.26 13:41


      안녕하세요, 선생님 :)
      프로젝트 관련으로 OpenCV를 입문하게 된 학생입니다 ㅎㅎ
      다름이 아니라 제가 선생님 영상으로 Opencv를 까는데 성공을 했는데
      제가 공부하려고 잡은 책이 김동근 저자의 OpenCV programming인데 이 책이 vs 2010에서 옛날 버전의 opencv를 사용을 하고 있는데
      혹시 최신버전으로 옛날버전으로 다루고 있는 opencv책을 볼 때 주의 사항이 있으신가요???

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.06.26 14:00 신고


        OpenCV 2.x 버전대를 사용한 책만 아니면 그대로 사용가능합니다.

        그리고 OpenCV 3.x 버전대를 사용했다면 CV_가 앞에 붙은 상수는 OpenCV 4.x 버전재에서 다른 이름의 상수로 대체되었기 때문에 주의해야합니다.

    • 백두현 2019.06.26 17:06


      책을 보니까 OpenCV 2.x 버전대인데 이럴경우 최근에 나온 opencv 책을 통해서 공부를 해야겠죠?

    • 이프 2019.07.02 13:17


      C:\Users\302-06\source\repos\BSD\x64\Release\BSD.exe(11632 프로세스)이(가) -1 코드로 인해 종료되었습니다.
      이 창을 닫으려면 아무 키나 누르세요.

      라고 나오면서 이미지나, 영상을 못찾는데 어떻게해야하나요?

      #include <opencv2/core.hpp>
      #include <opencv2/imgcodecs.hpp>
      #include <opencv2/highgui.hpp>

      #include <iostream>

      using namespace cv;
      using namespace std;


      int main(){
      Mat image;
      image = imread("a.png", IMREAD_COLOR);
      if (image.empty()){
      cout << "Could not open or find the image" << endl;
      return -1;
      }

      namedWindow("Original", WINDOW_AUTOSIZE);
      imshow("Original", image);

      waitKey(0);
      }

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.07.02 13:36 신고


        코드는 문제가 없습니다.

        Could not open or find the image 메시지도 같이 보인다면 이미지 파일을 못찾아서 발생한 에러입니다.

        혹시 a.png 파일을 코드 파일이 있는 곳에 두었나요?

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.07.02 13:40 신고


        혹시 Could not open or find the image 메시지가 보이지 않나요?

    • 이프 2019.07.02 13:41


      프로젝트명:BSD

      C:\Users\302-06\source\repos\BSD 여기에 두었어요

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.07.02 13:43 신고


        프로젝트 폴더가 하나 더 있습니다. cpp파일이 있는 곳에 두세요.

        보통 다음 위치에 코드파일과 이미지 파일이 존재하게 됩니다.
        C:\Users\webnautes\source\repos\OpenCV Test\OpenCV Test

    • booms 2019.07.12 17:22


      ERROR! Unable to open camera 라고뜨고 -1코드로 종료가 되는데 무슨 문제인지 알 수 있을까요?

    • ssor 2019.07.16 00:58


      좋은 정리 감사합니다! 혹시 이런 설정은 새로운 프로젝트를 만들 때 마다 매번 새롭게 해줘야 하는 건가요? 새로운 프로젝트를 열면 설정이 초기화 되어 있는데 제가 뭘 잘못한 걸 까요?

    • BlueHorn07 2019.07.16 10:54


      하라는 대로 다 했었는데, 'x86' 모듈 컴퓨터 종류가 'x64' 대상 컴퓨터 종류와 충돌합니다. 이런 경고가 뜨길래 찾아봤더니 제가 계속 x86 버전으로 디버깅을 하고 있었습니다....
      x64로 바꾸고, 다시 하라는대로 했더니 정상적으로 잘 되네요ㅎㅎ 감사합니다 :)

    • 111111 2019.07.31 15:22


      혹시 release 모드 에서 오류가 뜬다면 보통 어떤 오류인가요
      /

    • 배우는이 2019.08.09 18:26


      [ INFO:0] VIDEOIO: Enabled backends(6, sorted by priority): FFMPEG(1000); GSTREA
      MER(990); MSMF(980); DSHOW(970); CV_IMAGES(960); CV_MJPEG(950)
      warning: Error opening file (/build/opencv/modules/videoio/src/cap_ffmpeg_impl.h
      pp:901)
      warning: rtsp://192.168.5.3:1935/oflaDemo/stream1 (/build/opencv/modules/videoio
      /src/cap_ffmpeg_impl.hpp:902)
      [ INFO:0] VideoIO pluigin (GSTREAMER): glob is 'opencv_videoio_gstreamer*.dll',
      1 location(s)
      [ INFO:0] - D:\...\StreamToFile\x64\Debug: 0
      [ INFO:0] Found 0 plugin(s) for GSTREAMER
      Error opening video stream or file

      핸드폰에서 라이브 영상을 Red5 서버로 보내고, Red5에서 스트리밍하는 영상을 컴퓨터에서 받아서 파일로 저장하려고 합니다.
      그런데 위와 같이 오류가 발생하네요.
      참고로 팟플레이어에서는 스트리밍 영상이 잘 보입니다.
      뭐가 잘 못 되었을까요?
      스트리밍 주소는 아래와 같습니다.
      rtmp://192.168.5.3/oflaDemo/stream1

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.08.09 18:33 신고



        지정한 비디오 주소를 못 불러오는 듯합니다.

        전 다음처럼 웹영상을 가져와서 처리했었습니다.

        mjpg-streamer를 사용한 웹 스트리밍을 OpenCV에서 가져오기
        https://webnautes.tistory.com/1262

    • 나는나비 2019.08.29 19:58


      감사합니다 감사합니다 정말 감사합니다.
      쉽게 설명해주시니까 바로 따라해서 성공적으로 VS2017 에서 opencv 를
      사용할 수 있게 되었습니다.

    • 뉴비 2019.08.31 20:46


      이 글 그대로 따라했는데 opencv_world410d.lib 파일을 열 수 없다고 예제조차 실행이 안되어버리네요...
      라이브러리 경로들 전부다 제대로 등록했는데말이지요

      혹시 vs2019는 지원을 하지 않을까요.?

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.09.01 16:30 신고


        13번에 있는 라이브러리 경로와 16번에 있는 라이브러리 파일 이름을 다시 확인해보세요.

        Visual Studio 2019에서 테스트해봤는데 잘 동작합니다.

      • 나니 2019.11.19 19:11


        그거 lib 파일 보시면 world 412입니다~

    • 안녕하세요 2019.09.02 13:01


      항상 잘 보고있습니다. 이렇게 정보 공유해줘서 감사합니다.

      저는 openCV에 GPU 연동해서 사용하고자 하는데

      OpenCV -> 4.1.0
      CMake -> 3.15.2
      Cuda -> 10.1

      버전을 사용하고있습니다.

      현재 CMake 설정에서 Cuda가 안보여서 문제 해결법을 찾아보고 있는 중인데
      혹시 GPU연동하시는 방법 아시거나 이렇게 Post 만들어서 게시하신 것이 있나요?

    • RgAxe 2019.09.08 23:10


      정보 공유해주셔서 감사합니다.
      Opencv 따라해보다보니 오류가 생겼는데, 검색을 해보니 읽을 이미지 파일이 없어서 생기는 오류라고 나오더군요.
      그래서 그 파일을 폴더에 넣어주기도 하고, 절대주소로 지정해주기도 했는데도 똑같은 오류가 생기더군요.
      혹시 이런 경우에는 어떻게 해야 할까요?

    • ㅁㅁ 2019.09.22 14:40


      openCV 3 버전과 openCV 4버전이 차이가 있을까요?? 있다면 혹시 어떤 차이가 있나요?

    • help 2019.09.29 12:59


      설정 제대로 하고 소스코드를 실행했더니 동영상이 떳다가 바로 꺼져버리고 콘솔창엔 [ INFO:0] VIDEOIO: Enabled backends(6, sorted by priority): FFMPEG(1000); GSTREAMER(990); MSMF(980); DSHOW(970); CV_IMAGES(960); CV_MJPEG(950) 라는 오류가 뜹니다 이오류는 구글링해도 잘 안나오더라구요 ㅠㅠ 뭐때문에 이런 오류가 뜨는 걸까요?
      백신을 끈 상태에서 다시 해봤는데도 이 오류가 계속 뜹니다 ㅠㅠ 도와주세요 흑흑

    • ㅜㅜ 2019.10.02 00:32


      안녕하세요 여러번 참고해서 프로젝트 하나 만들었는데 실행시키면 opencv_world411d.dll이 없어 코드 실행을 진행할 수 없습니다. 프로그램을 다시 설치하면 이 문제가 해결될 수 있습니다. 라고 뜨는데 벌써 두번깔았는데도 cmd에서 opencv_version.exe를 쳐봐도 실행이 되지 않는 건 무슨 문제일까요..?

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.10.02 14:52 신고


        opencv_world411d.dll를 찾도록 해주는 것이 포스트의 14번입니다.
        혹시 오타가 있는지.. 해당 경로에 dll 파일이 있나 확인해보세요.


        직접 실행시키려면
        실행파일과 같은 위치에 dll 파일을 두면 실행이 가능해집니다.

    • ㅠㅠ 2019.10.05 14:55


      실행하니깐 0x00007FFEA9763AE2(opencv_world411d.dll)에(OpenCV project.exe의) 처리되지 않은 예외가 있습니다. 0xC000001D: Illegal Instruction. 라고 예외 처리가 되지 않음 이라고 뜨고
      소스를 찾을 수 없다는 창이 나오고 gfluidimgproc_func.simd.hpp를 찾을 수 없음 이라고 떠요
      어떻게 해야 되는거죠?

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.10.05 21:46 신고


        혹시 플랫폼을 32비트로 한거 아닌가요?
        OpenCV는 64비트 용입니다.

      • ㅠㅠ 2019.10.06 20:42


        비주얼 스튜디오 2019버전이고요
        운영체제도 64비트에요

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.10.07 17:17 신고


        찾을 수 없음이라고 표시된 파일은 다음 경로에 있는 파일이네요.
        C:\opencv-4.1.1\sources\modules\gapi\src\backends\fluid\gfluidimgproc_func.simd.hpp


        프로젝트 설정이 잘못된 건지 사용한 소스코드 문제인지 파악하기 위해
        다음 링크에 있는 기본 예제로 테스트 해보세요.

        OpenCV 강좌 - 1. 이미지 다루기
        https://webnautes.tistory.com/1350

        OpenCV 강좌 - 2 . 동영상 다루기
        https://webnautes.tistory.com/1351

      • ㅠㅠ 2019.10.09 23:39


        같은게 계속 나오네요

      • ㅠㅠ 2019.10.10 00:34


        opencv를 다시 깔았는데도 안되고 찾아보기로 찾아도 같은게 나오네요

    • 디파인 2019.11.02 12:08


      opencv 설치법을 잘 다뤄주셔서 감사합니다

      추가로 궁금한것이 있습니다.

      1) 소스파일이 C 일 경우에는 사용이 불가능한지의 여부
      2) 데스크톱 마법사 > 빈 프로젝트 + (미리 컴파일러 된 헤더와 SDL 제외)로 만든 프로젝트가 어떤 파일을 읽을 수 없는지 에러가 4000개 이상 뜨더군요. 좀 찾아보니 외부 종속성에 있는 모든 파일인것 같은데 이 현상의 원인과 해결법

      감사합니다.

    • 우리집 2019.11.08 11:26


      감사합니다
      visual sutdio 2019에서 잘동작하네요
      첨에 대충보고했다가 opecvworld_411.dll 없다고 에러떠서 정독하면서 보니 잘되네요

    • somlsoml 2019.11.10 21:36


      ctrl + F5 누르면 빌드 안되고

      c:\users\gm\source\repos\opencv project\x64\Debug\opencv project.exe 프로그램을 시작할 수 없습니다.
      지정된 파일을 찾을 수 없습니다.

      라는 문구를 가진 창이 뜹니다. 혹시 어떻게 해결하시는지 아시나요?ㅠㅠ

Designed by Tistory.