728x90
๋ฐ์ํ
import cv2
import numpy as numpy
import matplotlib.pyplot as plt
img = cv2.imread('./characters.PNG')
img = cv2.blur(img, (10, 10), anchor=(-1, -1), borderType=cv2.BORDER_DEFAULT) # ๋ธ๋ฌ์ฒ๋ฆฌ(๋จ์ด์ง ์กฐ๊ฐ์ ๋ถ์ด๊ธฐ)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # ํ์ ์ ํ
img_gray = 255 - img_gray # ์ด๋ฏธ์ง ๋ฐ์
res, thr = cv2.threshold(img_gray, 90, 255, cv2.THRESH_BINARY) # ์ด์งํ
cv2.imshow('gray', thr)
contours, hierachy = cv2.findContours(thr, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # ์ค๊ณฝ์ ์ถ์ถ
# ์ค๊ณฝ์ ๊ทธ๋ฆฌ๊ธฐ
for cnt in contours[0:]:
cv2.drawContours(img, [cnt], -1, (255, 255, 0), 2)
temp_img = img
# https://answers.opencv.org/question/179510/how-can-i-sort-the-contours-from-left-to-right-and-top-to-bottom/
contours = sorted( contours, key=lambda ctr: cv2.boundingRect(ctr)[0]) # X์ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ์ด๋ฏธ์ง ์์ ์ ๋ ฌ
for cnt in contours[:]:
x, y, w, h = cv2.boundingRect(cnt)
if (h, w) > (10, 10):
cv2.rectangle(img, (x,y), (x+w, y+h), (0, 0, 255), 3)
# ์ฌ์ด์ฆ๋งํผ ์ถ์ถ
cropped = temp_img[y:y+h, x:x+w]
# ์ฌ์ด์ฆ ๋๋ฐฐ
cropped = cv2.pyrUp(cropped, dstsize=(w*2, h*2), borderType=cv2.BORDER_DEFAULT)
cv2.imshow('cropped', cropped)
cv2.waitKey(0)
cv2.imshow('frame', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
๊ฒฐ๊ณผ:
์ฐธ์กฐ:
https://076923.github.io/posts/Python-opencv-21/
Python OpenCV ๊ฐ์ข : ์ 21๊ฐ - ์ค๊ณฝ์ ๊ฒ์ถ
์ค๊ณฝ์ (Contour)
076923.github.io
728x90
๋ฐ์ํ
'๐จ๐ผโ๐ป๊ฐ๋ฐ > OpenCV' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
OpenCV - ํ์ด์ฌ cv2 ์ด๋ฏธ์ง ์์ ํน์ ์ด๋ฏธ์ง ๊ฐ์งํ๊ธฐ (0) | 2023.01.16 |
---|---|
OpenCV - pyinstaller ๋น๋ ํ cv2๊ฐ improt ์๋๋ ์ค๋ฅ ํด๊ฒฐ (0) | 2022.06.27 |
OpenCV - ์ปค์คํ Cascade ๋ง๋ค๊ธฐ(CASCADE TRAINER GUI) ๋ฐ ๋ฌผ์ฒด ํ์ง (0) | 2022.05.19 |
OpenCV - ํ์ด์ฌ ์น์บ ๋, ์ผ๊ตด ์ธ์ (0) | 2022.02.02 |
OpenCV - ํ์ด์ฌ ์น์บ ์ผ๊ตด ์ธ์ (0) | 2022.02.02 |