(문)
각각 두가지에 대하여 캠으로 받아 

IplImage *frame = 0;
Mat frame;

을 캠으로 받아서 depth를 출력해봤더니

IplImage 에서는 depth값이 8이 나오고

Mat 에서는 depth값이 0이 나오더라구요

각각의 의미에 대해 알고 싶습니다.

가령 Mat img(480,720,CV_32F) 인 경우에는 depth값이 5이고,

IplImage* img; img = cvCreateImage(cvSize(480,720),IPL_DEPTH_32F,3); 인 경우는 32로 나오고

Mat에서의 depth 5값은 IplImage에서의 depth 32값과 같은걸로 알고 있는데 아닌지요

왜 캠으로 frame을 받을때는 각각의 depth값이 다르게 나오는지도 너무 궁금하네요..

(답)

두 구조체/클래스는 서로 다른 값 정의를 가지고 있습니다.

뜻은 같지만 그 뜻을 표현하는 방식이 다른거죠

예를 들면 우리가 먹는 사과를 우리나라는 "사과"라고 발음하고 표기하지만

영미권에서는 "애플"이라 발음하고 "apple"라고 쓰는 것과 비슷합니다.


8U 즉, 한 픽셀에 8비트의 언사인드 값을 가지는 타입을 예로 들어봅시다

iplimage의 depth는 IPL_DEPTH_8U 를 리턴합니다.(types_c.h)

디파인을 따라가보면 8입니다.

이 IPL_DEPTH 계열 디파인들은 비트수를 그대로 표현해 주고 signed인 경우에 0x80000000 을 OR시켜 알려줍니다.

그런데 Mat의 depth()는 CV_8U 를 리턴합니다.(cvdef.h)

이 값은 0입니다.

이 CV_계열 디파인들은 단순열거 되어 있습니다.

즉, 같은 8비트 계열인 CV_8S 는 1입니다.

두 구조체/클래스의 스코프가 다르기 때문에 나오는 문제죠

아마도 bpp를 계산하고 싶으신 듯 한데,

mat은 elemSize()라는 함수를 가지고 있습니다.

한 픽셀을 몇 "바이트"로 표현하는지 리턴해 주는 함수입니다.

따라서 여기에 8을 곱하면 bpp의 계산이 가능합니다

Visual Studio 2017 에서 C++ 을 이용해 OpenCV 를 활용해 보려고 합니다.

이를 위해선 먼저 환경 설정이 필요합니다.

 

1. OpenCV 다운로드

아래 링크에서 파일을 다운로드 받습니다. (2018-02-27 기준 최신버전 경로)

https://sourceforge.net/projects/opencvlibrary/files/latest/download

그외 최신버전은 아래 링크에서 확인합니다.

https://sourceforge.net/projects/opencvlibrary/

아래 처럼 다운로드가 완료되면 실행합니다.

적당한곳에 압축을 풉니다.

압축을 풀면 아래와 같이 구성 되어있습니다.

환경설정에 필요한건 build 폴더 입니다.

Visual Studio 에서 이용할 폴더는 build 에서 include, x64 폴더입니다.

x64 의 vc15 가 visual studio 2017 에 대응됩니다. .

(vc14 를 사용해도 상관은 없더군요..)

 

2. 환경 변수 설정

내컴퓨터 속성에서 고급 시스템 설정으로 진입

환경변수 클릭.

환경 변수에서 상단의 사용자 변수의 Path 선택하고 하단의 시스템 변수에서 Path 를 선택하고 편집을 클릭합니다.

앞서 압축을 푼 폴더에서 .....\build\x64\vc15\bin 경로를 추가합니다.

 

3. 프로젝트 구성

C++ 프로젝트를 만듭니다.

새프로젝트 추가에서 아래처럼 Visual C++ 에서 빈프로젝트를 하나 생성합니다.

프로젝트 속성에서 본겨적인 환경설정 작업이 시작됩니다.

먼저 상단의 구성은 '모든구성' 을 선택하고 플랫폼은 'x64' 로 선택합니다.

링커 위에 'C/C++' 항목이 보여야합니다.

이를 위해선 프로젝트에서 새 항목 추가를 선택하여 아래처럼 cpp 파일을 하나 만들어 줍니다.

다시 프로젝트 속성에 진입하면 아래 처럼 C/C++ 카테고리가 추가된 걸 확인 할수 있습니다.

먼저 추가된 C/C++ 항목을 펼쳐서 일반 항목을 선택합니다.

여기서 추가 포함 디렉터리 에서 우측에 화살표를 클릭해 편집을 클릭합니다.

아래와 같은 팝업 창이 하나 뜹니다. 여기서 추가버튼(+폴더모양)을 클릭하면 아래처럼 입력할수 있는 칸이 나오는데

여기서 우측의 ... 버튼을 클릭합니다.

...\build\include 경로를 선택하여 추가합니다.

추가가 되면 추가 포함 디렉터리에 아래처럼 표시가 됩니다.

 

이번에는 링커 항목에서 일반 을 선택합니다.

추가 라이브러리 디렉터리 에서 우측 끝 화살표를 클릭해 편집을 선택합니다.

아래와 같은 팝업창이 하나뜨고

아래 경로를 선택 및 추가합니다.

...\build\x64\vc15\lib

추가가 되면 추가 라이브러리디렉터리에 아래처럼 표시가 됩니다.

이제 링커에서 입력 항목을 선택합니다.

추가 종속성에서 편집을 선택합니다.

여기서 아래 두 lib 파일을 넣어줍니다.

위 두 파일 명을 아래 경로에의파일 명입니다.

마지막에 d 가 붙은건 Debug 때 사용되고 그렇지 않은건 Release 때 사용됩니다.

추가가 완료되면 아래처럼 추가한 항목이 추가 종속성 앞쪽에 보여집니다.

확인을 눌러 프로젝트 속성창을 빠져나옵니다.

이제 아래 그림 처럼 x64 로 두고 디버깅을 시작하면 됩니다.

이미지 하나를 canny 로직을 적용해 봅니다.

먼저 사진 파일 하나를 명칭을 image 로하여 프로젝트 폴더에 옮겨 놓습니다.

제가 사용한 이미지는 아래 이미지 입니다.

소스코드

#include<opencv2/opencv.hpp>
#include<iostream>
#include<conio.h>
int main() {
 cv::Mat imgOriginal;
 cv::Mat imgGrayscale;
 cv::Mat imgBlurred;
 cv::Mat imgCanny;

 imgOriginal = cv::imread("image.png");
 if (imgOriginal.empty()) {
  std::cout << "error: image not read from file\n\n";
  _getch();
  return(0);
 }

 cv::cvtColor(imgOriginal, imgGrayscale, CV_BGR2GRAY);

 cv::GaussianBlur(imgGrayscale,
  imgBlurred,
  cv::Size(5, 5),
  1.5);
 cv::Canny(imgBlurred,
  imgCanny,
  82,
  164);

 cv::namedWindow("imgOriginal", CV_WINDOW_AUTOSIZE);
 cv::namedWindow("imgCanny", CV_WINDOW_AUTOSIZE);

 cv::imshow("imgOriginal", imgOriginal);
 cv::imshow("imgCanny", imgCanny);

 cv::waitKey(0);

 return(0);
}

실행해 보면 아래처럼 Canny 가 적용된 이미지 출력을 확인할 수 있습니다.

 

 

  1. Favicon of http://kjun.kr kjun.kr 2018.03.09 09:15 신고

    https://stackoverflow.com/questions/4975913/how-do-i-use-emgu-cvs-surf-library-to-match-to-a-library-of-images?rq=1

  2. Favicon of http://kjun.kr kjun.kr 2018.03.09 13:27 신고

    https://social.msdn.microsoft.com/Forums/vstudio/en-US/95ebd6bc-72cb-4a8c-9b63-a5b3de682fe6/cannot-convert-from-int-to-emgucvflanniindexparams?forum=clr

  3. Favicon of http://kjun.kr kjun.kr 2018.03.09 13:38 신고

    https://stackoverflow.com/questions/33657853/emgucv-surf-determine-matched-pairs-of-points?rq=1

  4. Favicon of http://kjun.kr kjun.kr 2018.03.09 15:00 신고

    https://github.com/emgucv/emgucv/issues/2

  5. Favicon of http://kjun.kr kjun.kr 2018.03.09 15:21 신고

    https://stackoverflow.com/questions/39764844/finding-matching-image-within-a-collection-of-images-using-emgucv-3-1-0

https://076923.github.io/posts/C-opencv-1/

+ Recent posts

티스토리 툴바