pbj0812의 코딩 일기

[PYTHON] OpenCV 를 활용한 그래프의 y 좌표 구하기 본문

ComputerLanguage_Program/PYTHON

[PYTHON] OpenCV 를 활용한 그래프의 y 좌표 구하기

pbj0812 2023. 9. 13. 02:06

0. 문제

 - 아래와 같은 그림이 하나 주어졌을때 각 x 좌표에 대한 y 값들을 구하기

1. 실습

 1) library 호출

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

 2) 이미지 가져오기

image = cv2.imread('/content/drive/MyDrive/96__코드/test2.png')

 3) 이미지 크기 및 파란색 좌표 따오기

length = np.shape(image)[1] # 가로 길이
length2 = np.shape(image)[0] # 세로 길이

blue =  [222, 104,   0] # 파란색 BGR(좌표 찍어서 찾음)
image2 = image.reshape(-1, 3) # 데이터를 한 줄로 만들기
indices = np.where(np.all(image2 == blue, axis=1)) # 파란색 좌표 찾기

 4) index 를 이용하여 2 차원 좌표로 변형하기

x = []
y = []
for i in indices:
    x.append(i % length)
    y.append(length2 - (i // length))

 5) 대표 x 값 구하기

X = np.linspace(min(x[0]), max(x[0]), 7) # x 좌표가 7개라 7
X = [int(num) for num in X]
print(X)

 

 6) 구한 x 값을 이용하여 대표 y 값 구하기

  - index 를 쓰면 가장 첫 값만 가져옴

Y = []
for i in X:
    Y.append(y[0][list(x[0]).index(i)])

 7) 데이터 확인

plt.plot(X, Y)

 8) y 좌표의 최소값, 최대값 구하기

min_y = min(Y)
max_y = max(Y)

 9) 최소값과 최대값의 실제값 알려주기

min_answer = 0 # 사용자 정의 필요
max_answer = 4 # 사용자 정의 필요

 10) 비례식을 활용하여 실제 값 구하기

final = []
for i in Y:
    final.append(((max_answer * (i - min_y) + min_answer * (max_y - i)) / (max_y - min_y)))

 11) 결과 확인

  - 0.0, 4.0, 0.5217391304347826, 0.0, 0.0, 0.0, 0.5990338164251208

plt.plot(final)

2. 참고

https://engineer-mole.tistory.com/236

 

[python/OpenCV] OpenCV를 이용해 이미지의 특정 색 추출 (RGB vs HSV)

OpenCV를 사용해서 특정 범위의 색을 추출하는 방법에 대해서 알아보고자 한다. 예를 들어 (0, 0, 100) ~ (100, 100, 225)와 같이 색 범위를 전달해, 그 내용을 바탕으로 범위 내의 화소만을 추출하고자 한

engineer-mole.tistory.com

 

Comments