OpenCV를 사용하여 두 이미지의 다른 부분 찾기

두 이미지의 구조적 유사성을 분석하는 알고리듬으로 SSIM (Structural Similarity)가 있는데, 이를 사용하면 두 이미지가 어느 정도로 유사한지, 어느 부위가 다른지를 알아낼 수 있다. ssim을 수행하는 함수는 scikit-image 라이브러리가 제공하고 있으니, 이를 사용해서 두 이미지의 다른 부분을 찾는 작업을 수행할 수 있다. 다만 이미지를 비교하기 위해 필요한 전처리와 이미지 차이를 구분한 이후의 처리를 위해서는 opencv의 사용이 필수불가결하다. https://docs.opencv.org/master/modules.html 에서 각 모듈에 대한 정의와 Python API를 볼 수 있다. 필요한 라이브러리 설치 몇 가지 라이브러리가 필요하다. 먼저 opencv-python을 설치해서 OpenCV를 사용할 수… 더 보기 »OpenCV를 사용하여 두 이미지의 다른 부분 찾기

vim의 키 맵 설정 팁

vim에서 키맵을 잘 활용하는 것의 중요성은 딱히 말하지 않아도 될 것 같으니, 키 맵을 설정하는데 있어서 몇 가지 알아두면 좋은 팁들을 소개하고자 한다. 키 맵 작성 방법 키 맵은 :map 명령을 사용해서 정의할 수 있다. :map A B의 형식이다. A는 사용할 키 시퀀스이고 B는 A를 입력했을 때 작동할 키 시퀀스이다. 여기서 A, B가 모두 키 시퀀스라는 점을 잘 알아두자. 특정한 키 하나를 눌러서 동작을 실행하는게 아니라, 두 개 이상의 키를 순서대로 눌러서 동작을 실행할 수 있다. 따라서 실제로 vim의 키맵은… 더 보기 »vim의 키 맵 설정 팁

Vim에서 팝업 사용하기

vim8부터 popup 기능이 새롭게 도입되었다. 이제 vim script에서 팝업을 만들어서 대화 상자나 메뉴 혹은 그외의 UI들을 팝업 레이어로 만들어서 편집기 위로 띄울 수 있게 되었다. 특히 비동기로 외부 job을 실행하는 함수를 작성하는 경우에 그 결과를 사용자에게 알려주는 용도로 사용하기에 용이하다. 이 기능을 어떻게 사용하는지 살펴보도록 하자.

더 보기 »Vim에서 팝업 사용하기

중심극한정리

통계적 추정은 표본으로부터 모수를 추정하는 것을 말한다고 했다. 그런데, 통계량은 표본을 추출할 때마다 달라지는데, 어떻게 매번 변하는 통계량을 가지고 모수를 추정할 수 있을까? 통계적 추정은 중심극한정리라는 원리를 근본으로 작동한다. 오늘은 중심 극한 정리가 무엇이며, 통계적 추정에서 어떤 의미를 갖는지 살펴보자. 먼저 확률 변수에 대해 알아보자. 확률 변수(Random Variable)은 프로그래밍할 때 그 변수(값을 저장해놓는다)의 개념과는 좀 다른 것으로, 말 그대로 변하는 값들을 말한다. 즉, 무작위 실험을 했을 때 특정 확률로 발생하는 각각의 결과를 말한다. 이 때 확률 변수는 확률에 대한 변수가… 더 보기 »중심극한정리

순열과 조합 – itertools (python)

알려져 있는 원소들로 구성되는 가능한 모드 조합 및 순열을 구하려 할 때, 이를 직접 구현해보는 것도 좋지만 itertools 모듈에 있는 함수를 사용하는 것을 추천한다. 이 함수들은 기본적으로 제너레이터 함수이기 때문에 한번에 리스트 등으로 만들기 전까지는 메모리에 큰 부담을 주지 않으며 성능도 적절한 편이다. 오늘은 itertools의 함수 중에서 순열과 조합에 관련된 함수들을 알아보도록 하자.

더 보기 »순열과 조합 – itertools (python)

파이썬 패턴매칭

파이썬 3.10에서는 구조적 패턴 매칭이라는 새로운 문법이 도입된다. 패턴매칭은 match 문이라는 새로운 구문에 적용된며, 스칼라 같은 다른 언어들에서 영향을 받았다고 한다. match 문은 어떤 값(subject)을 여러 다른 형태(pattern)들과 들어맞을 때 까지 비교한다. 이는 C와 같은 언어의 switch 문과 같은 것이 아니냐고 할 수 있겠지만, switch 문이 여러 케이스의 값을 비교하는 것과 달리, match 문은 값에 대해서 패턴에 들어맞는지를 보는 것이 차이라 하겠다.

더 보기 »파이썬 패턴매칭

오일러 프로젝트 87번

어떤 소수의 제곱, 세제곱, 네제곱의 합으로 표현할 수 있는 수를 찾는 문제. 소수의 제곱 + 소수의 3제곱 + 소수의 4제곱)으로 나타낼 수 있는 가장 작은 수는 28입니다. 28 = 22 + 23 + 2433 = 32 + 23 + 2449 = 52 + 23 + 2447 = 22 + 33 + 24 50 미만에 이런 수는 모두 네 개 있습니다. 5천만 미만에 이렇게 나타낼 수 있는 수는 모두 몇 개나 됩니까? 보다 영리하게 푸는 방법은 여전히 모르겠고, 현재로서는 brute-force로 푸는… 더 보기 »오일러 프로젝트 87번

vim 플러그인의 키맵과 함수 이름

vim 플러그인을 작성하는 것을 간단히 요약하면 어떤 기능을 수행하는 함수를 작성하고, 이 함수를 호출할 수 있는 방법을 제공해주는 것이라 할 수 있다. 이 때 고려해야하는 중요한 요소 중 하나는 사용자는 내가 작성하는 플러그인 말고도 엄청나게 많은 다른 플러그인을 사용하고 있을 것이라는 것이다. 따라서 함수의 이름이나 사용자 정의 명령의 이름, 키 맵핑등이 온전히 내가 원하는대로 사용자가 쓸 수 있을 것이라는 생각을 하는 것은 위험하다.

더 보기 »vim 플러그인의 키맵과 함수 이름

ASCIIMATICS 101 – 2

지난 글에서 ASCIIMATICS로 기본적인 애니메이션 효과를 구현하는 방법에 대해 살펴보았다. 이번에는 텍스트 기반 UI를 구성하는 방법에 대해 다뤄보려고 한다. 텍스트 기반 UI는 여느 GUI와 마찬가지로 기본적인 UI 컴포넌트인 위젯을 조합하는 형태로 만들어진다. 대신에 일반적인 애니메이션 재생과 달리 이러한 위젯들은 사용자와의 상호작용을 전제로 디자인되어 있으며, 화면 뒤에 존재하는 데이터를 표시하고 변경하는 동작을 수반한다.

더 보기 »ASCIIMATICS 101 – 2

ASCIIMATIC 101

파이썬으로 가장 GUI를 구현하는 방법으로는 여러 가지가 있다. 기본으로 내장된 Tkinter 도 있고, wxPython 이나 pyQt 같은 것까지. 개인적으로 매우 간단한 UI를 갖춘 프로그램을 작성하려고 했지만 이래 저래 복잡해서 뭐 좀 없을까 하고 하다가 asciimatics를 알게되었다. asciimatics는 기본적으로 아스키문자를 사용해서 콘솔 화면에 애니메이션을 구현하는 라이브러리인데, 이 중에서 입출력과 관련된 기능도 있고, 간단한 TUI를 구현하는 기능 역시 존재한다. 이를 사용하면 간단한 폼이나 대화상자 등을 시각적으로 구현할 수 있고, 그외 이것 저것 재미난 것들을 화면에 구현해볼 수 있다. (이미지를 텍스트로 변환해서 표시한다던지…)… 더 보기 »ASCIIMATIC 101