본문 바로가기

공부생각

[OpenCV] Look up table(LUT) 기본 개념 간단 정리 OpenCV에서 나오는 LUT의 사용법을 한참 보면서 이놈이 뭐하는 놈인가... 왜 256사이즈로 만드는가... 고민했는데 간단하게 정리해본다. 일단 기본 개념은 모든 픽셀의 경우에 대해서 미리 계산을 해서 LUT에 저장한다는 것이다. 그렇다면 연산이 빨라지는 부분이, 만약 픽셀의 밝기가 100인 픽셀이 100개 있다면, (1. LUT사용하지 않는 경우) 픽셀을 돌면서 밝기가 100인 픽셀 300개가 있다면 100개 각각마다 +10해서 110으로 결과값을 return한다. (2. LUT를 사용하는 경우) 픽셀을 돌기 전에 밝기가 100일 경우에 110으로 리턴할 수 있도록 lut[100] = 110; 을 정의한다. 밝기가 100이 아닌 경우도 정리한다. 예를 들어 밝기가 0인 경우 -> lut[0] = .. 더보기
윈도우즈 탐색기에서 TortoiseSVN 아이콘이 보이지 않을때. TortoiseSVN은 프로젝트를 관리하기에 굉장히 유용한 프로그램이다. 너무나 멋진 관리 함수가 다양하게 존재하지만 그 중에서 가장 유용한건 위의 그림과 같이 탐색기의 아이콘을 사용하여 현재 소스코드의 변경 상태를 보여주는 가시화이다. 아이콘을 사용하여 현재 서버와 나의 환경 사이에 변동사항의 유무를 탐색기의 아이콘으로 표시해준다. 하.지.만. 윈도우즈 탐색기와 연동된 다른 프로그램과의 충돌에 의해서 SVN의 아이콘이 보이지 않을 수 있다. (dropbox, NDrive, DaumCloud 등등) 구글링 하던 도중 좋은 소스를 발견했다. http://stackoverflow.com/questions/1057734/tortoisesvn-icons-not-showing-up-under-windows-7 결.. 더보기
오픈햅틱스 사용 시 쓰레드 오류 문제의 원인이 뭔지도 확인 되지 않았는데, 참고하시라고 씁니다. 오늘 제가 만난 건 오류를 간단하게 설명드리려고 합니다. OpenHaptics를 사용해서 PHANTOM Omni 클래스를 하나 만들었습니다. (클래스는 옴니 디바이스 업데이트, 값 받기 등등의 함수가 구현이 되어 있겠죠?) 제가 입력을 빠르게 돌릴 일이 있어서 쓰레드를 하나 만들어서 Omni update함수를 그 안에 넣어봤는데, 에러가 나는 것이었습니다. 에러의 위치는 hdBeginFrame(hdGetCurrentDevice()); 그래서 구글링을 겁나해보니, 이미 오픈 햅틱스에서 쓰래드를 사용해서 콜백함수를 실행시킬 수 있는 부분이 있길래 그렇게 해 보았더니 문제 없이 잘 돌아가는 것을 확인할 수 있었습니다. 참조: http://www... 더보기
[전산 잡지식] 드래그 할 때마다 오류가 발생할 때 (링고스 사용자) 이전에 드래그를 할 때마다 정기적으로 오류가 난 적이 있었다. 마이크로 소프트 워드에서, 탐색기에서 무조건 드래그만 하면 오류가 생겨서 해당 프로그램을 재시작 해야 했다. 파워포인트에서 그림을 건드리거나 할 때도 마찬가지. 윈도우 업데이트도 받고, 이리저리 구글링을 해봐도 특별한 해결책을 찾지 못하다가, 하나 추측한 것이 바로 사전 링고스(Lingoes). 링고스에서 사전 자동 찾기 기능과 충돌이 일어나는 것 같다는 추측이었고, 링고스를 쓰지 않은 이후 그러한 오류를 보지 못한 것으로 봐서, 나의 추측이 맞는 것 같지만, 증명할 방법이 없어서 그냥 블로그에 남겨둔다. 혹시 같은 증상이 있고, 링고스를 쓰고 계시면 한번 링고스 정리해 보시기를 추천해 드립니다. 더보기
[C++] 리스트 관리 용법. std::vector switchList; switchList.insert(switchList.end(), new osg::Switch("temp")); ------------------------------- iterator 만들기.. std::vector::iterator itr; for(itr=switchList.begin(); itr != switchList.end() ; itr++){ osg::Switch* temp = (*itr); } 더보기
C++ 어레이 사용시 주의해야할점 int* temp; int* tem; tem=(int*)malloc(sizeof(int)*2); temp=(int*)malloc(sizeof(int)*2); temp[0]=0; temp[1]=1; tem[0]=2; tem[1]=3; tem[0]=temp[0]; temp[0]=3; printf("%d",tem[0]); 포인터로 바로 temp=tem 으로 넘기면, 참조가 같아져서 temp[0]를 바꾸면 tem[0]도 바뀌고 그런식이 된다. 그럼 값만 취하고 싶다면? temp[0]=tem[0]; 일일이 이렇게 해주는수 밖에 없다. 더보기
Parameter passing과 Lazy evaluation 모든 프로그래밍 언어에는 그 각자의 parameter passing 방법과 lazy evaluation방법이 있는데, 코딩을 할때에는 그 각각을 그냥 생각없이 쓰면 아무 문제 없다만, 모든 PL(Programming Language)의 문법에는 뜻이 있으므로, 여기서 한번 이 내용들을 정리하고 뜻을 생각 해 보고자 써본다. 프로그래밍 언어를 공부하는데 도움이 될 것이다. Parameter passing과 Lazy evaluation, eager evaluation과의 관계는 땔래야 땔 수 없으므로 같이 설명하도록 하겠다. Parameter Passing(매개변수전달) 방법은 어떤 함수에서 Parameter를 어떻게 전달할 것인가를 다룬다. 예를 들어 int function(int a, int b){ if.. 더보기
[CG] Pitch, Roll, Yaw CG에서 각 방향 회전을 영어로 표현하는 말이 있는데 각 방향으로의 회전을 의미하는 것이 Pitch, Roll, Yaw 이다. 뭐 x축회전, y축회전 등 이라고 얘기하면 될 꺼, 이런건 중요하지 않으니까 안외워도 된다, 라고 하지만 너무나도 Graphics관련, 사용자 인터페이스 관련해서 많이 쓰이는 용어니까 꼭 일아 두도록 하자. 아래 예들은 손바닥과 손가락을 곧게 펴고 손가락을 모니터로 가리킬때를 기준으로 설명하였다. 1. Pitch 야구에서 처럼 야구선수수가 공을 던지는 것과 같은 방향이라는 의미로, 던질때 손목을 이용한 위아래 회전을 의미한다. 손으로 부채질할때 손을 까딱까딱 하는 회전 (사람 얼굴로 말하면 끄덕끄덕) 축으로 말하면 손바닥 좌우를 잇는 연장선을 축으로 하는 회전 2. Yaw 손목 .. 더보기
[C언어] 배열을 동적할당하기 C언어에서는 C++이나 JAVA와 달리 int a[userinputSize] ; 또는 int a[] = new input[size] 이런식으로 어떠한 변수나 입력값이 변수길이에 오지 못하게 제어해놓았다. 그럼 문제는 유저가 이 배열을 몇개나 쓸꺼냐 하는 것을 미리 알지 못하기 때문에, 이러한 배열을 만들어서 사용하려면 동적할당을 이용해야 한다. -참고로... 무식한 방법인 int a[1000]; 과 같은 방법을 사용해버리면, 돌아는 간다. 하지만 그대는 전산학도로서 발전이 없으리라... 저상태에서 유저가 배열을 10개정도만 사용한다면 990개의 메모리 공간이 버려지는 셈이다. 전산의 생명은? 효율! C언어에서 동적할당 하는 방법을 메모해 놓고자 한다. 1. 일차원배열 int *input; int stat.. 더보기
I2C IO-expander를 이용한 keypad의 구현 Embedded System Project 에서 구현했던 것들... Embeddad System 에서 하는 프로젝트는 Atmega32, 서보모터, LCD, keypad 등을 이용해서 자동차를 설계하고, 그 자동차를 트렉을 따라갈 수 있게 설계하고, 그 트렉에 대한 알고리즘과 한바퀴 도는데 걸리는 최소시간을 가지고 점수를 매기는 프로젝트였다. 외국에서 하는 처음프로젝트였는데 꽤나 재미있는 프로젝트였다. 막상할때는 정말 어렵다고 생각했었는데, 하고나면 -_- 정말 쉬워보인다 제길... 1. Servo motor _ 서보모터 (앞선 글을 참조하도록...) 2. 4x4 matrix Keypad _ 키패드 3. Tachometer _ 타코미터 4. Delay _ 정확한 딜레이 이번시간은 키패드구현에 대해서 말해보.. 더보기