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

OpenCV ๊ทธ๋ฆฌ๊ธฐ ํ•จ์ˆ˜ ์›, ์‚ฌ๊ฐํ˜•, ์ง์„ , ๋‹ค๊ฐํ˜•, ๋ฌธ์ž์—ด ๋ณธ๋ฌธ

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

OpenCV ๊ทธ๋ฆฌ๊ธฐ ํ•จ์ˆ˜ ์›, ์‚ฌ๊ฐํ˜•, ์ง์„ , ๋‹ค๊ฐํ˜•, ๋ฌธ์ž์—ด

์ง•์ง•์•ŒํŒŒ์นด 2022. 11. 7. 16:47
728x90
๋ฐ˜์‘ํ˜•

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

https://velog.io/@redorangeyellowy/ch02-Python-%EA%B8%B0%EC%B4%88-%EC%82%AC%EC%9A%A9%EB%B2%95-OpenCV-%EA%B7%B8%EB%A6%AC%EA%B8%B0-%ED%95%A8%EC%88%98

 

[ch02] Python ๊ธฐ์ดˆ ์‚ฌ์šฉ๋ฒ• - OpenCV ๊ทธ๋ฆฌ๊ธฐ ํ•จ์ˆ˜

OpenCV๋Š” ์˜์ƒ์— ์„ , ๋„ํ˜•, ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜๋Š” ๊ทธ๋ฆฌ๊ธฐ ํ•จ์ˆ˜๋ฅผ ์ œ๊ณต์„  ๊ทธ๋ฆฌ๊ธฐ : ์ง์„ , ํ™”์‚ดํ‘œ, ๋งˆ์ปค ๋“ฑ๋„ํ˜• ๊ทธ๋ฆฌ๊ธฐ : ์‚ฌ๊ฐํ˜•, ์›, ํƒ€์›, ๋‹ค๊ฐํ˜• ๋“ฑ๋ฌธ์ž์—ด ์ถœ๋ ฅ๊ทธ๋ฆฌ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ์˜์ƒ์˜ ํ”ฝ

velog.io

 

 

๐ŸŒˆ OpenCV ๊ทธ๋ฆฌ๊ธฐ ํ•จ์ˆ˜

  • ์„ , ๋„ํ˜•, ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜๋Š” ๊ทธ๋ฆฌ๊ธฐ ํ•จ์ˆ˜๋ฅผ ์ œ๊ณต
  • ์„  ๊ทธ๋ฆฌ๊ธฐ : ์ง์„ , ํ™”์‚ดํ‘œ, ๋งˆ์ปค ๋“ฑ
  • ๋„ํ˜• ๊ทธ๋ฆฌ๊ธฐ : ์‚ฌ๊ฐํ˜•, ์›, ํƒ€์›, ๋‹ค๊ฐํ˜• ๋“ฑ
  • ๋ฌธ์ž์—ด ์ถœ๋ ฅ

 

๐ŸŒˆ ๊ทธ๋ฆฌ๊ธฐ ํ•จ์ˆ˜ ์ฃผ์˜ํ•  ์ 

  • ๊ทธ๋ฆฌ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ์˜์ƒ์˜ ํ”ฝ์…€ ๊ฐ’ ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝ
    • ์›๋ณธ ์˜์ƒ์ด ํ•„์š”ํ•˜๋ฉด ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค์–ด์„œ ๊ทธ๋ฆฌ๊ธฐ & ์ถœ๋ ฅ
  • ๊ทธ๋ ˆ์ด์Šค์ผ€์ผ ์˜์ƒ์—๋Š” ์ปฌ๋Ÿฌ๋กœ ๊ทธ๋ฆฌ๊ธฐ ์•ˆ๋จ
    • cv2.cvtColor() ํ•จ์ˆ˜๋กœ BGR ์ปฌ๋Ÿฌ ์˜์ƒ์œผ๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ ๊ทธ๋ฆฌ๊ธฐ ํ•จ์ˆ˜ ํ˜ธ์ถœ

 

 

๐Ÿšฉ ์ง์„ 

import cv2
import numpy as np

img = np.full((400, 400, 3), 255, np.uint8)
- ์ง์„  ๊ทธ๋ฆฌ๊ธฐ
    - img : ๊ทธ๋ฆผ์„ ๊ทธ๋ฆด ์˜์ƒ
    - pt1, pt2 : ์ง์„ ์˜ ์‹œ์ž‘์ ๊ณผ ๋์ . (x, y) ํŠœํ”Œ.
    - color : ์„  ์ƒ‰์ƒ ๋˜๋Š” ๋ฐ๊ธฐ. (B, G, R) ํŠœํ”Œ ๋˜๋Š” ์ •์ˆ˜๊ฐ’.
    - thickness : ์„  ๋‘๊ป˜. ๊ธฐ๋ณธ๊ฐ’์€ 1.
    - lineType : ์„  ํƒ€์ž…. cv2.LINE_4, cv2.LINE_8, cv2.LINE_AA ์ค‘ ์„ ํƒ. ๊ธฐ๋ณธ๊ฐ’์€ cv2.LINE_8
    - shift : ๊ทธ๋ฆฌ๊ธฐ ์ขŒํ‘œ ๊ฐ’์˜ ์ถ•์†Œ ๋น„์œจ. ๊ธฐ๋ณธ๊ฐ’์€ 0.
cv2.line(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)
cv2.line(img, (50, 50), (200, 50), (0, 0, 255), 5)

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

 

 

๐Ÿšฉ ์‚ฌ๊ฐํ˜•

- ์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ
    - img : ๊ทธ๋ฆผ์„ ๊ทธ๋ฆด ์˜์ƒ
    - pt1, pt2 : ์‚ฌ๊ฐํ˜•์˜ ๋‘ ๊ผญ์ง€์  ์ขŒํ‘œ. (x, y) ํŠœํ”Œ
    - rec : ์‚ฌ๊ฐํ˜• ์œ„์น˜ ์ •๋ณด. (x, y, w, h) ํŠœํ”Œ
    - color : ์„  ์ƒ‰์ƒ ๋˜๋Š” ๋ฐ๊ธฐ. (B, G, R) ํŠœํ”Œ ๋˜๋Š” ์ •์ˆ˜๊ฐ’.
    - thickness : ์„  ๋‘๊ป˜. ๊ธฐ๋ณธ๊ฐ’์€ 1. ์Œ์ˆ˜(-1)๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋‚ด๋ถ€๋ฅผ ์ฑ„์›€.
    - lineType : ์„  ํƒ€์ž…. cv2.LINE_4, cv2.LINE_8, cv2.LINE_AA ์ค‘ ์„ ํƒ. ๊ธฐ๋ณธ๊ฐ’์€ cv2.LINE_8
    - shift : ๊ทธ๋ฆฌ๊ธฐ ์ขŒํ‘œ ๊ฐ’์˜ ์ถ•์†Œ ๋น„์œจ. ๊ธฐ๋ณธ๊ฐ’์€ 0
cv2.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)
cv2.rectangle(img, (70, 220), (180, 280), (0, 128, 0), -1)

cv2.rectangle(img, rec, color, thickness=None, lineType=None, shift=None)
cv2.rectangle(img, (50, 200, 150, 100), (0, 255, 0), 2)

 

 

๐Ÿšฉ ์›

- ์› ๊ทธ๋ฆฌ๊ธฐ
    - img : ๊ทธ๋ฆผ์„ ๊ทธ๋ฆด ์˜์ƒ
    - center : ์›์˜ ์ค‘์‹ฌ ์ขŒํ‘œ. (x, y) ํŠœํ”Œ.
    - radius : ์›์˜ ๋ฐ˜์ง€๋ฆ„
    - color : ์„  ์ƒ‰์ƒ ๋˜๋Š” ๋ฐ๊ธฐ. (B, G, R) ํŠœํ”Œ ๋˜๋Š” ์ •์ˆ˜๊ฐ’.
    - thickness : ์„  ๋‘๊ป˜. ๊ธฐ๋ณธ๊ฐ’์€ 1. ์Œ์ˆ˜(-1)๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋‚ด๋ถ€๋ฅผ ์ฑ„์›€.
    - lineType : ์„  ํƒ€์ž…. cv2.LINE_4, cv2.LINE_8, cv2.LINE_AA ์ค‘ ์„ ํƒ. ๊ธฐ๋ณธ๊ฐ’์€ cv2.LINE_8
    - shift : ๊ทธ๋ฆฌ๊ธฐ ์ขŒํ‘œ ๊ฐ’์˜ ์ถ•์†Œ ๋น„์œจ. ๊ธฐ๋ณธ๊ฐ’์€ 0.
cv2.circle(img, center, radius, color, thickness=None, lineType=None, shift=None)
cv2.circle(img, (300, 100), 60, (255, 0, 0), 3, cv2.LINE_AA)

 

๐Ÿšฉ ๋‹ค๊ฐํ˜•

- ๋‹ค๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ
    - img : ๊ทธ๋ฆผ์„ ๊ทธ๋ฆด ์˜์ƒ
    - pts : ๋‹ค๊ฐํ˜• ์™ธ๊ณฝ ์ ๋“ค์˜ ์ขŒํ‘œ ๋ฐฐ์—ด. numpy.ndarray์˜ ๋ฆฌ์ŠคํŠธ.
        - ex. [np.array([[10, 10], [50, 50], [10, 50]], dtype=np.int32)]
    - isClosed : ํ๊ณก์„  ์—ฌ๋ถ€. True ๋˜๋Š” False ์ง€์ •.
    - color : ์„  ์ƒ‰์ƒ ๋˜๋Š” ๋ฐ๊ธฐ. (B, G, R) ํŠœํ”Œ ๋˜๋Š” ์ •์ˆ˜๊ฐ’.
    - thickness : ์„  ๋‘๊ป˜. ๊ธฐ๋ณธ๊ฐ’์€ 1. ์Œ์ˆ˜(-1)๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋‚ด๋ถ€๋ฅผ ์ฑ„์›€.
    - lineType : ์„  ํƒ€์ž…. cv2.LINE_4, cv2.LINE_8, cv.LINE_AA ์ค‘ ์„ ํƒ. ๊ธฐ๋ณธ๊ฐ’์€ cv2.LINE_8
    - shift : ๊ทธ๋ฆฌ๊ธฐ ์ขŒํ‘œ ๊ฐ’์˜ ์ถ•์†Œ ๋น„์œจ. ๊ธฐ๋ณธ๊ฐ’์€ 0
cv2.polylines(img, pts, isClosed, color, thickness=None, lineType=None, shift=None)
pts = np.array([[250, 200], [300, 200], [350, 300], [250, 300]])
cv2.polylines(img, [pts], True, (255, 0, 255), 2)

 

๐Ÿšฉ ๋ฌธ์ž์—ด

- ๋ฌธ์ž์—ด ์ถœ๋ ฅ
    - img : ๊ทธ๋ฆผ์„ ๊ทธ๋ฆด ์˜์ƒ
    - text : ์ถœ๋ ฅํ•  ๋ฌธ์ž์—ด
    - org : ์˜์ƒ์—์„œ ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•  ์œ„์น˜์˜ ์ขŒ์ธก ํ•˜๋‹จ ์ขŒํ‘œ. (x, y) ํŠœํ”Œ
    - fontFace : ํฐํŠธ ์ข…๋ฅ˜. cv2.FONTHERSHEY๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ƒ์ˆ˜ ์ค‘ ์„ ํƒ
    - fontScale : ํฐํŠธ ํฌ๊ธฐ ํ™•๋Œ€/์ถ•์†Œ ๋น„์œจ
    - thickness : ์„  ๋‘๊ป˜. ๊ธฐ๋ณธ๊ฐ’์€ 1. ์Œ์ˆ˜(-1)๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋‚ด๋ถ€๋ฅผ ์ฑ„์›€.
    - lineType : ์„  ํƒ€์ž…. cv2.LINE_4, cv2.LINE_8, cv2.LINE_AA ์ค‘ ์„ ํƒ.
    - bottomLeftOrigin : True์ด๋ฉด ์˜์ƒ์˜ ์ขŒ์ธก ํ•˜๋‹จ์„ ์›์ ์œผ๋กœ ๊ฐ„์ฃผ. ๊ธฐ๋ณธ๊ฐ’์€ False.
cv2.putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None)
text = 'Hello? OpenCV ' + cv2.__version__
cv2.putText(img, text, (50, 350), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 1, cv2.LINE_AA)

 

 

 

 

 

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