๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[v0.6]์์์ฒ๋ฆฌ_OpenCV_๋ํ ๊ทธ๋ฆฌ๊ธฐ ๋ณธ๋ฌธ
[v0.6]์์์ฒ๋ฆฌ_OpenCV_๋ํ ๊ทธ๋ฆฌ๊ธฐ
์ง์ง์ํ์นด 2021. 12. 28. 01:44211228 ์์ฑ
<๋ณธ ๋ธ๋ก๊ทธ๋ ๊ทํ์ด ์์ฌ๋์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด์ ๊ณต๋ถํ๋ฉฐ ์์ฑํ์์ต๋๋ค>
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()
์ฒจ ํด๋ณด๋๋
๊ทธ๋ฆผ๊ทธ๋ฆฌ๊ธฐ!!
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/007.gif)