Programming 89

[도서 실습] Qt 5 and OpenCV 4 Computer Vision – The GazerW Application (카메라 정보 얻어오기)

안녕하세요. 이제 UI가 만들어졌다면 간단하게 컴퓨터에 장착되어 있는 카메라 정보를 가져오도록 기능을 추가해 보겠습니다. 1. 구현할 내용 Qt library에 포함되어 있는 QCameraInfo 클래스를 사용해서 현재 컴퓨터에 사용 가능한 카메라의 정보를 확인하는 것입니다. 2. 기능 구현 메뉴의 "Camera Information" 기능을 실행되게 하려면 slot를 만들어 연결시켜 주고 구현도 해주어야 합니다. 1) mainwindow.h 추가 내용 필요한 라이브러리 헤더 파일과 private slots 영역을 만들어 함수를 선언합니다. #include #include ... private slots: void showCameraInfo(); 2) GazerW.pro 추가 내용 #include 만 추..

Programming/Qt 2024.04.04

[도서 실습] Qt 5 and OpenCV 4 Computer Vision – The Gazer Application 1편 - 화면 생성(완성된 소스 확인)

안녕하세요. Gazer Application을 만들어 보기 전에 기능과 화면 구성에 대해서 이전 내용에서 확인해 보았습니다. 이제는 실제 Qt로 개발하는 것을 진행해 보겠습니다. 우선 이전 내용에서 말한 것처럼 기존 소스가 잘 작동하는 것인지 확인하고 시작하겠습니다. 1. 원본 소스 프로그램 실행 - 몇 가지 내용 수정하고 소스를 컴파일해서 실행 시면 문제없이 카메라 영상을 볼 수 있습니다. 그리고 모션 변화가 있을 때도 감지되는 것을 확인할 수 있습니다. 그래서 책 내용처럼 추가해서 만들어 보도록 하겠습니다. 그러나 원본 소스를 실행하려면 몇 가지 수정 후 실행해야 합니다. 1) 수정해야 할 부분 - 첫 번째로 Gazer.pro 파일에 OpenCV 경로를 지정해 주고 필요한 라이브러리도 함께 입력해주어..

Programming/Qt 2024.03.30

[도서실습] Qt 5 and OpenCV 4 Computer Vision – The Gazer Application 시작 준비하기(영상 프로그램 UI 및 기능)

안녕하세요. 이번 장(Chapter)에서는 이전 ImageEditor 프로그램을 끝내고, 이제 실제 영상에 관련된 프로그램 예제에 들어가게 됩니다. Gazer의 의미는 응시자라고 합니다. 우선, 책의 Gazer Application에서 어떤 내용을 다루고 있는지 확인해 보겠습니다. - Open a webcam and play the video that's been captured from it in real time - Record video from the webcam by clicking on a start/stop button - Show a list of saved videos - Detect motion, save video, and send notifications to our mobile p..

Programming/Qt 2024.03.19

[Python] 거듭제곱, 인수분해 구하는 방법

안녕하세요. “모두의 인공지능 기초 수학” 내용 중 중학교 수학에서 배우는 거듭제곱과 인수분해하는 방법을 파이썬 프로그래밍으로 확인해 보았습니다. 그리고 간단하게 UI를 추가한다면 중학교 수학 답을 알려주는 프로그램으로도 가능해 보였습니다. 1. 거듭제곱 구하는 방법 - 밑 ** 지수로 표현해서 구할 수 있습니다. - 예를 들어 4 ** 3을 하면 4x4x4 이므로 64가 됩니다. - 추가로 거듭제곱 구하는 방법은 책의 뒷부분에도 나오는데, 내장 함수 pow() 함수와 math.pow() 함수를 사용할 수 있습니다. - 내장 함수 pow의 경우 인자가 (base, exp [, mod] )이며 추가로 나머지 연산할 수 있도록 되어 있습니다. 그리고 특징은 base와 exp은 정수형이어야 합니다. 예시에서는..

Programming/Python 2024.03.14

[도서 실습] Qt 5 and OpenCV 4 Computer Vision – ImageEditor (Plugin Mechanism – Affine)

안녕하세요. 이미지 에디터 마지막 내용으로 Affine 함수를 사용해보려고 합니다. 이전에 이미지를 회전해 보았다면, 이제는 이지를 약간 틀어져 보이게 해 보겠습니다. 표현이 맞을지 모르겠으나, 평면의 이미지를 약간 입체적으로 보이는 느낌으로 만든다라고 할까요. ^^ 1. 소스 코드 시작 전 1) 아핀 변환(Affine Transformation) 선형 변환에 이동 변환까지 포함된 변환입니다. 선의 수평성을 유지하며, 변환 전의 서로 평행한 선은 변환 후에도 평행함을 의미합니다. 즉, 길이의 비와 평행성이 보존되는 변환입니다. 사각형을 평행사변형으로 변환하는 것을 아핀 변환으로 간주합니다. 아핀 변환은 점 사이의 거리 비율뿐만 아니라 선의 수평성을 유지하는 모든 변환입니다. (예: 선의 중간점이 변환 후..

Programming/Qt 2024.03.13

[Python] SymPy 라이브러리를 이용한 방정식 계산방법

안녕하세요. “모두의 인공지능 기초 수학” 도서를 보면서 나중에 사용하면 좋겠다는 생각나는 것들을 실습해 보면서 남겨보려고 합니다. 이 도서에서의 주피터 노트북(Jupyter Notebook)으로 테스트했다고 했으나 현재 다른 Python IDE(Pycharm)를 사용하고 있어서 다른 IDE로 테스트하였습니다. SymPy 라이브러리를 사용하면 수학 시간에 계산하기 힘든 방정식 x, y 값을 구할 수 있습니다. 그러나 수학 시험은 과정도 중요하게 생각하기 때문에 바로 답이 나오는 것은 좋지 않을 수 있지만, 급하게 풀어야 할 방정식이 있다면 바로 사용해도 좋을 듯합니다. 1. 라이브러리 설치 - Python IDE Prompt 창에서 아래와 같이 프로그램 설치를 합니다. > pip install numpy..

Programming/Python 2024.03.12

[도서 실습] Qt 5 and OpenCV 4 Computer Vision – ImageEditor (Plugin Mechanism – Rotating Images)

안녕하세요. 이번에는 이미지를 회전시키는 플러그인을 추가해 보도록 하겠습니다. 간편하게 rotate() 함수를 호출해서는 되지 않고 몇 가지 개념을 가지고 회전을 시켜야 했습니다. 1. 소스 코드 시작 전 1) 기하학적 변형(Geometric transformations) - 책 내용처럼 쉽게 생각해서 이미지만 회전시키면 되겠지 생각할 수 있지만, 조금 자료를 찾아보면 기하학이라는 좌표 개념과 수학적 지식이 필요했습니다. 간단하게 정의를 살펴보면, "영상의 기하학적 변형이란 화소의 위치를 변화하여 원 영상과는 다른 내용을 갖는 것을 말한다. 이러한 기하학적 변형에는 좌우 교환, 상하 교환, 평행 이동, 확대 및 축소, 회전 변형 등이 있다. 기하학적인 변형을 수학적으로 표현하기 위하여 변형되기 전의 화소..

Programming/Qt 2024.03.08

[도서 실습] Qt 5 and OpenCV 4 Computer Vision – ImageEditor (Plugin Mechanism – Cartoon)

안녕하세요. 이번에는 이미지를 만화처럼 보이게 하는 효과를 플러그인 기능으로 만들어 보도록 하겠습니다. 프로젝트 만드는 방법은 이전 Sharpen 내용과 동일하기 때문에 필요하다면 이전 내용을 참조하시면 됩니다. 그럼 새로운 라이브러리 프로젝트를 생성한 후 진행하시면 됩니다. 1. 소스 코드 시작 전 - 프로젝트명을 Cartoon_plugin으로 하고 클래스 이름은 CartoonPlugin으로 만드시면 됩니다. 그리고 CartoonPlugin::name() 함수와 CartoonPlugin::edit() 함수를 선언하고 정의하면 됩니다. - 우선 첫 번째 작업은 색상 팔레트를 축소시키는 것입니다. 그렇게 하기 위해서는 OpenCV 라이브러리에서 제공하는 bilateral filter를 사용합니다. 필터는 ..

Programming/Qt 2024.03.02

[도서 실습] Qt 5 and OpenCV 4 Computer Vision – ImageEditor (Plugin Mechanism – Sharpen)

안녕하세요. plugin을 만들고 설정하는데 어려움이 있었는데, 이제 기본 틀은 잡아 놓았으니, 이제 OpenCV의 기능을 간단하게 Plugin으로 만들 수 있습니다. 그리고 MainWindow에 dll 파일만 복사해 두면 기능이 나타나게 됩니다. 이번에는 Sharpen 기능입니다. 영상을 선명하게 하거나 에지를 검출하는 데 사용합니다. 1. Sharpen Filter - 명도가 변화하는 부분을 강조하여 이미지를 보다 선명하게 보정해 주는 필터입니다. - Sharpen 방법에는 2가지가 있습니다. 2차 미분을 사용하는 방법과 이미지 차이를 이용한 unsharp masking 방법입니다. 책 내용에서는 unsharp masking 방법을 이용해서 설명해주고 있습니다. 1) 미분을 이용하는 방법 - 수식 설..

Programming/Qt 2024.02.29

[도서 실습] Qt 5 and OpenCV 4 Computer Vision – ImageEditor (Plugin Mechanism – Erode - 2)

안녕하세요. 이전 내용에서 Plugin 인 DLL 파일로 Erode를 만들어 보았습니다. 이제 이 파일을 Mainwindow 프로그램에서 불러오는 것을 만들어 보도록 하겠습니다. 기존의 ImageEditor에 내용을 추가하는데 소스 입력하는 위치가 어려울 수 있는데 천천히 설명하도록 하겠습니다. 1. ImageEditor 프로젝트 수정 - ImageEditor.pro에 plugin interface 파일을 추가합니다. (editor_plugin_interface.h) # Input HEADERS += mainwindow.h \ editor_plugin_interface.h SOURCES += main.cpp mainwindow.cpp 2. Mainwindow.h에 내용 추가 - mainwindow.h에 ..

Programming/Qt 2024.02.24

[Python] 실제 온도 데이터를 반영한 기간별 온도 가상의 온도 데이터 생성해 보기

안녕하세요. 이번에는 1년 치 가상의 온도데이터를 생성 테스트를 하려고 했는데, 간단하게 Random 함수를 사용하면 되지? 생각했는데, 이렇게 하면 여름에 마이너스 온도가 나오거나 추운 겨울에도 플러스 온도가 나오는 문제가 발생합니다. 그래서 현실온도 데이터를 기반으로 해서 1년 치 혹은 특정 시기의 온도와 비슷하게 가상의 데이터가 생성될 수 있게 Python 코드로 작업해 보았습니다. 기본 아이디어를 GPT에서 틀을 생성하고 나머지 부분들 기능 추가 및 수정 진행했습니다. 어떻게 시작하면 될까라는 부분에 있어서는 GPT의 도움을 받아 보는 것도 나쁘지 않아 보입니다. 그러나 아직까지는 코드를 생성한 후 확인하고 사용해야 할 것 같습니다. 가끔 중간중간에 버그나 수정해주어야 할 부분들이 있기 때문에 자..

Programming/Python 2024.02.23

[도서 실습] Qt 5 and OpenCV 4 Computer Vision – ImageEditor (Plugin Mechanism – Erode - 1)

안녕하세요. 이번 내용은 Erode(부식, 침식)되는 기능을 플러그인 파일(.so 혹은 .dll)로 만들어서 메인 프로그램에서 사용할 수 있게 하는 것입니다. 내용과 순서가 약간 어려울 수 있습니다. 책을 보며 따라 하는데 잘 안되어서 시간이 조금 걸렸습니다. 1. Erode는? 용어 정리가 간단하게 정리된 글이 있어 가져와 보았습니다. 여러 가지 모폴로지 기법 중 기본적인 팽창과 침식에 대해서 알아본다. 이들 기법은 영상 내에서 잡음 제거, 또는 구성 요소들의 결합 또는 분리 등의 폭넓은 분야에서 널리 사용된다. 잡음이 존재하는 영상에 침식과 팽창을 적절하게 사용하여 잡음을 제거하고 완하 시킬 수 있다. Erode 연산 : 필터 내부의 가장 낮은(어두운) 값으로 변환(and) - 침식 연산 Dilate..

Programming/Qt 2024.02.18

[도서 실습] Qt 5 and OpenCV 4 Computer Vision – The GazerW Application (Qt Library를 이용해서 카메라 영상 출력)

안녕하세요. 이전 내용에서는 OpenCV 라이브러리를 이용해서 카메라 영상을 출력해 보았습니다. 그러나 한 가지 단점이 있는 것은 Qt 프로그램과 함께 OpenCV 라이브러리도 가지고 있어야 하고 실행파일의 용량도 커질 수 있다는 것이었습니다. 만약 단순한 영상 출력 프로그램을 만든다고 한다면 OpenCV를 사용하지 않고 Qt라이브러리를 이용해서 영상을 출력을 해줄 수 있다면 좀 더 가벼운 프로그램으로 만들 수 있을 것으로 생각되어 확인해 보았습니다. 1. 소스 추가 - 아래의 소스 내용은 일부분만 설명되었고 전체 소스는 첨부파일을 참고하시면 됩니다. - 단순하게 Qt Library로 영상을 출력하기 위해서는 기존에 QGraphicSence와 QGraphicsView 오브젝트 대신해서 QCamera와 Q..

Programming/Qt 2024.02.15

[도서 실습] Qt 5 and OpenCV 4 Computer Vision ImageEditor (QPixmap, QImage, mat에 관해서)

안녕하세요. 이전 내용에서 이미지가 흐려지는 기능(Blur) 사용해 보았는데, 소스상에서 OpenCV를 사용하기 위해서 이미지 변환을 하였습니다. QPixmap에서 QImage로 QImage에서 Mat으로 변환하였고, 다시 역으로 해서 이미지로 만들었습니다. 이 부분에 대해서 조금 더 설명하는 내용입니다. 내용이 조금 지루할 수 있으니 참고 삼아 읽어보시면 좋을 것 같습니다. 1. QPixmap QPixmap은 Qt 라이브러리에서 제공하는 클래스이며 화면에 이미지를 표시해야 할 때 사용하기 위한 것입니다. 이미지를 인스턴스로 읽고 그 인스턴스를 QGraphicsSence에 추가하여 표시합니다. QPixmap의 인스턴스를 만드는 방법에는 여러 가지가 있습니다. 이전 섹션에서 했던 것처럼 이미지 파일의 경로..

Programming/Qt 2024.02.12

[도서 실습] Qt 5 and OpenCV 4 Computer Vision – ImageEditor - blur 구현 (Windows상 OpenCV 4.3 설치와 Qt5 연동 포함)

안녕하세요. 이번 챕터 내용은 이전 ImageViewer 내용에 이어 프로젝트를 진행하려고 합니다. Blur 기능으로 이미지를 흐리게 만드는 메뉴를 만들어 OpenCV 기능을 사용하는 것입니다. 그리고 windows 상에서 OpenCV를 설치해 보고 Qt5와 연동해서 작동해 보는 것 까지라고 생각하시면 됩니다. 책 내용은 리눅스로 되어 있지만 실제 컴파일하는 작업은 윈도우에서 테스트하므로 이점 참고하시면 좋을 듯합니다. 1. 두 번째 프로젝트 위한 작업 1) 프로젝트 이름 바꾸기 - ImageViewer 내용을 보신 분이라면, OpenCV를 사용하는 내용부터는 ImageEditor로 프로젝트명을 바꿔 진행합니다. 그래서 ImageViewer로 테스트했던 폴더를 복사한 후 폴더 이름과 Project 이름을..

Programming/Qt 2024.02.07

[도서 실습] Qt 5 and OpenCV 4 Computer Vision – ImageEditor - blur 구현 (Windows상 OpenCV 4.3 설치와 Qt5 연동 포함)

안녕하세요. 이번 챕터 내용은 이전 ImageViewer 내용에 이어 프로젝트를 진행하려고 합니다. Blur 기능으로 이미지를 흐리게 만드는 메뉴를 만들어 OpenCV 기능을 사용하는 것입니다. 그리고 windows 상에서 OpenCV를 설치해 보고 Qt5와 연동해서 작동해 보는 것 까지라고 생각하시면 됩니다. 책 내용은 리눅스로 되어 있지만 실제 컴파일하는 작업은 윈도우에서 테스트하므로 이점 참고하시면 좋을 듯합니다. 1. 두 번째 프로젝트 위한 작업 1) 프로젝트 이름 바꾸기 - ImageViewer 내용을 보신 분이라면, OpenCV를 사용하는 내용부터는 ImageEditor로 프로젝트명을 바꿔 진행합니다. 그래서 ImageViewer로 테스트했던 폴더를 복사한 후 폴더 이름과 Project 이름을..

Programming/Qt 2024.02.04

[도서 실습] Qt 5 and OpenCV 4 Computer Vision – Chepter1 ImageViewer (실행코드 설명)

안녕하세요. 이전 글은 Qt 설치와 화면 설계에 대해서 했다면, ImageViewer에 실제 코드를 넣어 보아야 합니다. 공개된 소스를 가지고 할 것이기 때문에 구현된 내용에 대해서 간단하게 설명드리겠습니다. 빠르게 보면서 필요한 부분만 읽어 보시면 될 것 같습니다. 1. 화면 코드 (User Interface) - QMainWindow를 상속받은 MainWindow기반으로 해서 화면이 구성이됩니다. .ui 파일에서 화면 설계를 한 것이 아니라, 코딩으로 화면을 설계를 해두었습니다. - 상위 두 개의 툴바가 있고 그곳에 메뉴를 생성해주기 위한 QMenu 2개 변수가 2개가 있습니다. QMenu *fileMenu; QMenu *viewMenu; QToolBar *fileToolBar; QToolBar *v..

Programming/Qt 2024.01.18

[도서 실습] Qt 5 and OpenCV 4 Computer Vision – Chepter1 ImageViewer (예제 코드 실행을 위한 Qt 설치 내용 포함)

안녕하세요. 이전부터 영상처리 관련된 내용 무관심하고 있다가 하드웨어를 통한 자동화는 어느 정도 한계가 있다고 생각되었습니다. 그래서 영상처리를 통한 감지를 찾아보다가 리눅스에서도 사용할 수 있는 Qt와 OpenCV 내용이 있어 찾게 되었습니다. 대략적 계획으로는 먼저 책("Qt 5 and OpenCV 4 Computer Vision Projects") 내용을 습득하는 것이고, 예제 소스도 검증해 보고 OpenCV 이용해 보는 것입니다. 또한 라즈베리 파이(Raspberry Pi)에 이식시켜 영상처리로 작은 감지센서를 만들어 보는 것으로 해볼 까 합니다. 책 내용은 기본적으로 리눅스 환경에서 진행되고 있습니다. 그 부분을 감안하셔야 할 듯합니다. 실습은 Windows10에서 하였습니다. 책 예제 소스는 ..

Programming/Qt 2024.01.17

유니티 리치 텍스트 (텍스트 안에서 마크업 태그)

안녕하세요. 유니티에서 텍스트 혹은 버튼 오브젝트 등에 글자(Text)를 수정할 때 크기와 색상 등을 인스펙트(Inspector) 창에서 변경이 가능합니다. 다른 방법으로 텍스트 안에서도 텍스트 포맷을 조금 추가하면 유사한 기능을 사용할 수 있습니다. Unity와 기타 IDE 툴에서도 이런 Rich Text기능을 제공하고 있습니다. 이것을 이용하는 방법을 간단하게 확인해 보겠습니다. 1. Unity의 리치 텍스트 UI 요소와 텍스트 메시의 텍스트에는 여러 폰트 스타일 및 크기가 사용될 수 있습니다. Text, GUIStyle 및 TextMesh 클래스에는 Unity가 텍스트 안에서 마크업 태그를 찾도록 설정하는 Rich Text 설정이 있습니다. Debug.Log 함수도 이 마크업 태그를 사용하여 코드에..

Programming/Unity 2023.12.11

[영상처리] 영상 이진화

1. 영상 이진화 1) 영상 이진화 설명 - 영상 밝기값 히스토그램 f(x)에서 임의의 밝기 임계값(Threshold, T)으로 영상을 이진화하는 처리 - 이진화 수식은 밝기값(x)이 설정한 밝기 임계값(Threshold, T) 보다 크면 255로, 보다 작거나 같으면 0으로 처리하는 것을 영상 이진화 - 예로, 임계값(T)을 128로 설정할 경우 입력영상을 이진화할 경우, 밝기값이 128보다 크면 255로 밝은 값으로 처리가 되고, 128보다 작으면 0으로 어둡게 된다. 2) 임계값(Threshold) 결정하는 방법 - 밝기 히스토그림을 보고 수동으로 값을 결정하는 방법과, 알고리즘을 통해서 자동 결정(예, Otsu)하는 방식이 있다. - 특히 듀얼 모드 히스토그램(봉우리가 두 개로 구분되는)에서 오브..