suyeongpark

지성을 추구하는 디자이너/ suyeongpark@abyne.com

OpenCV로 배우는 영상 처리 및 응용/ OpenCV 인터페이스 기초/ 사용자 인터페이스 및 I/O 처리

윈도우 창 제어

반환형 이름 파라미터 내용
void namedWindow const string& winname, int floats = WINDOW_AUTOSIZE 윈도우의 이름을 설정하고 해당 이름으로 윈도우를 생성한다.
<윈도우의 크기 조정 옵션>
WINDOW_NORMAL – 0 – 윈도우의 크기 재조정 가능
WINDOW_AUTOSIZE – 1 – 표지될 행렬의 크기에 맞춰 자동 설정
WINDOW_OPENGL – 8 – OpenGL을 지원하는 윈도우 생성
void imshow() const string& winname, InputArray mat Winname 이름의 윈도우에 mat 행렬을 영상으로 표시한다.
해당 이름의 윈도우가 없으면 winname 이름으로 창을 생성하고, 영상을 표시한다.
void destroyWindow() const string& winname 인수로 지정된 타이틀의 윈도우를 파괴한다.
void destroyAllWindows()   HighGUI로 생성된 모든 윈도우를 파괴한다.
void moveWindow() const string& winname, int x, int y Winname 이름의 윈도우를 지정된 위치(x, y)로 이동시킨다. 이동되는 윈도우의 기준 위치는 좌상단이다.
void resizeWindow() const string& winname, int width, int height 윈도우의 크기를 재설정한다.

이벤트 처리 함수

반환형 이름 파라미터 내용
int waitKey int delay = 0 delay(ms) 시간만큼 키 입력 대기하고, 키 이벤트가 발생하면 해당 키 값을 반환한다.
void setMouseCallback() const string& winname, MouseCallback onMouse, void* userdata = 0 사용자가 정의한 마우스 콜백함수를 시스템에 등록하는 함수
void (*MouseCallback)()   발생한 마우스 이벤트에 대해서 처리 및 제어를 구현하는 콜백 함수이다.
setMouseCallback() 함수의 두 번째 인수(함수포인터)의 구현 부이기 때문에 함수명이 인수명과 같아야 한다
typedef 통해서 함수포인터로 정의되어 있어 인수의 구조를 유지해야 함
int createTrackbar() const string& trackbarname, const string& winname, int value, int count, TrackarCallback onChange = 0, Void* userdata = 0 트랙바를 생성하고, 그것을 지정된 윈도우 창에 추가하는 함수
int getTrackbarPos()   지정된 트랙바의 슬라이더 위치를 반환 받는다
void setTrackbarPos()   지정된 트랙바의 슬라이더 위치를 설정한다.

그리기 함수

반환형 이름 파라미터 내용
void line Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness = 1, int lineType = 8, int shift = 0 선 그리기
void rectangle Mat& img, Point pt1, Point pt2, const Scalar color, int thickness = 1, int lineType = 8, int shift = 0 사각형 그리기
void rectangle Mat& img, Rect rec, const Scalar color, int thickness = 1, int lineType = 8, int shift = 0 사각형 그리기
void putText Mat& img, const string& text, Point org, Int fontFace, double fontSacle, Sclar color, int thickness = 1, int lineType = 8, bool bottomLeftOrigin = false 글자 쓰기
void circle Mat& img, Point center, int radius, const Scalar& color, int thickness = 1, int lineType = 8, int shift = 0 원 그리기
void ellipse Mat& img, Point center, Size axes, double angle, double startAngle, double endAngle, const Scalar& color, int thickness = 1, int lineType = 8, int shift = 0 타원 그리기
void ellipse Mat& img, const RotatedRect& box, const Scalar& color, int thickness = 1, int lineType = 8, int shift = 0 타원 그리기

이미지 파일 처리

반환형 이름 파라미터 내용
Mat imread() const string& filename, int flags = 1 지정된 파일로부터 영상을 로드하여 Mat 클래스로 반환한다
bool imwrite() const string* filename, InputArray img, const vector<int>& params = vector<int>() 지정된 파일에 img 행렬을 영상으로 저장한다.

비디오 처리

VideoCapture

반환형 이름 파라미터 내용
VideoCapture()   생성자
bool open()   동영상 캡쳐를 위한 동영상 파일 혹은 캡쳐 장치를 개방한다.
bool isOpened()   캡쳐 장치의 연결 여부를 반환한다.
bool release()   동영상 파일이나 캡쳐 장치를 해제한다.
double get()   비디오 캡쳐의 속성 식별자로 지정된 속성의 값을 반환한다. 캡쳐 장치가 제공하지 않는 속성은 0을 반환한다.
bool set()   지정된 속성식별자로 비디오캡쳐의 속성을 설정한다.
bool grab()   캡쳐 장치나 동영상 파일로부터 다음 프레임을 잡는다.
bool retrieve()   grab()으로 잡은 프레임을 디코드해서 image 행렬로 전달한다.
bool read(), >>   다음 동영상 프레임을 잡아서 디코드하고 image 행렬로 전달한다. 즉, grab()과 retrieve()를 동시에 수행한다.

VideoWriter

반환형 이름 파라미터 내용
VideoWriter   생성자
bool open()   영상을 동영상 파일의 프레임으로 저장하기 위해 동영상 파일을 개방한다.
bool isOpened()   동영상 파일 저장을 위해 VideoWriter 객체의 개방 여부를 확인한다.
void write(), <<   image 행렬(프레임)을 동영상 파일로 저장한다.

데이터의 파일 저장 및 읽기

FileStorage

반환형 이름 파라미터 내용
FileStorage()   생성자
bool open()   파일 열기
bool isOpened()   클래스에 지정된 파일이 열려 있는지 확인.
bool release()   파일을 닫고 모든 메모리 버퍼를 해제한다.
void writeRaw()   다중의 숫자들을 저장한다. 데이터를 raw 파일로 저장한다.

FileNode

반환형 이름 파라미터 내용
FileNode()   생성자
string name()   노드 이름을 반환한다.
size_t size()   노드에서 원소의 개수를 반환한다.
bool empty()   노드가 비어있는지 확인한다.
bool isNamed()   노드가 이름이 있는지 확인한다.
bool isNone()   노드가 “none” 객체인지 확인한다.
bool isInt() isReal()   노드타입이 정수형, 실수형인지 확인한다.
bool isString()   노드타입이 문자열형인지 확인한다.
bool isMap(), isSeq()   노드의 종류가 매핑인지 시퀀스인지 확인한다.

데코수학/ 다변수벡터함수의 곡선적분

개념

  • 벡터장 \vec{F} : \mathbb{R}^{n} \to \mathbb{R}^{n} , 곡선 C \subseteq \mathbb{R}^{n} (C : 조각적으로 미분가능, \vec{F} : 연속)
    • 선 C가 조각적으로 미분가능이므로 선 C 위에 있는 점을 \vec{x}_{1}, \vec{x}_{2}, ... , \vec{x}_{n} 으로 분할 하면 i번째 조각은 \vec{x}_{i} - \vec{x}_{i-1} 이 되고,
    • 이때 이 조각을 이동하는데 받은 일의 양은 \vec{F}(\vec{x}_{i}) \cdot (\vec{x}_{i} - \vec{x}_{i-1}) 가 된다.
    • 그러므로 C를 이동하면서 받은 총 일의 양은 \sum_{i = 1}^{n} \vec{F}(\vec{x}_{i}) \cdot (\vec{x}_{i} - \vec{x}_{i-1}) 이다.
    • 조각들의 길이가 0이 되도록 분할하면 \int_{\vec{x} \in C} \vec{F}(\vec{x}) \cdot d \vec{x} 가 된다.
  • C : \vec{\alpha}(t), a \leq t \leq b 로 매개화 된 경우, C를 \vec{\alpha}(t_{0}), \vec{\alpha}(t_{1}),  ... , \vec{\alpha}(t_{n})  로 분할
    • \sum_{i=1}^{n} \vec{F}(\vec{\alpha}(t_{i})) \cdot (\vec{\alpha}(t_{i}) - \vec{\alpha}(t_{i-1}))
    • = \sum_{i=1}^{n} \vec{F}(\vec{\alpha}(t_{i})) \cdot ({\vec{\alpha}(t_{i}) - \vec{\alpha}(t_{i-1}) \over (t_{i} - t_{i-1})} (t_{i} - t_{i-1}))
    • = \int_{a}^{b} \vec{F}(\vec{\alpha}(t)) \cdot \dot{\vec{\alpha}}(t) dt

19.04.20

주식 시장에 미치는 경제의 영향력이 작아지고 있는 이유

역설적이게도 미국 경제가 성숙되면서, 경제가 주식 시장의 손실에 미치는 영향이 줄어들고 있다. 

지난 금융 위기로 인한 주가 하락이 심각하긴 했지만, 1937년, 1973~1974년, 2000~2002년 및 2007~2009년에 발생했던 50% 이상의 주가 하락은 주식 시장이 경제 활동의 위축을 그렇게 많이 신경 쓰지 않는다는 점을 보여준다.

그냥 내가 보기에 정부에서 부양책을 쓰고 그에 따라 유동성이 주식 시장으로 흘러 들어가기 때문에 실물 경기가 바닥을 쳐도 주식 시장의 손실이 적은 것이지 경제가 성숙되면서 그런 것은 아닌 듯.

정부의 부양책으로 한계가 오는 시기가 되면 다시 실물 경기에 수렴할 것인데, –사회의 사이클은 개인의 인내심 보다 훨씬 길다. 적어도 5-10년은 봐야 함– 현재 경기가 좋지 않고 앞으로의 전망도 좋아 보이지 않음을 생각해 보면 거품이 꺼지는 시기는 온다고 본다.

리디노미네이션 장단점과 다른 나라 사례 정리

화폐단위 변경에 따른 부정적 효과
첫째, 인플레이션 우려다. 
둘째, 가장 큰 걸림돌은 부동산이다. 

화폐단위 변경에 따른 긍정적 효과
첫째, 화폐단위 변경에 따른 새로운 교체수요다. 
둘째, 지하경제 양성화다.

요즘 리디노메이션 얘기가 많아서 정리.

뇌도 훈련시키면 변화한다

명상이나 기도, 강력한 자기 암시 등이 실제로 정신 영역에 영향을 미친다는 사실이 과학적으로 입증됐다. 뉴로피드백을 이용해 뇌를 1시간 이내로 훈련시킨 결과 뇌 영역들 사이의 신경 연결과 소통이 강화되었다는 연구가 나왔다.

뇌든 근육이든 쓰면 쓸수록 좋아진다.

빅뱅이론 증거 찾았다

미국과 독일 공동 연구진은 지난 17일(현지 시각) 국제학술지 '네이처'에 "지구로부터 3000광년(1광년은 빛이 1년 가는 거리) 떨어진 백조자리에서 우주에서 처음 생긴 분자인 수소화헬륨을 관측했다"고 밝혔다. (중략)

천문학계에서는 수소화헬륨을 우주 진화의 시발점으로 여긴다. 우주가 식고 수소화헬륨과 수소 원자가 결합하면서 비로소 별과 은하의 주원료인 수소 분자가 탄생했다는 것이다.

그렇다고 합니다.

러셀 서양철학사/ 성 아우구스티누스의 철학과 신학

  • 플라톤과 아리스토텔레스는 신이 조물주가 아니라 제작자이거나 설계자라고 이야기 함.
    • 그들은 물질이 영원한 것이므로 창조되지 않으며, 형상만 신의 의지에서 비롯된 것이라고 생각 했음.
  • 순수 철학
    • 이와 달리 아우구스티누스는 세계란 물질에서 창조되지 않고 무에서 창조되었다고 주장.
      • 신은 질서와 배열 뿐만 아니라 물질도 창조하셨다.
      • 무에서 일어나는 창조가 불가능하다는 그리스인의 견해는 그리스도교 시대가 지나는 동안 간헐적으로 등장해 범신론으로 이어짐.
      • 범신론에서는 신과 인간을 구분하지 않기 때문에 세상 만물은 신의 일부이다. 이러한 범신론은 스피노자 철학 속에서 가장 완벽한 형태로 발전하며 거의 모든 신비주의자들이 매력을 느끼는 견해이다.
    • 세계가 창조되는 순간에 시간도 창조되었다.
      • 신은 시간을 초월한 존재라는 의미에서 영원하다. 신 안에서는 이전과 이후가 없기 때문에 현재만 영원히 존재할 따름이다. 신의 영원성은 시간 관계에 구애받지 않는다. 신에게 모든 시간은 동시에 존재한다.
    • 아우구스티누스는 현재를 제외하고는 과거도 미래도 실재하지 않는다고 주장. 과거는 기억과 동일하고 미래는 기대와 동일하다.
      • 하지만 아우구스티누스는 스스로도 실제로 자신의 시간 이론을 통해 모든 난점을 해결하지 못했다고 깨달음.
    • (러셀의 평)
      • 나는 아우구스티누스의 이론에서 시간을 마음과 관련시킨 부분에 동의하지 않지만, 그의 시간 이론은 분명히 진지하게 고찰해볼만한 뛰어난 이론이다.
      • 아우구스티누스의 이론은 그리스 철학에서 시간을 주제로 다룬 어떤 이론보다 훨씬 앞섰고, 칸트의 주관적인 시간 이론보다 더 우수할 뿐만 아니라 명료한 주장을 포함하고 있으며, 칸트 이후 철학자들이 수용하게 되는 이론임.
  • 신국
    • 로마 약탈 기간에 능욕당한 독실한 처녀들에 대한 입장
      • 다른 사람의 육욕이 당신을 더럽힐 수 있는 것이 아니다. 정결은 마음의 덕이므로 능욕을 당해 잃어버리는 것이 아니라, 비록 실행에 옮기지 않았더라도 죄를 지으려는 의도가 있으면 잃게 된다.
    • 아우구스티누스는 이교도의 신이 실제로 존재하기는 하지만 악마들이라고 주장.
    • 점성술은 사악할 뿐만 아니라 거짓으로 가득하다. 점성술과 관련된 스토아 학파의 운명 개념이 착오인 까닭은 천사와 인간에게는 자유의지가 있기 때문.
    • 아우구스티누스는 플라톤을 어느 철학자들보다 우위에 놓음.
    • 아우구스티누스는 모든 감정을 비난한 스토아 학파에 반대해 그리스도교도의 감정은 덕성을 높이는 원인이 되기도 한다고 주장.
    • 아우구스티누스는 플라톤처럼 감각계는 영원한 세계보다 열등하다고 주장.
    • 축복 받은 만물은 영원하지만, 영원한 모든 존재가 축복받은 것은 아니다. 지옥과 사탄은 축복 받지 못한다.
    • 세계가 6일 동안 창조된 까닭은 6이 완전수이기 때문이다.
    • 세계는 6천년 되었으며, 몇몇 철학자들이 가정하듯 주기적으로 반복하지 않는다.
    • 아담의 죄로 인류가 영원한 죽음에 이르게 말았지만, 신의 은총으로 많은 사람들이 영원한 죽음을 면했다.
    • 죄는 육신이 아니라 영혼에서 비롯되었다.
    • 결혼한 부부가 자손을 낳기 위해 하는 성교만 죄가 없다고 인정
    • 부활에는 두 가지, 곧 죽을 때 일어나는 영혼의 부활과 최후의 심판에 날에 일어나는 육신의 부활이 있다.
    • (러셀의 평)
      • 신국에는 독창성이 돋보이는 중요한 사상은 들어 있지 않다. 종말론은 유대교에 원래 있던 사상으로서 주로 <요한 묵시록>을 통해 그리스도교에 들어 왔다.
      • 예정조화설과 선민사상은 사도 바울로의 가르침
      • 성스러운 역사와 세속의 역사를 나눈 구분은 구약성서에 제시되어 있음.
      • 아우구스티누스의 업적은 앞선 요소들을 한데 묶어 당대의 역사와 관련 시킴으로써 그리스도교가 서로마 제국의 멸망과 이후 혼란기를 거치는 동안 신앙의 시험을 너무 심각하게 받지 않으면서도 이러한 요소들을 흡수하게 되었다고 해석한 점.
      • 유대 민족의 과거와 미래 역사는 어느 시대에나 억압받고 불행한 사람들의 마음을 강하게 끌어 당기는 모형이었다. 성 아우구스티누스는 유대 민족의 역사 모형을 그리스도교에 맞게 변형했고, 맑스는 사회주의에 맞게 변형했다.
        • 야훼 = 변증법적 유물론
        • 구세주 = 맑스
        • 선민 = 프롤레타리아
        • 교회 = 공산당
        • 그리스도의 재림 = 혁명
        • 지옥 = 자본가의 처벌
        • 천년왕국 = 공산사회
  • 펠라기우스 논쟁
    • 아우구스티누스 신학에서 영향력이 가장 큰 부분은 펠라기우스에 맞선 논쟁과 관련 있음.
    • 아우구스티누스는 타락 이전의 아담은 자유의지를 지니고 있어 죄를 삼갈 줄 알았으나, 선악과를 먹었기 때문에 타락했고, 그들의 모든 후손에게 타락의 죄가 전해져 그들 가운데 아무도 자기 자신의 힘만으로는 죄를 피하지 못한다. 신의 은총을 받아야만 인간은 유덕한 존재가 된다.
      • (현세에 복을 받는 것이 증명되지 않으니 내세를 약속하게 되고, 현세에 화를 입는 것은 애초에 원죄를 지니고 태어났기 때문이라는 논리 전개. 이리 안 풀리는 것은 네가 원죄를 갖고 태어났기 때문이고 일이 잘 풀리면 네가 신의 은총을 받아 복을 받았기 때문이라는 논리)
    • 신의 선택을 받은 사람들에게 내리는 신의 은총이 아니라면 타락한 상태에서 도저히 벗어날 수 없다.
    • 천벌은 신의 정의를 보여주며, 구원은 신의 자비를 보여준다. 천벌과 구원 모두 신의 선함을 드러낸다.
    • (러셀의 평)
      • 중세 교회가 저지른 잔인하기 그지없는 행적의 원인은 대부분 아우구스티누스의 음울한 보편적 죄의식까지 거슬러 올라간다.

러셀 서양철학사/ 교회의 세 박사

  • 서방 교회의 박사로 불리는 네 사람은 성 암브로시우스, 성 히에로니무스, 성 아우구스티누스, 그레고리우스 대교황이다.
    • 앞선 세 박사는 동시대에 살았음.
  • 암브로시우스, 히에로니무스, 아우구스티누스는 모두 가톨릭 교회가 로마 제국에서 승리를 거둔 후 야만족이 침임하기 전까지 짧은 시간 동안 활약함.’
    • 이들의 사후 천 년이 흐를 때까지도 그리스도교 세계는 학문과 문화의 측면에서 그들에 필적하는 인물을 다시 배출하지 못함. 암흑기와 중세기 내내 세 박사의 권위는 존중 됨.
    • 그들은 교회 형성의 기틀을 세우는데 크게 기여 함.
  • (이하 세 인물의 생애에 대한 내용 생략)

러셀 서양철학사/ 초기 그리스도교

  • 그리스도교는 처음에는 유대교의 개혁을 목표로 유대인이 유대인에게 설교한 가르침이었음.
    • 성 야고보와 성 베드로는 그리스도교가 유대교를 개혁하는 수준에 머물기를 바랐지만, 성 바울로는 이방인들을 포용하는 방향으로 나아감.
    • 성 바울로는 이방인들을 포용하기 위해 할례나 모세 율법의 준수를 주장하지 않기로 함.
  • 그리스도교는 일찍부터 유대인들에 적대적이었음.
    • 당시 공인된 견해는 그리스도의 도래를 예언 했지만, 유대인들은 그분을 알아보지 못했고, 그 이후 유대인들은 사악한자들로 여겨졌음.
    • 게다가 그리스도는 모세의 율법을 폐기하고 하느님을 사랑하고 이웃을 사랑하라는 두 가지 계명을 가르침.
    • 유대인들은 율법을 고집했기 때문에 그리스도의 가르침도 알아보지 못 함.
  • 그리스도교가 그리스 문화에 동화되는 정도에 비례하여 그리스도교 신학도 발전함.
    • 유대교 신학은 단순했는데, 야훼는 부족 신에서 하늘과 땅을 창조한 전능한 유일신으로 발전함.
    • 하느님의 정의는 지상에서 덕을 갖춘 사람들에게 번영을 보장해주지 못하자 천국으로 양도 되었고, 이것은 영혼 불멸 신앙을 수반함.
    • 유대교의 신경에 복잡하고 형이상학적인 요소는 하나도 추가되지 않았는데, 유대교의 신경에는 신비적인 요소가 없었기 때문에 유대인이라면 누구나 이해할 수 있었음.
  • 유대교의 단순성은 대체로 공관 복음서(마태오 복음서, 마르코 복음서, 루가 복음서)의 특징이기도 하지만, 성 요한에 이르면 그렇게 단순한 특징은 사라지고 그리스도를 플라톤 학파와 스토아 학파에서 말하는 로고스와 동일시 함.
  • 그리스 철학과 히브리 경전의 종합은 오리게네스의 시대에 이르기 전까지는 계획성 없이 단편적으로 이루어짐.
    • 오리게네스는 성부, 성자, 성령 이외에 완전히 영적인 존재는 없다고 말 함.
    • 그리스도교는 국가의 정치에 참여해서는 안되고 오로지 신성한 나라, 즉 교회의 정치에만 참여해야 한다고 말 함.
  • 교회 정치 조직은 첫 3세기 동안 느리게 발전했으나, 콘스탄티누스 대제의 개종 이후 아주 빠르게 세력을 확장해 나감.
  • 기번은 그리스도교 성장의 원인을 5가지로 정리함.
    • 이방인을 받아들이지 못하게 막던 편협하고 비사회적인 정신을 씻어냄 + 이단을 관용하지 않는 종교적 열의
    • 강화하고 유효하게 만들 여건이 조성될 때마다 개선한 내세 교리
    • 초기 교회의 특징인 기적의 영향력
    • 그리스도교도의 순수하고 엄격한 도덕
    • 로마 제국의 심장부에서 시작하여 점차 강한 독립국가로 형성 되어나간 그리스도교 사회의 통합과 규율
  • 내세 교리는 서방에서 오르페우스교도가 처음 가르친 이후 그리스 철학자들이 받아들임.
    • 히브리 예언자들 가운데 몇은 육체의 부활을 가르쳤는데, 유대인은 그리스인의 영향으로 영혼의 부활을 믿게 됨.
    • 그리스에서 영혼 불멸은 오르페우스교의 형태로 대중의 인기를 끌었고, 학문의 형태로는 플라톤 철학으로 나타남.
    • 오르페우스교와 아시아 종교의 신비적 요소들이 그리스도교 신학에 대량으로 유입되었는데, 이런 모든 요소들의 중심에 놓인 신화는 죽은 신이 다시 살아난다는 것.
  • 테오도시우스 황제가 가톨릭교를 전폭적으로 지지함으로써 가톨리교가 로마 제국 전역에 걸쳐 영향력을 얻음.

러셀 서양철학사/ 유대교의 발전

  • 후기 로마가 야만인들에게 넘겨준 그리스도교는 세가지 요소로 구성됨
    • 철학에서 유래한 몇 가지 믿음으로, 주로 플라톤과 신플라톤 학파 철학자들에게서 비롯되지만 일부는 스토아 학파에서 유래함.
    •  유대인들에게서 유래한 도덕 개념과 역사 개념
    •  그리스도교의 새로운 특징이라 할 만한 몇 가지 이론 중 특히 구원 이론. 일부는 오르페우스교와 근동 지역의 유사한 이교 종파에서 유래한다.
  • 그리스도교 안에서 가장 중요한 유대교 요소
    • 신이 인간에게 행한 일들에 정당성을 부여하는 성스러운 역사
    • 신이 특별히 사랑하는 소규모 인간 집단의 존재.
      • 이 집단이 유대인들에게는 신이 선택한 민족이고, 그리스도교에게는 신의 선민이었음.
    • 의로운(righteousness)이라는 새로운 개념
    • 율법
    • 구세주
    • 천국
  • 유대교는 바빌론 유수 시기를 전후해 획기적으로 발전함.
    • ‘나 이외의 다른 신을 섬기지 말라’
  • 바빌론 유수는 예언자들이 가한 공공연한 비난의 정당성을 보여주는 사건으로 생각 됨.
    • 만약 야훼가 전능한 존재일 뿐만 아니라 유대인들이 신의 선택을 받은 민족이었다면, 유대인들이 당하는 고통은 그들의 사악함 탓으로 설명할 수 밖에 없을 것이다.
    • 이는 부모가 자식을 타이르기 위해 벌을 주는 심리 상태와 유사한 것으로, 유대인들은 벌을 받음으로써 정화되어야 한다.
    • 이러한 믿음의 영향으로 유대인들은 바빌론 유수 시대를 살면서 독립된 나라에서 사는 동안 보편화 되었던 정통 신앙보다 훨씬 더 엄격하고 민족주의 관점에서 훨씬 더 배타적인 정통 신앙을 발전시켰다.
    • 바빌론으로 이주하지 않고 뒤에 남은 유대인들은 그런 발전을 경험하지 못했다.
  • 유대 민족과 다른 고대 민족을 구별하는 특징은 다른 민족들은 정복당하면 외면 뿐 아니라 내면으로도 복종했는데, 유대인들은 유독 민족적 탁월성을 믿고 계속 믿으며, 자신들이 겪는 불행이 신앙과 종교의식의 순수성을 잃은 탓에 신의 노여움을 샀다고 확신했다는 점.
  • 희생제물을 바칠 성전이 파괴되었던 탓에 제물을 바치는 의식은 유대 종교에서 사라질 수 밖에 없었음.
  • 안식일 강조, 할례 강조, 이방인과 혼인을 금지하는 배타성도 유수 기간에 생겨남.
  • 이 시기 유대인들 사이에 영혼 불멸을 믿는 경향이 널리 퍼짐.
    • 원래 덕은 지상의 삶 속에서 보답을 받을 것이라 생각했는데, 덕망 있고 고결한 자들이 박해를 당하자 이런 생각이 현실과 맞지 않는다는 점이 명백해짐.
    • 그러므로 신이 의로우심을 보증하려면 보상과 처벌이 내세에 이루어진다고 믿을 수 밖에 없었음.
  • 유대인들은 바빌론 유수 기간 동안 바빌로니아인들에게서 무역을 배움.
  • 정통 유대교는 예루살렘의 함락 이후 이전에 느부갓네살이 예루살렘을 함락시킨 이후와 마찬가지로 점점 더 정통을 고집하며 편협해짐.
    • 중세 시대 내내 유대인들은 그리스도교 국가들의 문화 형성 과정에서 아무 역할도 하지 못했는데, 박해가 너무 심해 문명에 공헌할 기회가 없었고, 그들이 할 수 있는 일이란 성당 건축 사업에 자금을 대는 일이 전부였음.
    • 당시 이슬람교도들은 유대인들을 인간답게 대접한 유일한 사람들이었으며, 그들의 호의로 유대인들은 철학을 추구하고 사색을 펼치며 가르칠 수 있었음.
    • 중세 시대 내내 이슬람교도는 그리스도교보다 문명을 더욱 발전시켰을 뿐만 아니라 인간다운 면에서도 훨씬 훌륭했음.
    • 유대인들은 무어인이 지배하는 스페인에서 학문 발전에 공헌하기도 함.
    • 유대인들은 학식이 모자라는 스콜라 철학자들에게 풍부한 지식을 가르쳐 줌. 또 그들은 그다지 바람직하지 못한 지식, 예컨대 연금술과 점성술도 전해 줌.

OpenCV로 배우는 영상 처리 및 응용/ OpenCV의 기본 자료 구조

기본 템플릿 클래스

Point

멤버

타입 이름 내용
T x X 값
T y Y 값

함수

타입 이름 내용
T dot() 내적
double corss() 외적
bool inside() Point가 Rect 안에 있는지 여부

Point3

멤버

타입 이름 내용
T x X 값
T y Y 값
T z Z 값

함수

타입 이름 내용
T dot() 내적
double corss() 외적

Size

멤버

타입 이름 내용
T width Width 값
T height Height 값

함수

타입 이름 내용
T area() 내부 영역의 넓이 (Width x Height)

Rect

멤버

타입 이름 내용
T x X 값
T y Y 값
T width Width 값
T height Height 값

함수

타입 이름 내용
Point tl() 좌상된 좌표 반환
Point br() 우하단 좌표 반환
Size size() 사각형의 크기를 Size 형으로 반환
T area() 내부 영역의 넓이 (Width x Height)
bool contains() 사각형 내부에 좌표가 있는지 확인

Vec

  • Template 클래스
  • [ ]를 이용하여 원소들에 접근할 수 있다.
  • mul

함수

타입 이름 내용
T mul() 벡터의 element-wise 곱을 계산한다.

Scalar

  • Vec<Tp, 4>에서 파생된 템플릿 클래스로서 4개의 원소를 갖는다.
  • OpenCV에서 특별히 화소의 값을 지정하기 위한 자료형으로 정의되었으며 RGBA 4개의 값을 저장한다.

RotatedRect

  • 회전된 사각형을 나타내기 위한 클래스

멤버

타입 이름 내용
Point2f center 중심점
Size2f size 크기
float angle 회전된 각도

함수

타입 이름 내용
Rect boundingRect() 회전사각형 4개 모서리를 모두 포함하는 최소 크기의 사각형 영역을 반환
void points() 인수로 입력되는 pts 배열에 회전사각형의 4개 꼭짓점을 전달

Mat 클래스

행렬 자료형의 종류

데이터형 설명 Depth
CV_8U uchar 0
CV_8S signed char 1
CV_16U unsigned short int 2
CV_16S signed short int 3
CV_32S int 4
CV_32F float 5
CV_64F double 6

행렬 초기화 함수

타입 이름 내용
MatExpr ones() 행렬의 모든 원소 1인 행렬을 반환
MatExpr eye() 지정된 크기와 타입의 단위 행렬을 반환
MatExpr zeros() 행렬의 모든 원소를 0으로 초기화

멤버

타입 이름 내용
int dims 차원 수
int rows 행 갯수
int cols 열 개수        
uchar* data 행렬 원소 데이터에 대한 포인터
MatStep step 행렬의 한 행이 차지하는 바이트 수
MatSize size 행렬의 크기를 Size 형으로 반환

함수

타입 이름 내용
int channels() 행렬의 채널 수 반환
int depth() 행렬의 깊이 값 반환
Size elemSize() 행렬의 한 원소에 대한 바이트 크기 반환
Size elemSize1() 행렬의 한 원소의 한 채널에 대한 바이트 크기 반환
bool empty() 행렬 원소가 비어있는지 여부 반환
bool isSubmatrix() 참조 행렬인지 여부 반환
size step1() Step을 elemSize1()로 나누어서 정규화된 step 반환
size total() 행렬 원소의 전체 개수 반환
int type() 행렬의 데이터 타입(자료형 + 채널 수) 반환 자료형으로 상위 3비트 + 채널 수로 하위 3비트
void resize() 행의 개수를 기준으로 기존 행렬의 크기를 변경한다. 기존 행렬의 행의 개수보다 sz가 작으면 하단 행을 제거하고, 크면 기존 행렬 하단에 행을 추가한다.
Mat reshape() 행렬의 전체 원소 개수는 바뀌지 않으면서 행렬의 모양을 변경하여 새 행렬을 반환한다. 기존 행렬과 변경된 행렬의 전체 원소 개수(채널 수 x 행수 x 열수)가 일치하지 않으면 에러가 발생한다.
void create() 기존에 존재하는 행렬의 차원, 행, 열, 자료형을 변경하여 다시 생성한다. 기존 행렬과 크기와 자료형이 다르면 기존 메모리를 해제하고 새로운 데이터를 생성한다.
Mat clone() 행렬 데이터와 같은 값을 복사해서 새로운 행렬을 반환한다.
void copyTo() 행렬 데이터를 인자로 입력된 mat 행렬에 복사한다.
void convertTo() 행렬 원소의 데이터 타입을 변경하여 인수로 입력된 mat 행렬에 반환한다.
void push_back() 행렬의 마지막(bottom)에 원소들을 추가한다.
void pop_back() 행렬의 마지막(bottom)에서 원소들을 제거한다.
Mat cross() 두 개의 3-원소 벡터들의 외적(cross-product)을 계산한다.
Double dot() 두 벡터의 내적(dot-product)을 계산한다. 1행(1열) 벡터가 아니면 1차원 벡터로 간주하고 내적을 계산한다. 1차원 벡터의 구성은 위에서 아래로, 왼쪽에서 오른쪽의 순서로 스캔한다. 행렬이 1채널 이상이면, 각 채널들의 내적을 구하여 합산한다.
MatExpr inv() 역행렬을 계산한다.
MatExpr mul() 두 행렬의 각 원소 간(element-wise) 곱셈을 수행하여 반환한다.
MatExpr t() 해당 행렬의 전치를 수행한다. 여기서 t()는 실제로 전치를 수행하는 것이 아니라 임시로 전치된 행렬의 헤더를 반환한다. 반환된 헤더는 복잡한 행렬 연산에 사용하거나 새 행렬에 할당할 수 있다.

연산자

오른쪽 항의 데이터 타입 예문 내용
스칼라값 m1 = 100 행렬의 모든 원소를 지정된 스칼라값으로 변경하고자 할 때 사용한다. 마스크 행렬이 없는 MatsetTo()와 같은 역할을 한다.
행렬 수식 m1 = m2 + m3
m1 = m3 -7
수식의 결과가 m1 행렬에 복사된다.
행렬 m1 = m2 m2 행렬이 m1 행렬에 복사되는 것이 아니라 m2 행렬을 m1 행렬이 공유한다. 따라서 m2 행렬의 원소가 변경되면, m1 행렬의 원소도 변경된다.

Range 클래스

  • Range 클래스는 하나의 시퀀스에서 연속되는 서브 시퀀스를 지정하는 클래스이다. 주로 Mat 클래스에서 행 또는 열의 범위를 지정할 때 사용된다.
  • 멤버 변수로 start, end가 존재하는데, start는 주어진 범위 안에 포함되며, end는 포함되지 않는다.

함수

타입 이름 내용
int size() 서브 시퀀스의 크기를 반환한다.
bool empty() 서브 시퀀스가 비어있는지를 확인한다.
Range all() 서브 시퀀스가 가득차 있는지 반환한다.

행렬 헤더 관련 함수

타입 이름 내용
Mat row() 기존 행렬에서 지정된 행을 위한 행렬 헤더를 생성하여 반환한다.
Mat col() 기존 행렬에서 지정된 열을 위한 행렬 헤더를 생성하여 반환한다.
Mat rowRange() 기존 행렬에서 지정된 연속된 행을 위한 행렬 헤더를 생성하여 반환한다. 연속되는 행을 공유하고자 할 때 사용된다.
Mat colRange() 기존 행렬에서 지정된 연속된 열을 위한 행렬 헤더를 생성하여 반환한다. 연속되는 열을 공유하고자 할 때 사용된다.
void locateROI() 부분 행렬에서 부모 행렬의 크기와 위치를 알려준다.
void adjustROI() 부분 행렬에서 관심영역의 크기와 위치를 조정한다.
Mat operator() 사각형의 부분 행렬을 추출한다.

행렬의 메모리 해제

  • Mat::release() 함수는 행렬 데이터와 관련된 참조 카운터를 감소시킨다. 그리고 참조 카운터가 0에 도달하면, 행렬 데이터를 해제하고, 행렬 데이터와 참조 카운터의 포인터는 모두 null 값으로 설정함으로써 메모리를 해제한다.
  • 이 함수는 행렬 데이터의 해제를 위해서 명시적으로 호출할 수 있지만, Mat 클래스의 파괴자(destructor)에 의해 자동으로 호출되기 때문에 일반적으로 필요하지 않다.

예외처리

  • 영상 처리를 위해서 입력받는 영상 데이터는 기본적으로 채널당 8비트로 인코딩된 데이터이다. 8비트만을 이용하기 때문에 화소의 값에서 제한된 범위를 가진다.
  • 영상 데이터에 특정 연산을 할 경우 –컬러 공간 변환, 밝기/대조 조정, 샤프닝, 보간법 등– 대부분 산술연산 등으로 인해 음수나 소수점 이하의 값, 혹은 8비트의 범위를 벗어나는 값들을 갖게 할 것이다.
  • 이때 8비트만을 결과 값으로 사용하면 결과 영상에 오류가 발생될 수 있고 다음 단계의 영상 분석이나 처리에 영향을 줄 수 있다.
  • 이 문제를 해결하기 위해 포화 산술(saturation arithmetics) 연산이 사용된다. 이것은 8비트 범위일 때 다음과 같은 수식으로 나타낼 수 있다.
    • I(x, y) = min(max(round(r), 0), 255)
  • 즉, 어떤 연산의 결과 값(r)을 8비트로 저장한다고 할 때 비트 제한 범위를 넘으면 0 또는 255 가운데 가까운 값으로 저장한다.
  • OpenCV에서는 행렬에 대해 연산을 할 경우 기본적으로 포화 산술이 적용된다. 또한 기본 자료형에 대해 포화 산술 연산이 가능하도록 saturate_cast() 템플릿 메서드를 구현해 두었다.

예외처리 매크로

타입 이름 내용
define CV_Assert() 실행시간에 조건을 체크하는 매크로. 조건이 false가 되면 예외 발생
define CV_Error() 에러 코드 발생시 msg 문자열 출력
define CV_Error_() 에러 코드 발생시 args로 포맷 매칭하여 문자열 출력