- 이미지 업로드

import cv2

# 이미지 로드
image = cv2.imread('image.jpg')

# 그레이스케일로 변환
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 변환된 이미지 저장
cv2.imwrite('gray_image.jpg', gray_image)

 

- 객체 감지와 추적

import cv2

# 분류기 로드
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# 이미지 로드
image = cv2.imread('image.jpg')

# 그레이스케일로 변환
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 얼굴 감지
faces = face_cascade.detectMultiScale(gray_image, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

# 감지된 얼굴에 사각형 그리기
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)

# 결과 이미지 보여주기
cv2.imshow('Face Detection', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

- 영상 처리와 비디오 분석

import cv2

# 비디오 캡처 생성
cap = cv2.VideoCapture('video.mp4')

while True:
    # 프레임 읽기
    ret, frame = cap.read()
    
    if not ret:
        break

    # 그레이스케일로 변환
    gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 변환된 프레임 출력
    cv2.imshow('Video', gray_frame)

    # 'q' 키로 종료
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 리소스 해제
cap.release()
cv2.destroyAllWindows()

 

- 이미지 분할과 객체 추출

import cv2
import numpy as np

# 이미지 로드
image = cv2.imread('image.jpg')

# 이미지를 HSV로 변환
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# 추출할 객체의 색상 범위 정의
lower_range = np.array([0, 50, 50])
upper_range = np.array([10, 255, 255])

# 색상 범위에 맞는 이미지 마스크 생성
mask = cv2.inRange(hsv_image, lower_range, upper_range)

# 마스크를 사용하여 원본 이미지에서 객체 추출
extracted_image = cv2.bitwise_and(image, image, mask=mask)

# 결과 이미지 출력
cv2.imshow('Object Extraction', extracted_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

- 히스토그램 분석

import cv2
import numpy as np
from matplotlib import pyplot as plt

# 이미지 로드
image = cv2.imread('image.jpg', 0)

# 히스토그램 계산
hist = cv2.calcHist([image], [0], None, [256], [0, 256])

# 히스토그램 그래프 생성
plt.plot(hist, color='black')
plt.xlim([0, 256])
plt.xlabel('Pixel Value')
plt.ylabel('Frequency')
plt.title('Histogram')
plt.show()

 

- 모폴로지 연산

import cv2
import numpy as np

# 이미지 로드
image = cv2.imread('image.jpg', 0)

# 이진 이미지로 변환
ret, binary_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)

# 모폴로지 연산 수행
kernel = np.ones((5, 5), np.uint8)
dilated_image = cv2.dilate(binary_image, kernel, iterations=1)
eroded_image = cv2.erode(binary_image, kernel, iterations=1)

# 결과 이미지 출력
cv2.imshow('Dilated Image', dilated_image)
cv2.imshow('Eroded Image', eroded_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

- 영상 합성

import cv2
import numpy as np

# 첫 번째 영상 로드
image1 = cv2.imread('image1.jpg')

# 두 번째 영상 로드
image2 = cv2.imread('image2.jpg')

# 영상 합성
blended_image = cv2.addWeighted(image1, 0.5, image2, 0.5, 0)

# 결과 이미지 출력
cv2.imshow('Blended Image', blended_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

 

 

 

 

'PYTHON' 카테고리의 다른 글

1. python _ opencv  (0) 2023.05.18

1. cv2.imread()

import cv2

image = cv2.imread("image.jpg")

This function reads an image from a file and returns it as a NumPy array.

2. cv2.imshow()

import cv2

image = cv2.imread("image.jpg")
cv2.imshow("Image", image)

key = cv2.waitKey(0)

 

This function displays an image on a window.

3. cv2.waitKey()

import cv2

image = cv2.imread("image.jpg")
cv2.imshow("Image", image)

key = cv2.waitKey(0)

This function waits for a key to be pressed and returns the ASCII code of the key.

4. cv2.imwrite()

import cv2

image = cv2.imread("image.jpg")
cv2.imwrite("image_output.jpg", image)

This function writes an image to a file.

5. cv2.resize()

import cv2

image = cv2.imread("image.jpg")
resized_image = cv2.resize(image, (image.shape[1] // 2, image.shape[0] // 2))

This function resizes an image.

6. cv2.flip()

import cv2

image = cv2.imread("image.jpg")
flipped_image = cv2.flip(image, 0)

This function flips an image horizontally.

7. cv2.threshold()

import cv2

image = cv2.imread("image.jpg")
thresholded_image = cv2.threshold(image, 128, 255, cv2.THRESH_BINARY)[1]

This function applies a threshold to an image.

8. cv2.findContours()

import cv2

image = cv2.imread("image.jpg")
contours, hierarchy = cv2.findContours(image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

This function finds contours in an image.

9. cv2.drawContours()

import cv2

image = cv2.imread("image.jpg")
contours, hierarchy = cv2.findContours(image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(image, contours, -1, (0, 0, 0), 2)

 

This function draws contours on an image.

10. cv2.HoughCircles()

import cv2

image = cv2.imread("image.jpg")
circles = cv2.HoughCircles(image, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=10, maxRadius=100)

 

This function finds circles in an image.

 

'PYTHON' 카테고리의 다른 글

2. python _ opencv  (0) 2023.05.26

opencv 로고

OpenCV(Open Source Computer Vision Library)는 오픈소스 컴퓨터 비전 라이브러리로, 이미지 처리 및 컴퓨터 비전 애플리케이션을 개발하는 데 사용됩니다. C++, Python, Java, MATLAB 등 다양한 프로그래밍 언어를 지원합니다.

OpenCV는 다양한 이미지 처리 및 컴퓨터 비전 작업에 대한 함수와 알고리즘을 제공합니다. 예를 들어, 이미지 로딩, 저장, 크기 조정, 회전, 투영 변환, 필터링, 색상 변환 등의 기본적인 이미지 처리 함수를 포함하고 있습니다. 또한, 객체 검출, 얼굴 인식, 동작 인식, 이미지 분할, 군집화 등의 고급 컴퓨터 비전 알고리즘도 제공합니다.

OpenCV는 또한 실시간 이미지 처리를 위한 기능도 제공합니다. 이를 위해 카메라 캡처, 비디오 캡처, 영상 스트리밍, 동영상 처리 등의 기능을 제공합니다. 이러한 기능을 활용하여 자율주행 차량, 로봇, 보안 시스템 등 다양한 분야에서 활용됩니다.

OpenCV는 빠른 처리 속도와 고성능, 강력한 알고리즘 및 다양한 언어 지원으로 인해 다양한 산업 분야에서 사용되고 있습니다. 또한, 커뮤니티에서는 OpenCV를 활용하여 다양한 오픈소스 프로젝트를 진행하고 있으며, 다양한 문제 해결을 위한 코드와 라이브러리를 공유하고 있습니다.

FCN은 이미지 분할 문제를 해결하기 위한 딥러닝에서 사용되는 모델로, 입력 이미지의 픽셀 단위로 분류하는 문제를 풀기 위해 공간 차원을 가지는 특성 맵(feature map)으로 대체된 CNN의 한 종류입니다.

기존의 CNN은 주로 분류(classification)나 객체 감지(object detection)와 같은 문제를 해결하기 위해 개발되었습니다. 이러한 문제에서는 입력 이미지를 하나의 클래스로 분류하거나, 객체의 위치와 크기를 결정하는 것이 주요 목표입니다. 그러나 이미지 분할 문제는 이와 달리 입력 이미지를 작은 단위로 분할한 후, 각각의 픽셀을 클래스로 분류하는 문제입니다. 따라서 기존의 CNN으로는 문제를 해결하기 어렵습니다.

FCN은 이러한 문제를 해결하기 위해 공간 차원을 가지는 특성 맵을 출력하는 네트워크를 사용합니다. 이는 기존의 CNN에서 마지막 fully-connected layer를 제거하고 대신 1x1 convolution layer를 사용하는 것으로 구현됩니다. 이렇게 하면 입력 이미지의 크기와 상관없이 출력 특성 맵의 크기가 일정하게 유지되므로, 입력 이미지의 각 픽셀을 분할하는 문제를 해결할 수 있습니다.

FCN은 인코더와 디코더로 구성됩니다. 인코더는 입력 이미지를 받아 특성 맵으로 변환하는 과정을 수행합니다. 이 특성 맵은 이미지의 로컬 정보를 포착한 것으로, 점점 더 작아지는 인코더 층을 통해 추출됩니다. 이 과정은 이미지의 고수준(high-level) 특징을 추출하면서, 이미지 분할을 위해 필요한 문맥(context) 정보를 보존합니다.

디코더는 인코더에서 추출한 특성 맵을 업샘플링하여 원래 입력 이미지와 같은 크기의 출력 이미지를 생성합니다. 이를 위해 업샘플링 기법을 사용하거나, 디코더 층을 거치면서 각각의 업샘플링된 특성 맵을 결합(concatenate)합니다. 이러한 방식으로 FCN은 입력 이미지의 각 픽셀을 적절한 분할 클래스로 예측할 수 있습니다.

FCN은 이미지 분할, 이미지 캡션 생성(image captioning), 이미지 생성(image generation) 등 다양한 분야에서 사용됩니다. FCN은 U-Net과 같은 다른 이미지 분할모델과는 다르게 인코더와 디코더의 연결 부분이 skip connection으로 이루어져 있습니다. skip connection은 인코더에서 추출한 특성 맵을 디코더에 병합하여 이미지 분할 결과를 개선합니다.

특히, skip connection은 디코더에서 업샘플링하면서 정보를 손실하는 문제를 해결합니다. skip connection을 사용하면 디코더 층에서 각각의 업샘플링된 특성 맵을 결합하면서, 인코더 층에서 추출한 고수준 특성 맵과도 결합할 수 있습니다. 이를 통해 디코더에서 정보가 손실되는 것을 방지하고, 입력 이미지의 로컬 정보와 전역 정보를 모두 활용하여 이미지 분할을 수행할 수 있습니다.

FCN은 U-Net과 달리 이미지의 대칭 구조를 가지지 않습니다. 대신 인코더에서는 기존의 CNN과 유사한 구조를 가지고 있으며, 디코더에서는 업샘플링과 결합을 반복하여 출력 이미지를 생성합니다. 따라서 FCN은 U-Net보다 더 간단하고 유연한 모델 구조를 가지고 있습니다.

FCN은 이미지 분할 문제를 해결하기 위해 개발된 첫 번째 딥러닝 모델 중 하나이며, 이후 다양한 변형 모델이 등장했습니다. 예를 들어, SegNet, DeconvNet, DeepLab 등이 있습니다. 이러한 모델들은 FCN의 구조를 기반으로 하면서도, 각각의 특징을 가지고 있습니다.

U-Net은 딥러닝 분야에서 이미지 분할 작업을 수행하는 데 사용되는 네트워크 아키텍처입니다. 이미지 분할은 입력 이미지를 픽셀 단위로 분할하여 개별 객체 또는 영역을 인식하는 작업입니다. 예를 들어 의료 이미지에서 종양을 감지하거나 자동차 자율주행에서 도로 및 차선을 감지하는 데 사용될 수 있습니다.

U-Net은 Fully Convolutional Network (FCN)의 한 종류로, Convolutional Neural Network (CNN)을 기반으로 하며, 인코더(encoder)와 디코더(decoder)로 구성됩니다. 인코더는 입력 이미지에서 점차 더 작은 크기의 특징 맵을 추출하여 문맥 정보를 포착합니다. 디코더는 인코더에서 추출한 특징 맵을 업샘플링하여 원본 입력 이미지와 동일한 크기의 분할 맵(segmentation map)을 생성합니다. U-Net의 독특한 특징은 인코더와 디코더 사이에 대칭 구조(symmetric skip connections)를 사용하여 더 많은 정보를 보존하는 것입니다. 이러한 대칭 구조는 원래 FCN에 비해 더 나은 결과를 제공합니다.

U-Net은 의료 이미지 분할 및 도로 분할과 같은 다양한 응용 분야에서 효과적으로 사용되고 있으며, 데이터 증강(data augmentation) 및 전이 학습(transfer learning)과 같은 기술과 함께 사용될 때 더 나은 결과를 제공할 수 있습니다
U-Net은 이미지 분할 문제를 해결하기 위해 딥러닝에서 사용되는 Fully Convolutional Network (FCN)의 한 종류입니다. FCN은 전통적인 CNN과 달리 마지막 출력 층(output layer)을 공간 차원만 가지는 특성 맵(feature map)으로 대체하여, 입력 이미지와 같은 크기의 출력 이미지를 생성하는 것을 목표로 합니다.

U-Net은 FCN과 마찬가지로 인코더와 디코더로 구성됩니다. 인코더는 입력 이미지를 받아 특징 맵(feature map)으로 변환합니다. 이 특징 맵은 입력 이미지의 고수준(high-level) 특징을 포착한 것으로, 점점 더 작아지는 인코더 층을 통해 추출됩니다. 이러한 과정은 이미지의 로컬(local) 정보를 전역(global) 정보로 변환하면서, 이미지 분할을 위해 필요한 문맥(context) 정보를 보존합니다.

디코더는 인코더에서 추출한 특징 맵을 업샘플링하고, 각각의 업샘플링된 특징 맵을 이어(concatenate) 원본 입력 이미지와 크기가 같은 분할 맵(segmentation map)을 생성합니다. 이러한 방식으로 U-Net은 입력 이미지의 각 픽셀을 적절한 분할 클래스(class)로 예측할 수 있습니다. U-Net의 디코더는 이러한 예측 과정에서 중요한 역할을 합니다. 대칭 구조를 갖는 U-Net에서는 인코더와 디코더 사이에 스킵 연결(skip connection)이 존재합니다. 이를 통해 인코더에서 추출한 특징 맵이 디코더의 해당 층에 직접 연결되어 정보의 손실 없이 보존됩니다. 이러한 대칭 구조와 스킵 연결은 원래의 FCN보다 더 나은 결과를 보장합니다.

U-Net은 의료 영상 분할, 도로 분할, 얼굴 인식 등 다양한 분야에서 사용되고 있습니다. U-Net은 데이터 증강(data augmentation) 및 전이 학습(transfer learning)과 같은 기술을 함께 사용하면 더욱 높은 정확도를 달성할 수 있습니다.


Python tool은 여러 가지가 있습니다.

그중 Python Idle 설치해보겠습니다.

1. Google에 'Python install' 이나 'Python'을 검색해줍니다.

[그림 1] 이미지 클릭시면 Python 홈페이지로 바로 접속 가능합니다.

 

2. 상단 메뉴 바에서 Downloads에서 사용하는 OS를 선택하시면 됩니다. 

[그림 2] OS에 맡게 들어가기 

 

3. 원하는 버전을 선택하여 클릭합니다.

[그림 3] 이번 포스트에서는 python3.10.2 기준으로 말씀드립니다. (다른 버전들도 크게 다름 없습니다.) 

 

4. Python3.10.2 클릭 후, 가장 아래로 내립니다.

[그림 4] Windows embeddable package(32,64bit)를 선택하시면, zip파일로 받아집니다. Windows installer(32,64bit)를 받으시면 exe파일로 받으실 수 있습니다. zip파일은

보통 4~5년 이내의 컴퓨터는 64bit일 확률이 높습니다.

 4-1 ( 내 컴퓨터 ) 내 PC에서 오른쪽 마우스를 클릭, 속성을 누르시면 '시스템'에서 사용하시는 컴퓨터의 bit를 확인하실 수 있습니다.

[그림 5] 이미지 중앙을 확인하시면, [시스템] 칸 - 시스템 종류 확인

 

5-1. (압축) zip 파일은 압축을 풀면 바로 사용 가능합니다.

[그림 6] Python.exe를 이용가능합니다.

5-2  [ python-3.10.2-amd64.exe ]

          - 바로 Install Now 누르고 착한 버튼만 눌러도 됩니다. 

          - 가장 아래 (Add python 3.10 to path)를 체크 후 Install을 진행하시면,

            python 환경설정을 안 해도 됩니다.

 

 

 

 

 

 

 

 

'PYTHON > PYTHON_기초' 카테고리의 다른 글

Life Is Too Short, You Need Python  (0) 2020.03.29
PYTHON_기초_START  (0) 2020.03.28

 

텐서 플로우 환경설정은 다른 사람 말듣는 법보다는 텐서플로우 홈페이지 들어가서 하는게 더 정확하고 확실하다.

(귀찮으면, 그냥 코랩,,,ㄱㄱ) 들어가기 전, 자신의 GPU에 대해 알고 들어가시길,,,

작업관리자를 들어가 확인하는게 가장 빠름...

그 후 접속

www.tensorflow.org/install/gpu?hl=ko#hardware_requirements

 

GPU 지원  |  TensorFlow

참고: GPU 지원은 CUDA® 지원 카드가 있는 Ubuntu 및 Windows에 제공됩니다. TensorFlow GPU 지원에는 다양한 드라이버와 라이브러리가 필요합니다. 설치를 단순화하고 라이브러리 충돌을 방지하려면 GPU를

www.tensorflow.org

 

차근차근 넘어가면서 확인하시길,,

 

표시된곳 다 눌러서, GPU에 맞게 설치

 

위 방법에 맞게 설치한다면, Tensorflow에서 GPU사용할수있다.

부족한 부분있다면 댓글남겨주세요. 업데이트해드리겠습니다....

 

 

 

비 전공자 개발자에게 파이썬(PYTHON)을 추천하는 이유

 

- 가장 인간다운 언어.

 

- 강력하지만 무료.

 

- 간결하다.

 

- 빠르다.

 

 

 

비 전공자 개발자 파이썬(PYTHON)과 같이 배우기 좋은 언어

 

- 대부분의 타 언어와 잘 어울려 다른 언어와 결합해 조화를 이룬다. -

 

- JAVA

 

- JAVA

 

- JAVA

 

파이썬은 접착_언어라 불릴 정도로 다른 언어와 결합을 잘한다.

비 전공자 개발자가 접근하고 배우고 따라 하기 쉬운 언어는 JAVA 이다.

JAVA는 다른 언어보다 배울수 있는 플랫폼도 많고, 가장 매력적인 언어중 하나다.

지금 보는 웹사이트, 사용하는 어플리케이션또한 대부분 JAVA로 이루어져있다.

그리고 파이썬과 전혀 다른 매력을 갖고 있어, 파이썬과 함께 배우면 두가지 매력을 느낄수 있어 질리는 맛 없이 공부 할 수 있어 병행해서 접하는게 좋다.

 

 

 

 

+ Recent posts