* 예수님의 사랑으로 축복합니다.


LabWindows/CVI에서 OpenCV 사용하기


허창원()


차례

개요

1. LabWindows/CVI 버전

2. OpenCV 버전

3. LabWindows/CVI의 include 경로 옵션

4. 테스트 프로그램 작성 및 테스트



개요

인텔(Intel)사에서 후원하는 오픈소스 컴퓨터 비전 라이브러리인 OpenCV를 LabWindows/CVI에서 사용하기 위해 테스트하던 중 몇가지 미리 알아두면 편리한 사항이 있어서 이렇게 글을 쓰게 되었습니다. LabWindows/CVI로 OpenCV를 이용하기 위한 분들을 위한 것일뿐 아니라 사실 저 자신을 위한 것이기도 합니다. 시간이 오래 지나고 나면, 저도 기억이 가물가물해져서 누군가에서 설명을 하려고 하면 뭔가를 빠트리곤 하기 때문입니다. 어쨌거나 제 글이 도움이 되실 분들이 있을 것이라고 믿고 시작합니다.


1. LabWindows/CVI 버전

이 글을 작성하는 날짜는 2014년 1월 2일입니다. 현재를 기준으로 NI LabWindows/CVI는 2013 버전이 나와 있습니다. 정확히 말해 LabWindows/CVI 2013 f1 Patch 버전입니다.



그림 1.1 LabWindows/CVI 2013 로고


그리고, 저는 예전에 수행한 프로젝트도 지원해야할 필요도 있어서 그림 1.2와 같이 여러 버전의 LabWindows/CVI를 설치해두고 적절한 버전을 선택하여 사용하고 있습니다.



그림 1.2 여러버전의 LabWindows/CVI가 설치되어 있는 환경


이번 테스트에서는 LabWindows/CVI 2010 sp1 버전부터 2013 버전까지 이용해보았습니다.


2. OpenCV 버전

이 글을 사용하기 전에 OpenCV Version 2.4.7.2 로 테스트하였는데, OpenCV 사이트에 방금 접속해보니 그저께 새로운 버전, Version 2.4.8 이 올라와있네요. 새로 다운로드 받아 글을 써 나가겠습니다.



그림 2.1 OpenCV 버전(2014-01-02 현재)


OpenCV v2.4.8 버전을 다운로드 받아서 임의의 폴더에 압축을 해제한 후에, 전체 파일들을 아래의 경로에 이동시켰습니다. 그림 2.2에서는 include 시킬 폴더를 열어둔 화면입니다.


D:\OpenCV\OpenCV_v2.4.8


그림 2.2 OpenCV 설치된 경로



3. LabWindows/CVI의 include 경로 옵션

LabWindows/CVI 2013 버전을 실행한 다음, 테스트를 위해 새 프로젝트 파일을 열어 저장합니다. 파일명은 LOCV_p042.prj 로 지정하였습니다. (참고한 책이름 약어와 페이지를 적절히 조합한 이름입니다)


그림 3.1에 보인 대로, CVI 프로젝트 창의 메뉴에서 Options - Environment 를 선택합니다. (저는 CVI 작업환경을 아래와 같이 사용합니다. 저처럼 사용하시려면, View - Workspace View Selection... 메뉴에서 Classic View를 선택하시면 됩니다.)


그림 3.1 LabWindows/CVI Environment 옵션 선택



그림 3.2 LabWindows/CVI의 Include Paths... 설정


그림 3.3에 보인대로 OpenCV의 include 폴더를 지정합니다. Browse 버튼을 눌러 해당 경로를 찾아가 선택하면 되겠습니다. 저는 "Switch Lists (F6)" 버튼을 눌러 현재 프로젝트에서만 이 include 환경이 적용되도록 하였습니다. (저처럼 이렇게 하면, 매번 새로운 OpenCV 프로젝트를 시작할 때마다 해주어야하는 번거로움이 있겠지만, 매번 기억을 새롭게 하는 데에 도움이 될 것같고, OpenCV 버전이 바뀌더라도 한번 더 챙겨볼 수 있을 것같아 저는 이렇게 하였습니다)


그림 3.3 OpenCV Include 폴더 경로 지정


4. 테스트 프로그램 작성 및 테스트

그림 4.1에는 테스트를 위한 소스 프로그램을 편집하여 보았습니다. 일반적으로 많이 소개되는 Visual C++의 예제와 달리 간단하게 하나의 파일로 테스트 예제를 구성할 수 있습니다. ANSI C 규칙에 충실한 LabWindows/CVI의 단순하고 간결한 장점이라고 저는 봅니다.


그림 4.1 OpenCV 를 이용한 이미지 파일 불러와서 보이는 예제


이미지로 소스를 보이면 타이핑하기 불편하실까봐 소스도 아래에 넣었습니다.


// LOCV_p042.c
// 사용법: LOCV_p042.exe <imagefile>
//
#include <ansi_c.h>
#include "opencv/highgui.h"

int main (int argc, char *argv[])
{
    if(argc > 1)    // 명령행 인자로 파일명이 지정되어야 함
    {
        IplImage* img;
       
        // 파일을 불러오고,
        img = cvLoadImage( argv[1], -1);     
   
        // 이미지를 표시할 창의 이름을 정하고
        cvNamedWindow("Example", CV_WINDOW_AUTOSIZE);  
   
        // 이미지를 보여주고,
        cvShowImage("Example", img);                   
       
        // 키 입력을 기다리고,
        cvWaitKey(0);                                  
   
        // 이미지를 해제한후
        cvReleaseImage(&img);                          
   
        // 창을 닫습니다.
        cvDestroyWindow("Example");                    
    }
    else    // 파일명을 명령행 인자로 주지 않았을 때...
    {
        printf("Command Line Argument required!");
        getchar();
    }
   
    return 0;
}


위와 같이 제대로 타이핑되었다면, Build - Build(Ctrl + M) 메뉴를 선택하여 Build 합니다. 그러면, 그림 4.2와 같이 에러가 날 것입니다.



그림 4.2 Build 시의 컴파일 에러


마지막 줄의 types_c.h 에서 생긴 에러로 인해 앞의 warning도 생긴 것입니다. 이 마지막줄을 더블클릭하면 그림 4.3과 같이 문제가 된 해당 소스 파일이 열립니다.



그림 4.3 문제가 된 types_c.h 헤더파일의 해당 라인


lrint() 라는 함수의 프로토타입이 제대로 선언되어 있지 않다는 에러인데, 이 문제에 대해 CVI 표준 include 파일들과 Visual C++의 표준 헤더파일들을 비교해 보는 등 여러가지를 시도한 끝에 문제가 된 문장을 아래와 같이 바꾸어버렸습니다. 즉, OpenCV의 types_c.h 헤더파일을 수정하였습니다.


return (int)(value > 0 ? value+0.5 : value-0.5);


그리하여, types_c.h 헤더파일이 그림 4.4와 같이 수정되었습니다.


그림 4.4 수정된 types_c.h 헤더파일


다시 빌드해보면, 이제는 Link 에러가 그림 4.5와 같이 나타납니다. (Compile 단계에서는 warning 정도가 나오는데, 살펴본 결과 무시해도 되겠습니다.)


그림 4.5 Link 에러


이것은 Library가 없어서 그런 것인데, 저는 정적 library보다는 DLL을 주로 이용할 것이기 때문에, 아래의 경로에서 Import Library를 CVI 프로젝트에 포함시킵니다. (이번 테스트에서는 아래의 두 library만 있으면 되므로...)


D:\OpenCV\OpenCV_v2.4.8\build\x86\vc12\lib


그림 4.6 LOCV_p042 프로젝트에 포함시킬 Import Library


이제 Build 해보니, 정상적으로 Build 되었습니다. 이제 실행을 위해 아래의 경로에서 해당 DLL을 실행 폴더로 복사해와야겠습니다.


D:\OpenCV\OpenCV_v2.4.8\build\x86\vc12\bin


그림 4.7 LOCV_p042.exe 실행을 위한 DLL


그리고, 불러올 이미지 샘플을 아래의 경로에서 실행 폴더로 복사해 옵니다.


D:\OpenCV\OpenCV_v2.4.8\sources\samples\c


그림 4.8 LOCV_p042.exe 실해시에 이용할 샘플 이미지 파일


이제 그림 4.9와 같이 실행에 필요한 파일들이 다 모인 것 같습니다.


그림 4.9 LOCV_p042.exe 실행 폴더


실행할 때 주의할 점은, 불러올 이미지 파일명을 명령행 인자로 주어야한다는 것입니다. LabWindows/CVI의 Run - Specify Executable and Command Line.... 메뉴에서 지정해도 되겠지만, 그냥 명령 프롬프트(cmd) 창을 열어서 그림 4.10과 같이 실행을 하였습니다.



그림 4.10 명령 프롬프트(cmd)에서 LOCV_p042.exe 실행하기


실행을 했더니, 그림 4.11과 같은 에러가 나타납니다. 헉.... MSCVP120.dll 이 무슨 파일인지 인터넷 검색을 해보니, Microsoft Visual Studio 2013 관련 DLL인 것 같습니다. Visual C++ 2013 Run-Time Engine이라고 보면 되겠습니다. (OpenCV v2.4.7.2와는 달리 v2.4.8은 VC++ 2013 버전으로 개발한 모양입니다.)



그림 4.11 Visual C++ Runtime 에러



Microsoft Download Center로 가서 "Visual Studio 2013용 Visual C++ 재배포 가능 패키지"를 다운로드 받아서 설치합니다. (저는 Windows 7 x64 버전을 사용하지만, Visual C++ 재배포 가능 패키지는 x86 버전을 설치하였습니다. OpenCV도 x86 버전을 이용하였습니다.)


그림 4.12에 다운로드 및 설치과정을 보였습니다.


http://www.microsoft.com/ko-kr/download/details.aspx?id=40784




그림 4.12 Microsoft Visual C++ 2013 재배포 가능 패키지 설치


이제 다시, 그림 4.10과 같이 실행했더니, 그림 4.13과 같이 cat.jpg 이미지 파일을 불러와서 창을 띄워 보여줍니다.



그림 4.13 LOCV_p042.exe 실행화면



이렇게 하여, LabWindows/CVI에서 OpenCV를 사용하는 첫과정을 살펴보았습니다. LabWindows/CVI 2010 sp1, 2012 sp1 버전에서도 문제없이 빌드되었고, 실행되었습니다.

단, LabWindows/CVI 9.0.1 버전에서는 문제가 발생하던데, 오래된 버전이라 문제를 해결하기 위해 더 이상 시도하지는 않았습니다.


본 글은 CVI정보나눔(www.cvi.kr)에도 좀더 다듬어서 올릴 예정입니다.

LabWindows/CVI로 OpenCV를 이용하는 모든 분들에게 좋은 일이 많이 있기를 바랍니다.


2014-01-02

허창원


Posted by 허창원
,

저는 사무실의 메인 데스크탑 PC를 외부에 나가서도 종종 접속하기 위해 윈도의 원격데스크톱 기능을 많이 이용합니다.

출장이나 외출 중일 때에도 직접 사무실의 데스크탑 PC에 접속하여야할 경우가 자주 있습니다.

 

노트북을 들고 다닐 때도 있지만, 어떨 때에는 PC방의 컴퓨터를 이용하기도 하고, 다른 업체의 PC를 이용하기도 합니다.

 

 

 

 

하지만, 사용한 뒤에는 접속 기록이 해당 PC에 남아있게 됩니다. 이것을 제거하기 위해 레지스트리를 편집하고, 내문서 폴더의 Default.rdp 파일을 삭제하여야하는데, 참 번거롭습니다.

 

이를 쉽게 해결하기 위해 실행 가능한 스크립트 파일을 만들어 올리신 분들도 많이 보게 됩니다.

인터넷 검색을 통해 찾아본 아래의 글도 도움이 되었습니다.

 

          원격 데스크톱의 접속 기록 지우는 방법 및 기록 초기화 프로그램

 

저는 한단계 더 나아가 보다 더 쉽게 하기 위해, 제 도메인에 바로 링크를 걸었습니다. 웹브라우저의 주소표시줄에 아래와 같이 입력해보십시오.

 

          kdtech.net/clearrdp.cmd

 

그러면, 아래 그림처럼 파일을 다운로드할 것인지 물어봅니다. 이럴 경우, 믿을 수 없는 파일이라면 섣불리 실행을 하지 않는 것이 좋습니다. 저는 제가 올린 파일이 확실하므로 바로 "실행" 버튼을 눌러 실행합니다.

 

 

 

그러면, 원격데스크톱 연결 기록이 깔끔하게 제거됩니다. 윈도 XP와 윈도 7에서 테스트해보았습니다.

파일이 의심스러우신 분들은 "저장" 버튼을 눌러 파일의 내용을 확인해보시고, 자신이 편리한 방법대로 활용하면 되겠습니다. (또, 앞으로 언제일지는 모르지만 크래커의 공격으로 파일이 잘못되어 있을 수도 있을 가능성이 있으므로  바로 실행하는 것은 주의하십시오.)

 

원격 데스크톱 연결 주소 기록을 쉽게 제거하는 방법을 제시해보았습니다.

 

2013-12-24

허창원

 

 

 

 

Posted by 허창원
,

대부분 많은 사람들은 데스크탑용 OS로 윈도 시리즈를 이용해오고 있습니다.

저 역시 윈도 기반에서 장비 프로그램을 개발하고 있죠!

 

근래에 윈도XP 지원 중단 기사가 나오면서 눈길을 끈 기사가 리눅스 '우분투'가 대안 OS로 떠오르고 있다는 거였습니다. 관심있게 읽어보고, 인터넷에 올라온 여러 글들을 읽어보았습니다.

 

레드헷, CentOS, 우분투(Ubuntu) 등의 리눅스 배포판 중에 우분투는 개인 사용자를 위한, 데스크탑용 OS로 손질을 잘 해나오고 있는 것 같더군요.

 

우분투 공식 사이트에 들어가보니, 데스크탑 뿐 아니라 다른 여러분야에서도 영향력을 넓혀 나가고 있는 것을 느낄 수 있었습니다.

 

 

 

그 중에서도 우선 데스크탑(Desktop) 버전에 관심이 많이 갑니다. 일반적인 웹서핑이나 웹기반 작업에는 별 무리 없이 사용할 수 있을 것 같더군요. 어서 우리나라의 인터넷 환경도 액티브X를 완전히 벗어나서 자유롭게 웹브라우저들을 이용하게 되기를 기대합니다. 그때에는 크롬북이나 우분투가 설치된 노트북들도 많이 이용될 수 있겠습니다.

 

 

 

한글화된 자료를 제공하는 곳이 있는지를 찾아보니, 우분투 한국 커뮤니티가 있네요. 현재(2013년 12월) libhwp 관련으로 갈등을 겪고 있는 것 같은데, 그것은 지엽적인 문제인 것 같고, 앞으로 우분투에 대한 좋은 정보를 주고 받는 커뮤니티로 새롭게 잘 도약할 수 있기를 기대합니다.

  

 

 

윈도 OS 기반에서 NI사의 LabWindows/CVI로 장비 관련 프로그램을 개발하는 저로서는 당분간은 업무에 적용하기는 어려울 것 같습니다. NI사에서 리눅스용 LabWindows/CVI도 제공하고 있는 것 같은데, 주로 레드헷에 포커스를 맞춘 것 같더군요. 크게 보면 같은 리눅스라서 우분투(Ubuntu)에서도 가능은 할 것 같은데, 시행착오를 좀 겪을 것 같네요.

 

우분투는 아주 최소사양에서도 돌릴수 있다고 하니, 3~4만원대 초소형 컴퓨터 라즈베리 파이(Raspberry Pi)에 설치하여 적절한 분야에 이용하는 것도 괜찮을 것 같습니다. 예를들면, 개별 장치를 제어하는 기능을 넣고, 거기다 웹서버를 설치하여 원격지의 서버와 통신하도록 시스템을 구성한다면 굳이 비싼 컴퓨터를 사용하지 않아도 될 것 같습니다.

 

라즈베리 파이 모델-B

 

우분투 관련 전망을 알아보다 보니 아래의 글들이 도움이 되네요.

 

[우분투 집중 점검](1) "우분투(Ubuntu) 넌 도대체 누구니?"
http://it.news.danawa.com/News_List_View.php?nModeC=1&nSiteC=1&sLikeKey=keyword&sLikeValue=%BF%EC%BA%D0%C5%F5&nSeq=2345558&nBoardSeq=


[우분투 집중 점검](2)]대안으로 떠오르는 우분투, 내 PC에 설치해보자
http://it.news.danawa.com/News_List_View.php?nModeC=1&nSiteC=1&sLikeKey=keyword&sLikeValue=%BF%EC%BA%D0%C5%F5&nSeq=2344913&nBoardSeq=


[우분투 집중 점검](3)우분투, 비용 '제로'의 업그레이드
http://it.news.danawa.com/News_List_View.php?nModeC=1&nSiteC=1&sLikeKey=keyword&sLikeValue=%BF%EC%BA%D0%C5%F5&nSeq=2346270&nBoardSeq=


[우분투 집중 점검](4)우분투, 쓸만한 OS인가? 향후 발전 가능성은?
http://it.news.danawa.com/News_List_View.php?nModeC=1&nSiteC=1&sLikeKey=keyword&sLikeValue=%BF%EC%BA%D0%C5%F5&nSeq=2348873&nBoardSeq=


[월드리포트]중국, 외산 유료 OS 대신 '우분투'를 대안으로
http://it.news.danawa.com/News_List_View.php?nModeC=1&nSiteC=1&sLikeKey=keyword&sLikeValue=%BF%EC%BA%D0%C5%F5&nSeq=2343729&nBoardSeq=

 

 

중국이 PC, 서버, 태블릿, 스마트폰 등을 총괄해서 사용할 국가 표준OS 구축을 위한 아키텍쳐로 우분투를 선택했다고 하니, 많은 기대가 됩니다.

우분투가 좋은 대안OS로 발전 되기를 기대합니다.

 

2013-12-17

허창원

 

 

Posted by 허창원
,