๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[v0.6]์˜์ƒ์ฒ˜๋ฆฌ_OpenCV_๋„ํ˜• ๊ทธ๋ฆฌ๊ธฐ ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป IoT (Embedded)/Image Processing

[v0.6]์˜์ƒ์ฒ˜๋ฆฌ_OpenCV_๋„ํ˜• ๊ทธ๋ฆฌ๊ธฐ

์ง•์ง•์•ŒํŒŒ์นด 2021. 12. 28. 01:44
728x90
๋ฐ˜์‘ํ˜•

211228 ์ž‘์„ฑ

<๋ณธ ๋ธ”๋กœ๊ทธ๋Š” ๊ท€ํ‰์ด ์„œ์žฌ๋‹˜์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค>

https://bkshin.tistory.com/entry/OpenCV-4-%EB%8F%84%ED%98%95-%EA%B7%B8%EB%A6%AC%EA%B8%B0?category=1148027 

 

OpenCV - 4. ๋„ํ˜• ๊ทธ๋ฆฌ๊ธฐ

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ด๋ฏธ์ง€์— ๋„ํ˜•์„ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ… ์—ญ์‹œ 'ํŒŒ์ด์ฌ์œผ๋กœ ๋งŒ๋“œ๋Š” OpenCV ํ”„๋กœ์ ํŠธ(์ด์„ธ์šฐ ์ €)'๋ฅผ ์ •๋ฆฌํ•œ ๊ฒƒ์ž„์„ ๋ฐํž™๋‹ˆ๋‹ค. ์ฝ”๋“œ: https://github.com/BaekK

bkshin.tistory.com

 

 

 

1. ์ง์„  ๊ทธ๋ฆฌ๊ธฐ

cv2.line(img, start, end, color, thickness, lineType)

: ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์„  ๊ทธ๋ฆฌ๊ธฐ

- img: ๊ทธ๋ฆผ์„ ๊ทธ๋ฆด ์ด๋ฏธ์ง€ ํŒŒ์ผ
- start: ์„  ์‹œ์ž‘ ์ขŒํ‘œ(ex; (0,0))
- end: ์„  ์ข…๋ฃŒ ์ขŒํ‘œ(ex; (500. 500))
- color: BGRํ˜•ํƒœ์˜ ์„  ์ƒ‰์ƒ (ex; (255, 0, 0) -> Blue)
- thickness (int): ์„ ์˜ ๋‘๊ป˜. pixel (default=1)
- lineType: ์„  ๊ทธ๋ฆฌ๊ธฐ ํ˜•์‹ (cv2.LINE_4, cv2.LINE_8, cv2.LINE_AA)

 

# ๋‹ค์–‘ํ•œ ์ง์„  ๊ทธ๋ฆฌ๊ธฐ

import cv2

img = cv2.imread('img/sample.jpeg')

cv2.line(img, (50, 50), (150, 50), (255,0,0))   # ํŒŒ๋ž€์ƒ‰ 1ํ”ฝ์…€ ์„ 
cv2.line(img, (200, 50), (300, 50), (0,255,0),  20, cv2.LINE_4)  # ์ดˆ๋ก์ƒ‰ 4์—ฐ๊ฒฐ ์„ 
cv2.line(img, (300, 50), (450, 50), (0,0,255), 10)  # ๋นจ๊ฐ„์ƒ‰ 10ํ”ฝ์…€ ์„ 

cv2.imshow('lines', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

์„  ๊ทธ๋ฆฌ๊ธฐ

 

2. ์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ

cv2.rectangle(img, start, end, color, thickness, lineType)

- img: ๊ทธ๋ฆผ์„ ๊ทธ๋ฆด ์ด๋ฏธ์ง€ ํŒŒ์ผ 
- start: ์‚ฌ๊ฐํ˜• ์‹œ์ž‘ ๊ผญ์ง“์  ์ขŒํ‘œ(ex; (0,0)) 
- end: ์‚ฌ๊ฐํ˜• ์ข…๋ฃŒ ๊ผญ์ง“์  ์ขŒํ‘œ(ex; (500. 500)) 
- color: BGRํ˜•ํƒœ์˜ ์„  ์ƒ‰์ƒ (ex; (255, 0, 0) -> Blue) 
- thickness (int): ์„ ์˜ ๋‘๊ป˜. pixel (default=1,  ์‚ฌ๊ฐํ˜• ์ „์ฒด๋ฅผ ์ƒ‰์ƒ์œผ๋กœ ์ฑ„์šฐ๊ธฐ=-1)
- lineType: ์„  ๊ทธ๋ฆฌ๊ธฐ ํ˜•์‹ (cv2.LINE_4, cv2.LINE_8, cv2.LINE_AA)

# ๋‹ค์–‘ํ•œ ์ง์„  ๊ทธ๋ฆฌ๊ธฐ

import cv2

img = cv2.imread('img/sample.jpeg')

# ์ขŒ์ƒ, ์šฐํ•˜ ์ขŒํ‘œ๋กœ ์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ, ์„  ๋‘๊ป˜๋Š” default 1
cv2.rectangle(img, (50, 50), (120, 150), (255,0,0) )        
# ์šฐํ•˜, ์ขŒ์ƒ ์ขŒํ‘œ๋กœ ์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ, ์„  ๋‘๊ป˜ 10
cv2.rectangle(img, (100, 300), (120, 100), (0,255,0), 10 )  
# ์šฐ์ƒ, ์ขŒํ•˜ ์ขŒํ‘œ๋กœ ์‚ฌ๊ฐํ˜• ์ฑ„์›Œ ๊ทธ๋ฆฌ๊ธฐ ---โ‘ 
cv2.rectangle(img, (200, 200), (240, 450), (0,0,255), -1 )  

cv2.imshow('rectangle', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ

 

 

3. ๋‹ค๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ

 cv2.polylines(img, pts, isClosed, color, thickness, lineType) 

- img: ๊ทธ๋ฆผ์„ ๊ทธ๋ฆด ์ด๋ฏธ์ง€ ํŒŒ์ผ 
pts: ์—ฐ๊ฒฐํ•  ๊ผญ์ง“์  ์ขŒํ‘œ, Numpy array
isClosed: ๋‹ซํžŒ ๋„ํ˜• ์—ฌ๋ถ€, True/False
color: BGRํ˜•ํƒœ์˜ ์„  ์ƒ‰์ƒ (ex; (255, 0, 0) -> Blue) 
thickness (int): ์„ ์˜ ๋‘๊ป˜. pixel (default=1)
lineType: ์„  ๊ทธ๋ฆฌ๊ธฐ ํ˜•์‹ (cv2.LINE_4, cv2.LINE_8, cv2.LINE_AA)

# ๋‹ค๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ

import cv2
import numpy as np                          # ์ขŒํ‘œ ํ‘œํ˜„์„ ์œ„ํ•œ numpy ๋ชจ๋“ˆ  ---โ‘ 

img = cv2.imread('img/sample.jpeg')

# Numpy array๋กœ ์ขŒํ‘œ ์ƒ์„ฑ ---โ‘ก
# ๋ฒˆ๊ฐœ ๋ชจ์–‘ ์„  ์ขŒํ‘œ
pts1 = np.array([[50,50], [150,150], [100,140],[200,240]], dtype=np.int32) 
# ์‚ผ๊ฐํ˜• ์ขŒํ‘œ
pts2 = np.array([[350,50], [250,200], [450,200]], dtype=np.int32) 
# ์‚ผ๊ฐํ˜• ์ขŒํ‘œ
pts3 = np.array([[150,300], [50,450], [250,450]], dtype=np.int32) 
# 5๊ฐํ˜• ์ขŒํ‘œ
pts4 = np.array([[350,250], [450,350], [400,450], [300,450], [250,350]],\
                 dtype=np.int32) 

# ๋‹ค๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ ---โ‘ข
cv2.polylines(img, [pts1], False, (255,0,0))       # ๋ฒˆ๊ฐœ ๋ชจ์–‘ ์„  ๊ทธ๋ฆฌ๊ธฐ
cv2.polylines(img, [pts2], False, (0,0,0), 10)     # 3๊ฐํ˜• ์—ด๋ฆฐ ์„  ๊ทธ๋ฆฌ๊ธฐ ---โ‘ฃ
cv2.polylines(img, [pts3], True, (0,0,255), 10)    # 3๊ฐํ˜• ๋‹ซํžŒ ๋„ํ˜• ๊ทธ๋ฆฌ๊ธฐ ---โ‘ค
cv2.polylines(img, [pts4], True, (0,0,0))          # 5๊ฐํ˜• ๋‹ซํžŒ ๋„ํ˜• ๊ทธ๋ฆฌ๊ธฐ

cv2.imshow('polyline', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

๋‹ค๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ

 

4. ์›, ํƒ€์›, ํ˜ธ ๊ทธ๋ฆฌ๊ธฐ

cv2.circle(img, center, radius, color, thickness, lineType) ํ•จ์ˆ˜๋Š” ์›

- radius : ์›์˜ ๋ฐ˜์ง€๋ฆ„
cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness, lineType) ํ•จ์ˆ˜๋Š” ํƒ€์›

- center: ํƒ€์›์˜ ์ค‘์‹ฌ ์ขŒํ‘œ (x, y)
axes: ํƒ€์›์˜ ์ค‘์‹ฌ์—์„œ ๊ฐ€์žฅ ๊ธด ์ถ•์˜ ๊ธธ์ด์™€ ๊ฐ€์žฅ ์งง์€ ์ถ•์˜ ๊ธธ์ด
angle: ํƒ€์›์˜ ๊ธฐ์ค€ ์ถ• ํšŒ์ „ ๊ฐ๋„
startAngle: ํƒ€์›์˜ ํ˜ธ๊ฐ€ ์‹œ์ž‘ํ•˜๋Š” ๊ฐ๋„
endAngle: ํƒ€์›์˜ ํ˜ธ๊ฐ€ ๋๋‚˜๋Š” ๊ฐ๋„

# ์›, ํƒ€์›, ํ˜ธ ๊ทธ๋ฆฌ๊ธฐ

import cv2

img = cv2.imread('img/sample.jpeg')

# ์›์ (150,150), ๋ฐ˜์ง€๋ฆ„ 100 ---โ‘ 
cv2.circle(img, (150, 150), 100, (255,0,0))     

# ์›์ (400,150), ๋ฐ˜์ง€๋ฆ„ 50, ์ฑ„์šฐ๊ธฐ ---โ‘ข
cv2.circle(img, (400, 150), 50, (0,0,255), -1)  

# ์›์ (50,300), ๋ฐ˜์ง€๋ฆ„(50), ํšŒ์ „ 0, 0๋„ ๋ถ€ํ„ฐ 360๋„ ๊ทธ๋ฆฌ๊ธฐ ---โ‘ฃ
cv2.ellipse(img, (50, 300), (50, 50), 0, 0, 360, (0,0,255))    

# ์›์ (325, 300), ๋ฐ˜์ง€๋ฆ„(75,50) ๋‚ฉ์ž‘ํ•œ ํƒ€์› ๊ทธ๋ฆฌ๊ธฐ ---โ‘ฆ
cv2.ellipse(img, (325, 300), (75, 50), 0, 0, 360, (0,255,0))    
# ์›์ (450,300), ๋ฐ˜์ง€๋ฆ„(50,75) ํ™€์ญ‰ํ•œ ํƒ€์› ๊ทธ๋ฆฌ๊ธฐ ---โ‘ง
cv2.ellipse(img, (450, 300), (50, 75), 0, 0, 360, (255,0,255))    

# ์›์ (350,425), ํ™€์ญ‰ํ•œ ํƒ€์› 45๋„ ํšŒ์ „ ํ›„ ์•„๋žซ ๋ฐ˜์› ๊ทธ๋ฆฌ๊ธฐ ---โ‘ช
cv2.ellipse(img, (150, 265), (50, 75), 45, 0, 180, (0,0,255))    
# ์›์ (400,425), ํ™€์ญ‰ํ•œ ํƒ€์› 45๋„ ํšŒ์ „ ํ›„ ์œ— ๋ฐ˜์› ๊ทธ๋ฆฌ๊ธฐ ---โ‘ซ
cv2.ellipse(img, (200, 225), (50, 75), 45, 181, 360, (255,0,0))   


cv2.imshow('circle', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

์› ํƒ€์› ํ˜ธ ๊ทธ๋ฆฌ๊ธฐ

 

 

5. ๊ธ€์“ฐ๊ธฐ

cv2.putText(img, text, org, font, fontScale, color, thickness, lineType)

- text : ํ‘œ์‹œํ•  ๋ฌธ์ž์—ด

- org : ๋ฌธ์ž์—ด์„ ํ‘œ์‹œํ•  ์œ„์น˜(์ขŒ์ธก ํ•˜๋‹จ ๊ธฐ์ค€) (x, y)

- font : ๊ธ€๊ผด(cv2.FONT_XXXX ํ˜•์‹)

- fontScale : ๊ธ€๊ผด ํฌ๊ธฐ

# ๊ธ€ ์“ฐ๊ธฐ

import cv2

img = cv2.imread('img/sample.jpeg')

# sans-serif small
cv2.putText(img, "Alpaca", (50, 30), cv2.FONT_HERSHEY_PLAIN, 1, (0, 0,0))                
# sans-serif normall X2  ---โ‘ 
cv2.putText(img, "cute girl!", (10, 110), cv2.FONT_HERSHEY_SIMPLEX, 2, (0,0,250)) 

# serif small
cv2.putText(img, "Image Processing", (50, 180), cv2.FONT_HERSHEY_COMPLEX_SMALL, \
            1, (0, 0,0))            

# hand-wringing sans-serif
cv2.putText(img, "I'm pretty", (50, 230), cv2.FONT_HERSHEY_SCRIPT_SIMPLEX, \
            1, (0, 0,0)) 

# sarif + italic
cv2.putText(img, "very hungry", (100, 170), \
            cv2.FONT_HERSHEY_COMPLEX | cv2.FONT_ITALIC, 1, (0, 0,0)) 

cv2.imshow('draw text', img)
cv2.waitKey()
cv2.destroyAllWindows()

๊ธ€์“ฐ๊ธฐ

 

 

์ฒจ ํ•ด๋ณด๋Š๋Š”

๊ทธ๋ฆผ๊ทธ๋ฆฌ๊ธฐ!!

 

728x90
๋ฐ˜์‘ํ˜•
Comments