Home

효율적인 c++ - 2.스코프와 스마트포인터

개요 c/c++의 스코프와 raii 디자인 패턴에 대해 설명하고, raii 디자인 패턴을 따르는 c++11 표준 구현체인 스마트포인터에 대해서 설명합니다. 스마트 포인터는 스코프와 raii 디자인 패턴을 이용해 자원의 해제를 자동으로 수행합니다. 스코프 스코프(Scope)는 C++에서 변수와 함수의 유효 범위를 정의하는데 사용되는 개념입니다. 스코프를 이해하는 것은 변수의 생존 기간과 접근 가능성을 이해하는 데 도움이 됩니다. 스코프는 아래와 같은 종류가 있습니다. 블록 스코프 (Block Scope) 블록 내에서 선언된 변수는 해당 블록의 스코프에서만 유효합니다. if, for 같은 선...

Read more

효율적인 c++ - 1.Reference

서론 현재 다니고 있는 직장은 c++로 된 프로젝트가 메인 프로젝트 입니다. 몇 년간 쌓여온 레거시가 c 스타일의 코드들로 되어있는데, 최근 리팩토링 요구가 있어 팀원들의 c++ 이해도를 높이기 위한 팀내 세미나를 진행하고 있습니다. 팀내 세미나 진행 내용을 블로그에도 적어두려고 합니다. 우선적으로 기존 코드에 많이 산재되어있는 c 스타일의 raw 포인터를 대체할 수 있는 방법에 대한 세미나를 진행하였고, 첫 세미나 시간은 c++ 레퍼런스 문법에 대해 진행하였습니다. 포인터 최소화 - reference와 const c++ 레퍼런스는 c의 포인터를 대체하기 위한 문법입니다. 특히 함수의 입력 파라메터 call b...

Read more

opencv stereo rectify 사용법

stereo vision에서 depth를 이용할때, rectify를 이용하면 계산이 조금 더 간단해 집니다.(사실 여전히 간단한진 잘 모르겠습니다) 저는 두 카메라에서의 특징점 discriptor를 더 수월하게 찾기 위해서 사용했습니다. 다만 인터넷상에 opencv stereo rectify 함수를 이용해 world coordinates 의 좌표를 구하는 포스팅은 별로 없어 보입니다. 일단 카메라 파라메터와 에피폴라에 대한 이해가 필요합니다. 이 문서에서 설명하는 전체적인 과정은 다음과 같습니다. opencv의 stereoRectify 함수를 이용해서 두 카메라에서 rectified 이미지를 얻어냅니다. 여러 ...

Read more

stereo vision을 이용해서 월드 좌표 얻기

카메라 한대에서 인트린식, 익스트린식 파라메터를 구해서 얻을수있는 좌표는 카메라 좌표에서 z 축이 없는 좌표. 여기에서 캘리브레이션을 진행해 얻을수 좌표는 캘리브레이션을 진행한 평면상에서의 월드 좌표. 이때, 해당 평면상 에서의 움직임만 알수있음 우리가 원하는건 XYZ를 다 가진 월드좌표인데… 이러려면 stereo vision을 사용해야함 epipolar geometry see https://en.wikipedia.org/wiki/Epipolar_geometry 기본적으로, stereo vision으로 월드좌표계의 점을 구하려면… 픽셀좌표계에서의 시차를 이용해서 계산하게 된다. 그러면 시차는 어떻게 정해지는가...

Read more

카메라 파라메터

다크프로그래머님의 글을 보고 나름대로 정리 진행한 글 지금 써진 글처럼 인용을 통해 내가 생각하는점, 추가 서술등을 작성했습니다. 카메라 캘리브레이션 (Camera Calibration) - https://darkpgmr.tistory.com/32 카메라 캘리브레이션이란 3차원 세상 좌표를 2차원 카메라 이미지에서 복원해야함 이미지상의 좌표가 실제로 3차원에서 어느좌표인가? “기하학적으로는” 카메라 위치, 방향 그러나 실제로는 렌즈, 렌즈와 센서간 거리 등 카메라 내부 기구적 요인도 크다 내부 기구적 요인을 제거하기 위한 intrinsic para...

Read more

pytorch 직접 데이터 로더 만들고 이미지 학습시키기

Dataloader의 필요성 파이토치 튜톨리얼을 따라하면서 딥러닝을 배우다보면 기본적으로 데이터 셋이 모두 준비되어있어 따라하기만 하면 학습을 진행 할 수 있다. 하지만 우리가 딥러닝을 배우고자 했던 목표는 자신의 이미지를 가지고 학습 시켜 자신의 프로젝트를 진행하는 거였을꺼다. 이를 위해서 알아야 하는게 dataloader다. 이 포스트에서는 pytorch cifar10 튜톨리얼을 응용해서 직접 cifar10 데이터를 로드하고, 학습시켜 본다. 대략적인 구조 우리가 학습하고자 하는 데이터 셋에 대해 Dataset 클래스로 정의한뒤, Dataloader 클래스에 인수로 주면 network에서 우리의 데이터를...

Read more

일렉트론 12 렌더링 프로세스에서 node 사용하는 방법

Main 과 Renderer 프로세스 일렉트론에는 크게 두개의 프로세스 종류가 있다. 메인프로세스와 렌더러 프로세스 두 종류의 프로세스를 사용한다. 메인프로세스는 머플리케이션의 윈도우 창을 생성하고 관리하는 역활을 하며, 렌더러 프로세스는 윈도우 창 내에서 웹페이지를 렌더링하는 역활을 한다. 렌더링 프로세스와 메인프로세스간에는, IPC를 통해 통신 할 수 있다. 메인 프로세스는 윈도우 창을 관리하는 역활을 하기때문에, 가능한 작업(i/o 등)들은 메인프로세스에서 하면 안된다. 혹시 메인프로세스에서 이러한 작업이 발생하게 되면, 프로그램은 해당 작업이 끝날때까지 응답없음 상태가 되어버린다. 하지만 렌더링 프로세스...

Read more

TMUX사용법

what is tmux? 개요 GUI 환경에서 터미널을 사용하다보면, 탭을 사용하거나 창을 사용하여 여러창을 띄워놓고 사용하곤 한다. 이러면 원하는 터미널 창을 찾기 힘들때가 많다. 이럴때, 터미널 화면을 분할해서 사용하기 위한 방법이 바로 tmux 이다. site : https://github.com/tmux 컨셉 session : 하나 혹은 여러개의 윈도우를 말한다. tmux를 실행하면 하나의 session이 실행된다. window : 하나 혹은 여러개의 pane을 가르킨다. pane : window 내에 실행되는 터미널을 지칭한다. 한번에 하나의 pane이 활성화 된다. pane...

Read more