π λ³Έ μμ λ Window10μ VSCode, Python3.11.0λ‘ μμ±λμμ΅λλ€.
μ΄μ§ν(Binarization)
μμμ μ΄μ§ν(Binarization)λ μμμ κ° ν½μ μ λ κ°μ λΆλ₯λ‘ λλλ μμ μ΄λ€.
μ΄λ₯Ό ν΅ν΄ μμμ μ£Όμ κ°μ²΄ μμκ³Ό λ°°κ²½ μμμΌλ‘ λλκ±°λ λλ μμμμ μ€μλκ° λμ κ΄μ¬ μμκ³Ό κ·Έλ μ§ μμ λΉκ΄μ¬ μμμΌλ‘ ꡬλΆνλ μ©λλ‘ μ΄μ§νκ° μ¬μ©λ μ μλ€.
μ΄μ§νκ° μ§νλλ©΄ μμμ ν½μ κ°μ 0λλ 255λ‘ κ΅¬μ±λλ©° ν°μ λλ κ²μμ ν½μ λ‘λ§ κ΅¬μ±λλ€.]
μ΄μ§νλ₯Ό νλ λ°©λ²μ νΉμ κ°μ κΈ°μ€μΌλ‘ ν¬λ©΄ 255, μμ κ²½μ° 0μΌλ‘ μ€μ νλ€.
import cv2
if __name__ == "__main__":
im = cv2.imread("test.png")
shape = (int(im.shape[1] * 0.5), int(im.shape[0] * 0.5))
im = cv2.resize(im,shape)
cv2.imshow("Origin",im)
gim = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
# κ³ μ μκ³κ°
_, b_fix = cv2.threshold(gim,120,255,cv2.THRESH_BINARY)
cv2.imshow("Fix Binary",b_fix)
# Otsuλ₯Ό μ¬μ©νμ¬ μλμΌλ‘ μ΅μ μ μκ³κ° κ³μΌ
_, b_otsu = cv2.threshold(gim,0,255,cv2.THRESH_BINARY + cv2.THRESH_OTSU)
cv2.imshow("Otsu Binary",b_otsu)
cv2.waitKey(0)
cv2.destroyAllWindows()
ThresholdType μ΄κ±°ν μμ | μ€λͺ |
cv2.THRESH_BINARY | μ£Όμ΄μ§ μκ³κ°λ³΄λ€ ν° ν½μ μ μ΅λκ°μΌλ‘ μ€μ νκ³ , μμ ν½μ μ 0μΌλ‘ μ€μ νλ€. (νλ°± μ΄μ§ν) |
cv2.THRESH_BINARY_INV | THRESH_BINARYμ λ°λλ‘ λμν©λλ€. μ£Όμ΄μ§ μκ³κ°λ³΄λ€ ν° ν½μ μ 0μΌλ‘, μμ ν½μ μ μ΅λκ°μΌλ‘ μ€μ νλ€. |
cv2.THRESH_TRUNC | μ£Όμ΄μ§ μκ³κ°λ³΄λ€ ν° ν½μ μ μκ³κ°μΌλ‘ μ€μ νκ³ , μμ ν½μ μ κ·Έλλ‘ μ μ§νλ€. |
cv2.THRESH_TOZERO | μ£Όμ΄μ§ μκ³κ°λ³΄λ€ ν° ν½μ μ κ·Έλλ‘ μ μ§νκ³ , μμ ν½μ μ 0μΌλ‘ μ€μ νλ€. |
cv2.THRESH_TOZERO_INV | THRESH_TOZEROμ λ°λλ‘ λμν©λλ€. μ£Όμ΄μ§ μκ³κ°λ³΄λ€ ν° ν½μ μ 0μΌλ‘, μμ ν½μ μ κ·Έλλ‘ μ μ§νλ€. |
cv2.THRESH_OTSU | μλμΌλ‘ μ΅μ μ μκ³κ°μ κ²°μ νλ Otsuμ λ°©λ²μ μ¬μ©νλ€. μ΄ λ°©λ²μ μ΄λ―Έμ§μ νμ€ν κ·Έλ¨μ λΆμνμ¬ μ΅μ μ μκ³κ°μ μ°Ύμ΅λλ€. λ€λ₯Έ μκ³κ° λ°©μκ³Ό ν¨κ» μ¬μ©ν΄μΌ νλ€. |
cv2.THRESH_TRIANGLE | λ λ€λ₯Έ μλ μκ³κ° κ²°μ λ°©λ²μΌλ‘, μΌκ°ν λ°©λ²μ μ¬μ©νμ¬ μ΅μ μ μκ³κ°μ μ°Ύλλ€. |
λΆκ· μΌν μ‘°λͺ νκ²½μ κ²½μ° νλμ μκ³κ°μΌλ‘ κ°μ²΄μ λ°°κ²½μ μ λλ‘ κ΅¬λΆνκΈ° μ΄λ ΅κΈ° λλ¬Έμ κ° ν½μ λ§λ€ μλ‘ λ€λ₯Έ μκ³κ°μ μ¬μ©νλ μ μν μ΄μ§ν(Adaptive Binarization) κΈ°λ²μ μ¬μ©νλ κ²μ΄ ν¨κ³Όμ μ΄λ€.
import cv2
if __name__ == "__main__":
im = cv2.imread("test.png")
shape = (int(im.shape[1] * 0.5), int(im.shape[0] * 0.5))
im = cv2.resize(im,shape)
cv2.imshow("Origin",im)
gim = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
# μ μν μ΄μ§ν
adp = cv2.adaptiveThreshold(gim,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)
cv2.imshow("AdaptiveThreshold",adp)
cv2.waitKey(0)
cv2.destroyAllWindows()
λͺ¨ν΄λ‘μ§(Morphology)
μμ λ΄λΆ κ°μ²΄μ ννμ ꡬ쑰λ₯Ό λΆμνκ³ μ²λ¦¬νλ κΈ°λ²μ΄λ€.
μ£Όλ‘ μ΄μ§νλ μμμμ κ°μ²΄μ λͺ¨μμ λ³ννλ μ©λλ‘ μ¬μ©λλ€.
κΈ°λ³Έμ΄ λλ μ°μ°μ μΉ¨μ(erosion)κ³Ό ν½μ°½(dilation)μ΄λ€.
λͺ¨ν΄λ‘μ§ μ°μ°μ μν λ€μν κ΅¬μ‘°κ° μλ€.
μ΄λ¬ν μ°μ° ꡬ쑰λ₯Ό ν΅ν΄ μΉ¨μκ³Ό ν½μ°½ μ°μ°μ νλ€.
import cv2
if __name__ == "__main__":
im = cv2.imread("test.png")
shape = (int(im.shape[1] * 0.5), int(im.shape[0] * 0.5))
im = cv2.resize(im,shape)
cv2.imshow("Origin",im)
gim = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
# μΉ¨μ
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)) # (5x5)
eroded = cv2.erode(gim,kernel=kernel,iterations=1)
cv2.imshow("Eroded",eroded)
# ν½μ°½
dilated = cv2.dilate(gim,kernel=kernel,iterations=1)
cv2.imshow("Dilated",dilated)
cv2.waitKey(0)
cv2.destroyAllWindows()
'AI > Computer Vision' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Computer Vision] κ°μ²΄ κ²μΆκ³Ό μμ© (0) | 2024.09.06 |
---|---|
[Computer Vision] λ μ΄λΈλ§κ³Ό μΈκ°μ κ²μΆ (0) | 2024.09.04 |
[Computer Vision] μ»¬λ¬ μμ μ²λ¦¬ (0) | 2024.09.02 |
[Computer Vision] μμ§(Edge) κ²μΆ (0) | 2024.09.02 |
[Computer Vision] μμμ κΈ°ννμ λ³ν (0) | 2024.08.30 |