반응형

OpenCV와 Dlib로 프로젝트를 제작 중에..

기이한 현상이 발견됬다..

 

cv::Mat CVImage = dlib::toMat(DlibImage);
cv::cvtColor(CVImage, CVImage, cv::COLOR_RGB2BGR);

여기에서 저 2개의 명령어를 본다면.. 첫번째 명령어는 DlibImage를 OpenCV의 Mat 이미지인 CVImage로 바꾸는데..

보통 이렇게 바꾸면 RGB 이미지가 CVImage에 할당이 된다..

그런데 내 프로젝트가 전체적으로 BGR이다 보니깐.. RGB를 BGR로 변환을 해야해서 cvtColor로 RGB에서 BGR로 바꾸는 명령어를 쳐서 실행했는데..

 

이상하게 첫번째에 실행하면 괜찮다가.. 두번째에 실행하니깐 RGB가 RGB로 출력되는 것이다..

이유는 잘은 모르겠지만.. cvtColor가 오류를 일으켰거나 RGB와 BGR이 서로 할당되고 그러면서 충돌이 일어난 것 같다.. 난 cvtColor에 문제가 있는 것 같다 생각은 든다..

 

즉 실행하면 실행할 수록 BGR > RGB > BGR > RGB > BGR 이런식으로 계속 번갈아가며 출력되는 것..

 

그래서 내가 해결한 방법은.. 애초부터 RGB이미지를 안쓰기로 해서.. 그냥 이미지 변환안하고 바로 썼다..

그러니깐 잘된다..

 

으음..

아직도 뭔 문제인지 모르겠다.. RG를 BGR로 바꿀때의 문제들은 해외 커뮤니티에서 보긴 했는데..

 

내 OpenCV 버전이 낮아서 그런건가.. 그래도 최신껄로 깔았는데.. 뭐가 문제인건지..

 

해결했던 방법..

그냥 RGB 안쓰고 애초에 처음부터 BGR로 되게 작업..

반응형
반응형

내가 문제 생겼을 때 보기 위한 오류해결

  • C2146 : ';'이(가) 'pixel_type' 식별자 앞에 없습니다. 
  • C2027 : 정의되지 않은 형식 'dlib::image_traits<image_type>'을(를) 사용했습니다.
  • C4430 : 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다.

일단 저기 Don't add anymore은 그냥 지금 프로젝트를 계속 여러번 테스트하며 하고 있어서 더 이상 추가안한다는 것

 

Dlib 라이브러리를 쓸 때 가끔 이래 뜬다..

이 오류는 내 문제에 대한건 그냥 dlib에 이미지 파일을 넣을 때 그 함수의 지원되지 않는 이미지 변수를 넣어서 그런 것 같음..

 

해결

해결 방법은 그냥 dlib가 지원하는 이미지 변수로 넣으면 아마 될 것이다..!

auto face = detector(camImg);

내 경우 얼굴 인식 때문에 하고 있는데

현재 저 camImg가 OpenCV의 Mat 자료형이다.

 

근데 Dlib에서 OpenCV의 자료형을 넣어버리면 분명 오류를 낼꺼다.. 자기꺼도 아닌데 (왜 넣냐고 나보고 어쩌라고..) 할 것이다.

그래서 간단하게 해결할려면 Dlib에서 지원하는 자료형으로 변환하면 되는 것임!

dlib::cv_image<dlib::bgr_pixel> cimg(camImg);
auto face = detector(camImg);

이렇게 하면 되는 것임..!

dlib의 cv_image가 OpenCV의 이미지를 Dlib의 매트릭스로 바꿔주는 그런 것인 듯

 

어쨋든 그런 것임!

 

요약

Dlib가 지원하는 자료형으로 이미지 넣으면 됨

반응형
반응형

학교에서 프로젝트를 받아버려서.. 해야하는 상황..

내 프로젝트를 위해선 DLIB와 OPENCV가 필요한데..

정말 2~3일동안 수없이 도전해보다가 굉장히 간단한 방법을 찾아서 알려줄까함! (왜이리 dlib는 잘 안깔리는거야)

 

일단 설치 방법은 요약하면 VCPKG를 설치해서 DLIB와 OPENCV를 설치하면 된다!

이미 VCPKG가 깔려있다면 2번으로 넘어가주세요.

1. VCPKG 설치하기

설치는 아래 링크로 들어가서 보시면 되겠습니다~~

https://cheongpark.tistory.com/15

 

윈도우에서 VCPKG 설치하기

VCPKG는 대충 C++ 그런거의 패키지를 자동으로 설치해주는? 느낌인 것 같다.. 자동화로 설치해줘서 짜증나는 오류들을 경험하지 않고 빠르게 설치해주는 엄청난 놈인 것 같다! VCPKG 설치하기 https://

cheongpark.tistory.com

 

2. dlib와 opencv 설치

vcpkg install dlib:x64-windows
vcpkg install opencv:x64-windows

위 명령어를 커맨드 창에 입력해주세요!

만약 vcpkg가 없는 명령어로 뜨면 환경 변수 설정이 안되거나 환경 변수 경로를 잘 못 지정했을 겁니다!

x64-windows는 vcpkg 패키지 리스트에서 보고 자기꺼에 맞는 걸로 선택하시면 됩니다!

 

이렇게 하면 모든 것이 설치 완료!!

이제 Visual Studio에서 include에서 사용하시면 됩니다!

// The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt
/*

    This is an example illustrating the use of the perspective_window tool
    in the dlib C++ Library.  It is a simple tool for displaying 3D point 
    clouds on the screen.

*/

#include <dlib/gui_widgets.h>
#include <dlib/image_transforms.h>
#include <cmath>

using namespace dlib;
using namespace std;

// ----------------------------------------------------------------------------------------

int main()
{
    // Let's make a point cloud that looks like a 3D spiral.
    std::vector<perspective_window::overlay_dot> points;
    dlib::rand rnd;
    for (double i = 0; i < 20; i+=0.001)
    {
        // Get a point on a spiral
        dlib::vector<double> val(sin(i),cos(i),i/4);

        // Now add some random noise to it
        dlib::vector<double> temp(rnd.get_random_gaussian(),
                                  rnd.get_random_gaussian(),
                                  rnd.get_random_gaussian());
        val += temp/20;

        // Pick a color based on how far we are along the spiral
        rgb_pixel color = colormap_jet(i,0,20);

        // And add the point to the list of points we will display
        points.push_back(perspective_window::overlay_dot(val, color));
    }

    // Now finally display the point cloud.
    perspective_window win;
    win.set_title("perspective_window 3D point cloud");
    win.add_overlay(points);
    win.wait_until_closed();
}

//  ----------------------------------------------------------------------------

위 소스는 dlib.net의 기본 예제입니다.

위 소스를 Visual Studio에서 빈 프로젝트로 하나 만들고 소스 파일에서 test.cpp 하나 만들고 위 코드를 입력해서 실행해보시면 아주 잘 되는 것을 알 수 있습니다!

이런식으로 창이 나오면 잘 작동한다는 것이죠!

마우스로 회전도 되더라구요.. (그래프로 만들면 재밌겠다)

 

뭐 어쨌든 이 방식으로 설치했다면 빌드 폴더에 dll 파일도 나오는 경우가 있는데 이걸 같이 이동 시켜줘야지 다른 컴퓨터에서도 정상적으로 작동할 겁니다! (아무것도 설치 안되어있어도 잘 작동하더라구요.. 뭐 다른 한개는 설치해줘야 하긴 하는데..)

 

찾아보니 x64-windows-static 버전은 exe에다가 dll 파일 연결 안하고 모조리 다 때려 넣는 것 같군요! 하지만 설정은 더 힘드니 저 혼자만 하도록 하죠!

 

다만 맥이나 리눅스에서는 안될지도?

 

어쨌든 이만 끝!

VCPKG는 진짜 엄청나다..!

 

반응형

'설치 > C++' 카테고리의 다른 글

Visual Studio 자동 완성 규칙 변경  (0) 2024.01.25
VCPKG 버전 업데이트  (0) 2024.01.08
윈도우에서 VCPKG 설치하기  (0) 2022.11.06

+ Recent posts