달력

42024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

CUDA Env Error

http://inclaude.blogspot.com/2011/09/cuda-env-error.html

The result "" of evaluating the value "$(CudaBuildTasksPath)" of the "AssemblyFile" attribute in element <UsingTask> is not valid. C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA 4.0.targets
1. Close Solution on the Visual Studio
2. Find project file.
vcxproj file:
look for
<ImportGroup Label="ExtensionSettings" />
or
<ImportGroup Label="ExtensionSettings">
</ImportGroup>

replace with
<ImportGroup Label="ExtensionSettings">
<Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA 4.0.props" />
</ImportGroup>
3. Done.




Env.
Visual Studio 2010
CUDA 4.0
Windows 7

Posted by sukay
|
출처 : http://icartsh.tistory.com/
출처 :
http://msdn.microsoft.com/ko-kr/library/6wtdswk0(v=VS.100).aspx
http://msdn.microsoft.com/ko-kr/library/abx4dbyh(v=VS.100).aspx

error LNK2005: _printf이(가) MSVCRTD.lib(MSVCR100D.dll)에 이미 정의되어 있습니다.
이 오류는
프로젝트 속성에 C/C++ -> 코드 생성-> 런타임 라이브러리 : 다중 스레드 디버그 DLL(/MDd) 때문에 발생한다고 한다.
외부 라이브러리가 MT(d)로 컴파일 되어있지만 내가 사용하는 프로젝트가 MD(d)로 되어 있으면 발생는 것으로
옵션을 MT(d)나 MD(d)로 모두 통일 하면 되지만
라이브러리의 소스가 존재하지 않을때에는
아래와 같이 해야한다.

사용할 런타임 라이브러리 무시해야 하는 라이브러리
단일 스레드(libc.lib) libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
다중 스레드(libcmt.lib) libc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
DLL을 사용하는 다중 스레드(msvcrt.lib) libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
디버그 단일 스레드(libcd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib
디버그 다중 스레드(libcmtd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, msvcrtd.lib
DLL을 사용하는 디버그 다중 스레드(msvcrtd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib


프로젝트 속성->링크->입력->즉정 기본 라이브러리 무시 : LIBCMTD.LIB
Posted by sukay
|

시간 측정 함수

C++ 2011. 10. 28. 05:54

clock_t start = clock();
clock_t end = clock();
cout << "처리 시간 : " << end - start << " 밀리세컨드" << endl;
Posted by sukay
|
"C:\\asdf\\asdf\\test.jpg"라는 경로가 있을때
파일 이름인 test.jpg만을 얻고자 할때
CString 클래스의 reversfind와 find 함수를 사용하면 쉽게 가져 올 수 있다.

CString test;
test = Path;
int flag = test.Find('\\');

이렇게 되면 flag에 가장 왼쪽  \의 자리값을 가져오고
test.RversFind함수를 사용하면 오른쪽 끝에 있는 \의 자리값을 가져온다

 

Posted by sukay
|


동적할당하는 함수 구현

** (x)
**& (o)
void alloc(int **&src,int w,int h);
void main(){
int **src;

alloc(src,w,h);
}


void alloc(int **&src,int w,int h){

int i,j;

src = new int*[h];

for(i=0;i<h;i++){

src[i] = new int[w];

}

}

Posted by sukay
|

Smooth

OpenCV 2011. 4. 4. 06:17

출처 : http://www.newtypeunion.com/40?category=5

Smooth

OpenCV에서는 몇가지 방법으로 Smooth를 할 수 있게 하여 줍니다.

함수의 원형은 다음과 같습니다.

void cvSmooth( const CvArr* src, CvArr* dst,

               int smoothtype=CV_GAUSSIAN,

               int param1=3, int param2=0, double param3=0 );


smoothing 타입에 따라서 파라미터 인자의 역활이 바뀝니다.

요 부분만 알고 있으면 나머진 쉽습니다.

src

원본 이미지


dst

결과 이미지


smoothtype

smoothing 타입

  • CV_BLUR_NO_SCALE (simple blur with no scaling)
    • summation over a pixel param1×param2 neighborhood.
    • If the neighborhood size may vary, one may precompute integral image with cvIntegral function.
  • CV_BLUR (simple blur)
    • summation over a pixel param1×param2 neighborhood with subsequent scaling by 1/(param1param2).
  • CV_GAUSSIAN (gaussian blur)
    • convolving image with param1×param2 Gaussian kernel.
  • CV_MEDIAN (median blur)
    • finding median of param1×param1 neighborhood (i.e. the neighborhood is square).
  • CV_BILATERAL (bilateral filter)


param1

첫번째 인자

param2

두번째 인자

In case of simple scaled/non-scaled and Gaussian blur if param2 is zero, it is set to param1.

param3

         가우시안 방식일 경우 시그마를 넣어야 하지만,

이 파라미터가 0이면 커널 사이즈에서 자동으로 만들어진다.  수식은 아래와 같습니다.

              sigma = (n/2 - 1)*0.3 + 0.8,

                  where n=param1 for horizontal kernel,

                                                

                        n=param2 for vertical kernel.


  • Using standard sigma for small kernels (3×3 to 7×7) gives better speed.
  •       If param3 is not zero, while param1 and param2 are zeros, the kernel size is calculated from the sigma (to provide accurate enough operation).

보통의 시그마를 쓸 경우 그냥 좀 빨라진다. (차이는 ???)

         - 사실 차이라는게 크게 없는듯 합니다. 많이 하면 차이가 있겠지만 제 머쉰에서는 금방 결과가 나왔습니다.

         커널 사이즈를 안주고 (0으로 주고) 호출하면 역으로 시그마에서 커널 사이즈를 만듭니다

Posted by sukay
|

클래스간 포인터

C++ 2011. 3. 31. 10:56
CTestApp, CMainFrame, CTestDoc, CTestView

◎ CTestApp에서
CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
CTestDoc* pDoc = (CTestDoc*)((CMainFrame*)AfxGetMainWnd())->GetActiveDocument();
CTestView* pView = (CTestView*)((CMainFrame*)AfxGetMainWnd())->GetActiveView();

◎ CMainFrame에서
CTestApp* pApp = (CTestApp*)AfxGetApp();
CTestDoc* pDoc = (CTestDoc*)GetActiveDocument();
CTestView* pView = (CTestView*)GetActiveView();

◎ CTestDoc에서
CTestApp* pApp = (CTestApp*)AfxGetApp();
CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
CTestView* pView = (CTestView*)((CMainFrame*)AfxGetMainWnd())->GetActiveView();

◎ CTestView에서
CTestApp* pApp = (CTestApp*)AfxGetApp();
CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
            or (CMainFrame*)GetParent();
CTestDoc* pDoc = (CTestDoc*)((CMainFrame*)AfxGetMainWnd())->GetActiveDocument();
         or (CTestDoc*)GetDocument();
Posted by sukay
|

동적할당

C++ 2011. 3. 9. 20:51

동적할당은 사용자가 필요한 만큼 할당 받아 사용하는 방법이다.
물론 자주 사용 했고 잘 쓰고있다.

여기에 적을 내용은
프로그램 구현 중 할당되었냐 안되었냐를 판단해야 하는 경우가 있다.
물론 예외처리로 필요한 부분이다.

할당에 대한 예외처리를 하게되는경우 처음 포인터를 선언하는 부분에서
초기화를 해주어야 한다.
Ex)
double *p;
if(p)
 printf("ok");

이것은 메모리 에러가 발생하고 접근이 불가능하다
다음은 예제 소스이며 간단히 사용이 가능하다.
Ex)
double *p = NULL;
 if(p)
  printf("No");
 p = new double[10];//동적할당
 if(p)
  printf("yes");
 delete[] p;//할당해제
 if(p)
  printf("2No");
Posted by sukay
|

비쥬얼 스튜디오에서
클래스의 멤버함수가 정의된 부분으로 이동할때
가끔 선언된 부분으로 이동하게 되는 오류가 발생하며


이런 경우 프로젝트 폴더의 ncb 파일을 삭제한뒤 비쥬얼스튜디오를 다시 실행하면
정상적으로 이동이 되는데 이것은 ncb파일이 프로젝트의 전체 소스를 관리하기 때문에
비쥬얼 스튜디오 실행시 ncb파일이 없다면 다시 생성을 해주어 정상적인 사용이 가능하게 해줍니다.
Posted by sukay
|

WM_USER 메시지

C++ 2011. 2. 16. 16:21
출처 : http://blog.naver.com/intencelove?Redirect=Log&logNo=20122584833
윈도우 기반 프로그래밍에서 가장 기본적인 개념이 메시지 처리이며, 윈도우 프로그램에서는 사용자에게 엄청난 크기의 메시지 영역을 제공한다.

사용자 자신의 메시지
#define _MESSAGE1 (WM_USER+1)

WM_MESSAGE를 자주 사용하는 경우 UserMessage.h를 만들어 사용한다.

메시지 보내기
PostMessage(_MESSAGE);  //메시지 큐에 넣기
SendMessage(_MESSAGE);  //ㅐㄴ들러(함수)를 마칠때까지 기다림
위 함수는 CWnd 클래스의 멤버함수이며, 위 함수는 자신의 윈도우에서만 처리가 된다.
브로드 캐스팅을 하는 방법은 WinAPI를 이용하여 처리하며
::PostMessage(HWND _BROADCAST, _MESSAGE, Parameter1, Parameter2);
::SendMessage(HWND _BROADCAST, _MESSAGE, Parameter1, Parameter2);
자신의 윈도우 뿐 아니라 다른 모든 윈도우에 메시지가 전달된다.

메시지 맵핑
BEGIN_MESSAGE_MAP(CM?ywindowClass, CMyParentWindowClass)
//{{AFX_MSG_MAP(CMyWindowClass)
On_MESSAGE(_MESSAGE,OnMyMessageHandler)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
OnMyMessageHnadler는 사용자 정의 메시지가 도착 할때 수행되는 함수의 이름이다.

함수 정의
LRESULT CMyWindowClass::OnMyMessageHandler(WPARAM wParam,LPARAM lParam){}

함수 선언
afx_msg LRESULT OnMyMessageHandler(WPARAM wParam, LPARAM lParam);

afx_msg(Message Handler Function) : 윈도우로부터 어플리케이션에 메시지가 저달될 때 해당 메시지를 처리하는 멤버 함수, 함수이름엔 WM_대신 On, 함수 선언시 afx_msg를 붙인다.

Posted by sukay
|