Programming 57

[도서 실습] 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)하는 방식이 있다. - 특히 듀얼 모드 히스토그램(봉우리가 두 개로 구분되는)에서 오브..

[영상처리] 밝기값 히스토그램

1. 히스토그램 1) 히스토그램 설명 - 영상의 명암값 프로필을 보여주기 위해 정보로서 영상을 구성하는 명암대비 및 명암값의 분포에 대한 정보 - 왼쪽은 4x4의 16 화소의 영상을 표현한 것이고, 오른쪽이 왼쪽을 밝기값 히스토그램으로 그린 그림으로 0~5까지의 밝기값을 가지는 화소들이 몇 개씩 있는가를 나타내는 그림입니다. - 1의 밝기를 가지는 픽셀이 2개이고, 2는 3개... 5는 4개가 있다는 것입니다. 2) 히스토그램 예시 동전 영상을 히스토그램으로 보면, 배경(Background)되는 부분은 주로 검은색으로 되어있고, 물체(Foreground)가 있는 부분은 배경색에 비해 밝습니다. 이것은 듀얼모드 히스토그램이라고 볼 수 있습니다. 히스토그램에서 보면 밝기값이 작은 부분은 배경화소로 볼 수 있..

[인공지능 기초수학] 평균변화율 1

안녕하세요. 인공지능을 하기 위해서 수학기초가 필요합니다. 그래서 길벗에서 나온 책(모두의 인공지능 기초 수학)을 따라 해보며 확인 겸 정리해 보았습니다. 1. 평균변화율 미분은 변화율을 구하는 것으로 x가 변하는 양에 대해 y가 얼마나 변하는지 구하는 변화율로 평균변화율과 순간변화율이 있습니다. 1) 순간변화율 : 순간의 찰나의 변화에 대한 변화율을 구하는 것을 미분이라고 하고, 그 찰나의 변화율을 순간변화율 혹은 미분 계수라고 합니다. 2) 평균변화율 : 함수 y = f(x)가 있을 때 (y의 증가량 = ∆y) / (x의 증가량 = ∆x)을 의미 (예로 x가 2에서 9까지 증가했다면 평균변화율은 ∆x = 9 - 2 = 7 이 됩니다 x가 a에서 b로 변할 때 일반화하면 아래와 같습니다. 다른 방식으로..

Programming/Python 2023.10.30

[e4ds] Quest2 - YOLOv8를 이용한 아몬드(Almond)인식 및 카운팅

안녕하세요. e4ds에서 진행한 YOLOv8 프로젝트 두 번째 Quest를 진행해 보았습니다. 조금 열심히 해서 여러 기능을 넣어 보려고 했는데, 그렇게 까지는 못하고 전반적으로 접해보고, 기능을 추가하는 것으로 마무리하였습니다. AI 기능이 발전하는 것은 좋은데 새로운 것이 나오면 개발환경이 바뀌다 보니 기존에 개발하던 소스들이 작동하지 않는 경우가 많아서 조금 아쉬운 부분이 있었습니다. 1. 프로그램 설명 - Custom Data Set을 만들어 컨베이어 벨트처럼 지나가는 물체를 카운트하는 프로그램 - 현재는 아몬드(Almond)를 YOLOv8의 학습데이터로 삼아 Object Detection을 수행 - 프로그램 소스를 간단하게 하기 위해서 Supervision 라이브러리를 사용과 Tracker 성능..

[git] Windows의 git bash에서 wget 사용하기

안녕하세요. Windows 상에서 git을 이용하다 보면 간단한 리눅스 명령어는 되는데, 조금 특별한 명령어는 포함돼있지 않는 것을 알 수 있습니다. 이번에는 자료를 다운로드할 수 있는 wget 명령어가 없어서 사용하는 방법을 찾아보았습니다. 1. wget이 없을 때 메시지 - Git bash를 원하는 폴더에서 실행하면 아래와 같이 나오고 wget이라고 입력하면 명령어를 찾을 수 없다고 나옵니다. 2. Windows용 wget 다운로드하기 - 무료로 배포하고 있어 감사히 사용할 수 있습니다. 그리고 소스도 공개되어 있어 구조도 분석 한번 할 수 있습니다. 단, 잠재적인 위험도 있을 수 있다고 경고하고 있습니다 - OS에 맞는 형식과 ZIP, EXE 버전을 선택해서 다운로드합니다. 여기서는 x64비트용 E..

Programming 2023.10.20

[Unity] 유니티 실행 프로그램을 확장된 화면에 출력하기(특히, 노트북 확장 모니터에 출력하기)

안녕하세요. 프로그램 개발하는 분이라면 보통 모니터 2개 이상을 사용하고 있을 겁니다. 그런데 유니티로 프로그램을 만들고 실행시켜 보면 현재 실행 시는 모니터에만 계속 프로그램이 나타나는 것을 볼 수 있습니다. 데스크톱 PC일 경우 그래픽카드의 모니터를 물리적으로 바꾼다던지 하면 되는데 메인 화면을 노트북으로 하는 경우 노트북 모니터가 1번으로 1번으로 되어서 계속 노트북화면에만 나타나게 됩니다. 완벽한 방법은 아닌 것 같은데 다른 화면을 다른 화면에 나타나게 할 수 있는 방법을 확인해 보겠습니다. 1. 카메라 설정하기 - Hierarchy에서 Main Camera를 선택하고, Target Display를 ComboBox를 선택하면 Display1~8까지 나옵니다. 여기서 노트북으로 출력하려는 모니터를 ..

Programming/Unity 2023.10.07

[e4ds] Quest1 - 물체 인식 및 카운트하기

안녕하세요. 이번에 E4DS에서 YoloV8을 사용한 contest가 있어 Quest에 참여해 보았습니다. 어려운 무언가를 만드는 것이 아니라, 사용방법을 익히는 관점에서 진행하는 듯합니다. 그래서 Quest1은 YoloV8로 무엇을 만들어 볼 것인가, 기획하는 것으로 진행하였습니다. 그래서 간단하게 물건을 인식하고 카운트하는 것으로 기획해 보았습니다. 다른 분들도 이런 기능이 되는구나 참여해 보고 참고하는 기회가 되셨으면 합니다. □ YOLO를 활용한 어떤 문제나 응용 분야에 대한 아이디어 제안 - 공장 자동화를 따라 해 볼 수 있는 객체를 인지해서 물건을 인지하고 개수 파악과 몇 개가 들어오고 나가는지를 확인하는 것을 만들어 보려고 한다 - 정확한 Object는 정하지 않았지만, Pre-trained..

Programming 2023.10.01

[영상처리] 영상 화소(포인터) 처리

1. 영상 화소(포인터) 처리 란 - 입력 영상 화소(Pixel)에 포인터 연산자(Point Operator)에 따라서 출력 영상 화소(Pixel) 값이 결정되는 영상 - 입력영상 + (Point Operator) -> 출력영상 - Point Operator 예) 산술 연산자(+, -, *, /) 2. 영상 화소(포인터) 구현 예제 - D1 : 임의의 상수값 (예 : 밝기값 0~255) 1) 덧셈연산 : Out_image[i][j] = In_image[i][j] + D1; 2) 뺄셈연산 : Out_image[i][j] = In_image[i][j] - D1; 3) 곱셈연산 : Out_image[i][j] = In_image[i][j] * D1; 4) 나눗셈연산 : Out_image[i][j] = In_i..

[Python] OMP: Error #15: Initializing libiomp5md.dll ... 에러 해결하기

안녕하세요. 개발환경 PyCharm에서 Python 소스로 Yolo 테스트하기 위해서 코딩을 했습니다. 그런데 잠깐 창만 나타났다가 에러 나면서 종료가 되었습니다. 참고 사이트에서 말한 것 처럼 각종 라이브러리를 설치하고 해서 그런 것 같기도 한데 가상환경을 생성해서 하는데도 에러가 발생을 하네요. 1. 오류 내용 OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized. OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can..

Programming 2023.09.26

Windows에 OpenCV 빌드하기

안녕하세요. 유니티에서 OpenCV를 사용해 보기 위해서 먼저 OpenCV 라이브러리를 설치가 필요했습니다. 유니티에서 유니티 플러그인 형태로 만들어서 사용할 수 있다고 해서 한번 따라 해보려고 했습니다. 굳이 유니티가 아니더라도 C#, Qt 등 윈도우 프로그램 툴에서 사용해 보려면 별도로 설치가 필요합니다. 윈도우 같은 경우는 설치파일이 있어서 간단하게 설치할 수 있습니다. OpenCV 사이트에 가서 버전을 확인 후 Windows 메뉴 링크로 다운로드하면 소스 빌드 없이 쉽게 설치할 수 있습니다. https://opencv.org/releases/ Releases Become a Member Stay up to date on OpenCV and Computer Vision news Join our Ne..

Programming 2023.09.20