개발 환경을 새롭게 세팅하면서 이클립스 및 안드로이드 개발 툴 등을 새로 설치하게 되었다.

 

이클립스 : eclipse-jee-juno-SR1

안드로이드 sdk : android-sdk_r21.1-windows

 

(jdk는 미리 설치하였으며 버전은 별로 중요하지 않다.)

 

이클립스 Help 메뉴의 "Install New Software..." 를 통해 ADT를 설치하였는데 (Android ADT - http://dl-ssl.google.com/android/eclipse)

 

 

(여기까지의 과정에 대해서는 생략)

 

설치가 끝났는데도 ADT 관련 툴바 아이콘 및 메뉴가 보이지 않았다.

 

설치가 제대로 되지 않은 것인가 의심이 되었으나 찾아보니 결국 문제는 아이콘 및 메뉴가 표시되어있지 않은 것 뿐이었다.

 

해결 방법은 다음과 같다.

 

(이하의 방법을 이미 적용한 후 알아차린 것인데, Open Perspective에서 "Java" perspective를 열면 그냥 문제 해결인 듯 하다.)

 

 

 

굳이 Java EE perspective에서 ADT를 이용하고자 한다면 다음의 단계를 따라하면 된다.

 

 

 

Posted by Kugi
,



이클립스(Juno)에서 openCV JNI sample 프로젝트를 돌려보려는데

 

"\ndk-build.cmd": Launching failed

 

와 같은 에러를 뱉어내었다.

 

ndk 플러그인을 설치하였기 때문에 이클립스에서 빌드가 되면 동시에 ndk build가 이루어져야 하는데 실패한 것이다.

 

해결 방법은 다음과 같이 ndk-build.cmd 파일이 있는 경로를 NDKROOT 환경변수에 추가해 주면 된다.

 

 

 

 

Posted by Kugi
,



한 프로그램에서 두 대의 연결된 USB 웹캠의 영상을 출력하려고 하였다.

 

그런데 두 프로그램 중 하나의 카메라 영상만이 출력되었다.

 

CvCapture* capture1 = cvCaptureFromCAM(0);
CvCapture* capture2 = cvCaptureFromCAM(1);

 

이런 식으로 하면 이론적으로는 두 대의 카메라 영상이 capture1, capture2에 잡혀야 하는데

 

도무지 의도하는대로 작동하지 않았다.

 

 

몇 시간을 고생하다가 해결책을 찾았는데

 

독립된 USB 버스(BUS)에 각각의 카메라를 연결하면 되는 것이었다.

 

즉, 나는 하나의 웹캠은 컴퓨터 본체의 앞면 USB 포트에 연결하고,

 

나머지 하나의 웹캠은 본체의 뒷면 USB 포트에 연결함으로써 이 문제를 해결하였다.

 

 

 

 

* 참고: cvGetCaptureDomain() 함수를 이용하면 연결된 카메라의 도메인 값을 얻어올 수 있다.

 

연결되지 않았거나 알 수 없는 장치라면 CV_CAP_ANY를 반환한다. 이외의 반환되는 값들은 다음과 같이 정의되어 있다. (highgui_c.h 참고)

 

값들은 cvCaptureFromCAM()를 호출할 때 매개변수로 넣을 수 있다.  ( index = camera_index + domain_offset (CV_CAP_*) )

 

참고한 OpenCV 버전은 2.4.3 이다.

 

 

    CV_CAP_ANY      =0,     // autodetect

    CV_CAP_MIL      =100,   // MIL proprietary drivers

    CV_CAP_VFW      =200,   // platform native
    CV_CAP_V4L      =200,
    CV_CAP_V4L2     =200,

    CV_CAP_FIREWARE =300,   // IEEE 1394 drivers
    CV_CAP_FIREWIRE =300,
    CV_CAP_IEEE1394 =300,
    CV_CAP_DC1394   =300,
    CV_CAP_CMU1394  =300,

    CV_CAP_STEREO   =400,   // TYZX proprietary drivers
    CV_CAP_TYZX     =400,
    CV_TYZX_LEFT    =400,
    CV_TYZX_RIGHT   =401,
    CV_TYZX_COLOR   =402,
    CV_TYZX_Z       =403,

    CV_CAP_QT       =500,   // QuickTime

    CV_CAP_UNICAP   =600,   // Unicap drivers

    CV_CAP_DSHOW    =700,   // DirectShow (via videoInput)

    CV_CAP_PVAPI    =800,   // PvAPI, Prosilica GigE SDK

    CV_CAP_OPENNI   =900,   // OpenNI (for Kinect)
    CV_CAP_OPENNI_ASUS =910,   // OpenNI (for Asus Xtion)

    CV_CAP_ANDROID  =1000,  // Android

    CV_CAP_XIAPI    =1100,   // XIMEA Camera API

    CV_CAP_AVFOUNDATION = 1200  // AVFoundation framework for iOS (OS X Lion will have the same API)

 

Posted by Kugi
,



MFC로 UI를 만들다가

내가 만든 클래스로 std::vector 를 이용하려던 중

c:\program files (x86)\microsoft visual studio 10.0\vc\include\xmemory(48): error C2558: class 'CFrameSet' : 복사 생성자를 사용할 수 없거나 복사 생성자가 'explicit'으로 선언되었습니다.

이런 에러가 뜬다. 여기서 'CFrameSet'은 내가 만든 클래스의 이름이다.

vector를 쓰기 위해 복사생성자를 만들어두긴 했는데 깜빡 잊고 파라미터에 const를 빼먹은 것이 문제였다.



FrameSet.h

#pragma once
class CFrameSet
{
public:
	CFrameSet(void);
	CFrameSet(const CFrameSet& dup);
	~CFrameSet(void);

	...

public:
	void operator =(const CFrameSet& dup);
};




FrameSet.cpp
#include "StdAfx.h"
#include "FrameSet.h"

CFrameSet::CFrameSet(void) :
	...
{
	...
}

CFrameSet::CFrameSet(const CFrameSet& dup)
{
	*this = dup;
}

CFrameSet::~CFrameSet(void)
{
	...
}


void CFrameSet::operator =(const CFrameSet& dup)
{
	...
}


Posted by Kugi
,



안드로이드 어플리케이션 개발 중 다음과 같은 에러를 만났다.



[2012-09-24 13:14:07 - ddmlib] 현재 연결은 사용자의 호스트 시스템의 소프트웨어의 의해 중단되었습니다
java.io.IOException: 현재 연결은 사용자의 호스트 시스템의 소프트웨어의 의해 중단되었습니다
 at sun.nio.ch.SocketDispatcher.write0(Native Method)
 at sun.nio.ch.SocketDispatcher.write(Unknown Source)
 at sun.nio.ch.IOUtil.writeFromNativeBuffer(Unknown Source)
 at sun.nio.ch.IOUtil.write(Unknown Source)
 at sun.nio.ch.SocketChannelImpl.write(Unknown Source)
 at com.android.ddmlib.JdwpPacket.writeAndConsume(JdwpPacket.java:213)
 at com.android.ddmlib.Client.sendAndConsume(Client.java:575)
 at com.android.ddmlib.HandleHeap.sendREAQ(HandleHeap.java:348)
 at com.android.ddmlib.Client.requestAllocationStatus(Client.java:421)
 at com.android.ddmlib.DeviceMonitor.createClient(DeviceMonitor.java:837)
 at com.android.ddmlib.DeviceMonitor.openClient(DeviceMonitor.java:805)
 at com.android.ddmlib.DeviceMonitor.processIncomingJdwpData(DeviceMonitor.java:765)
 at com.android.ddmlib.DeviceMonitor.deviceClientMonitorLoop(DeviceMonitor.java:652)
 at com.android.ddmlib.DeviceMonitor.access$100(DeviceMonitor.java:44)
 at com.android.ddmlib.DeviceMonitor$3.run(DeviceMonitor.java:580)
[2012-09-24 13:14:12 - DeviceMonitor] Failed to start monitoring 0019aeec51c87e
[2012-09-24 13:14:15 - DeviceMonitor] Failed to start monitoring 0019aeec51c87e



휴대전화 단말기에 USB 케이블을 연결해서 어플리케이션을 돌리던 중

 

전화를 받기 위해 급하게 뺐다가 나중에 다시 꽂아보니 생긴 일이었다.

 

어딘가에 연결이 남아있어서 그런것이라고 생각되어서 컴퓨터를 재부팅하고

 

단말기의 환경설정에서 "USB 디버깅 모드"를 해제하였다가 다시 적용시켰더니 간단하게(?) 해결되었다.

 

Posted by Kugi
,