๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿค– Computer Vision

์ปดํ“จํ„ฐ ๋น„์ „ ์˜์ƒ์ฒ˜๋ฆฌ - (ํŒฝ์ฐฝ, ์นจ์‹, ์—ด๊ธฐ, ๋‹ซ๊ธฐ) openCV Python ์ฝ”๋“œ

 

2023.07.31 - [Computer Vision] - ์˜์ƒ์ฒ˜๋ฆฌ - ์ด์ง„ ๋ชจํด๋กœ์ง€, ๋ช…์•” ๋ชจํด๋กœ์ง€ (ํŒฝ์ฐฝ, ์นจ์‹, ์—ด๊ธฐ, ๋‹ซ๊ธฐ)

 

์˜์ƒ์ฒ˜๋ฆฌ - ์ด์ง„ ๋ชจํด๋กœ์ง€, ๋ช…์•” ๋ชจํด๋กœ์ง€ (ํŒฝ์ฐฝ, ์นจ์‹, ์—ด๊ธฐ, ๋‹ซ๊ธฐ)

์˜์ƒ์ฒ˜๋ฆฌ์—์„œ ๋ชจํด๋กœ์ง€๋ž€ ? ์˜์ƒ์˜ ํ˜•ํƒœ์™€ ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ์ˆ ๋กœ์„œ, ์˜์ƒ ๋‚ด์˜ ๊ฐ์ฒด๋‚˜ ํŠน์ •ํ•œ ํŒจํ„ด์„ ์ฐพ๊ณ  ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ฃผ๋กœ ์ด์ง„ํ™”๋œ ์˜์ƒ์—์„œ ๊ฐ์ฒด์˜ ํ˜•ํƒœ, ํฌ๊ธฐ, ๊ฒฝ๊ณ„

mcrkgus.tistory.com

 

์ด์ „์— ์ž‘์„ฑํ•œ ์ด์ง„ ๋ชจํด๋กœ์ง€์™€ ๋ช…์•” ๋ชจํด๋กœ์ง€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํŒฝ์ฐฝ, ์นจ์‹, ์—ด๊ธฐ, ๋‹ซ๊ธฐ ์— ๋Œ€ํ•œ ์ฝ”๋“œ์ด๋‹ค. 

openCV๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. 

 

 

Code

img = cv2.imread('roopy.jpg', cv2.IMREAD_GRAYSCALE)

 

ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•˜๊ณ , ๊ทธ๋ ˆ์ด์Šค์ผ€์ผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ฝ์–ด์˜จ๋‹ค. 

 

 

 

kernel = np.ones((5, 5), np.uint8)

 

5x5 ํฌ๊ธฐ์˜ 1๋กœ ์ฑ„์›Œ์ง„ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๋ชจํด๋กœ์ง€ ์—ฐ์‚ฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ์กฐ ์š”์†Œ์ด๋‹ค. 

 

 

 

erosion = cv2.erode(img, kernel, iterations=1)

 

cv2.erode() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€์— ์ˆ˜์ถ• ์—ฐ์‚ฐ์„ ์ ์šฉํ•œ๋‹ค. ์ด๋ฏธ์ง€์˜ ๋ฐ์€ ์˜์—ญ์„ ์ถ•์†Œ์‹œํ‚ค๋Š” ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. 

erode()ํ•จ์ˆ˜๋Š”  erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])์˜ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

dilates = cv2.dilate(img, kernel, iterations=1)

 

cv2.dilate() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€์— ํŒฝ์ฐฝ ์—ฐ์‚ฐ์„ ์ ์šฉํ•œ๋‹ค. ์ด๋ฏธ์ง€์˜ ๋ฐ์€ ์˜์—ญ์„ ํ™•์žฅ์‹œํ‚ค๋Š” ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

dilate() ํ•จ์ˆ˜๋Š” dilate(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])์˜ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

ret, img_th = cv2.threshold(img, 110, 255, cv2.THRESH_BINARY)
img_res = cv2.morphologyEx(img_th, cv2.MORPH_CLOSE, kernel)

 

cv2.threshold() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ์ด์ง„ํ™”ํ•œ๋‹ค.

๊ทธ ๋‹ค์Œ cv2.morphologyEx() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ด๋ฆผ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

 

 

plt.subplot(141),plt.imshow(img),plt.title('original')
plt.subplot(142),plt.imshow(erosion),plt.title('erosion')
plt.subplot(143),plt.imshow(dilates),plt.title('dilate')
plt.subplot(144),plt.imshow(img_res),plt.title('img_res')
plt.show()

 

Matplotlib์˜ plt.subplot()์„ ์‚ฌ์šฉํ•˜์—ฌ ์›๋ณธ ์ด๋ฏธ์ง€, ์ˆ˜์ถ• ์—ฐ์‚ฐ, ํŒฝ์ฐฝ ์—ฐ์‚ฐ, ๊ทธ๋ฆฌ๊ณ  ๋ชจํด๋กœ์ง€ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ์‹œ๊ฐํ™”ํ•œ๋‹ค. 

 

 

 

์ „์ฒด ์ฝ”๋“œ -> github

https://github.com/mcrkgus/Computer-Vision/blob/main/morphology.py

 

728x90

'๐Ÿค– Computer Vision' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ปดํ“จํ„ฐ ๋น„์ „ ์˜์ƒ์ฒ˜๋ฆฌ - ์—์ง€ ๊ฒ€์ถœ (๋””์ง€ํ„ธ ์˜์ƒ์˜ ๋ฏธ๋ถ„, ๊ณ„๋‹จ ์—์ง€, ๋žจํ”„ ์—์ง€, ์Šค๋ฌด๋”ฉ ๊ธฐ๋ฒ•, ์†Œ๋ฒจ ์—ฐ์‚ฐ์ž, ์˜๊ต์ฐจ ์ฐพ๊ธฐ)  (0) 2023.09.11
์ปดํ“จํ„ฐ ๋น„์ „ ์˜์ƒ์ฒ˜๋ฆฌ - ์ปฌ๋Ÿฌ Color (RGB, CIE, CMY, YCbCr, HSI, HSV ๋ชจ๋ธ), ์‹ค์Šต ์ฝ”๋“œ Python, openCV  (2) 2023.08.29
์ปดํ“จํ„ฐ ๋น„์ „ ์˜์ƒ์ฒ˜๋ฆฌ - ์ด์ง„ ๋ชจํด๋กœ์ง€, ๋ช…์•” ๋ชจํด๋กœ์ง€ (ํŒฝ์ฐฝ, ์นจ์‹, ์—ด๊ธฐ, ๋‹ซ๊ธฐ)  (0) 2023.07.31
์ปดํ“จํ„ฐ ๋น„์ „ ์˜์ƒ์ฒ˜๋ฆฌ - ์ ์—ฐ์‚ฐ, ์˜์—ญ์—ฐ์‚ฐ, ๊ธฐํ•˜์—ฐ์‚ฐ (๋””์กธ๋ธŒ, ์ปจ๋ณผ๋ฃจ์…˜, ๋ฉ”๋””์•ˆ ํ•„ํ„ฐ, ๊ฐ€์šฐ์‹œ์•ˆ, ๊ฐ๋งˆ ์ˆ˜์ •)  (0) 2023.07.29
์ปดํ“จํ„ฐ ๋น„์ „ ์˜์ƒ์ฒ˜๋ฆฌ - ์—ฐ๊ฒฐ์š”์†Œ (ํ™”์†Œ์˜ ๋ชจ์–‘๊ณผ ์—ฐ๊ฒฐ์„ฑ, ๋ฒ”๋žŒ์ฑ„์›€) Python ์‹ค์Šต ์ฝ”๋“œ  (0) 2023.07.28