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

OpenCV์— ์ ์šฉํ•˜๋Š” ๋งˆ์Šคํฌ ์—ฐ์‚ฐ๊ณผ ROI ๋ณธ๋ฌธ

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

OpenCV์— ์ ์šฉํ•˜๋Š” ๋งˆ์Šคํฌ ์—ฐ์‚ฐ๊ณผ ROI

์ง•์ง•์•ŒํŒŒ์นด 2022. 10. 20. 16:21
728x90
๋ฐ˜์‘ํ˜•

221020 ์ž‘์„ฑ

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

https://velog.io/@redorangeyellowy/ch02-Python-%EA%B8%B0%EC%B4%88-%EC%82%AC%EC%9A%A9%EB%B2%95-%EB%A7%88%EC%8A%A4%ED%81%AC-%EC%97%B0%EC%82%B0%EA%B3%BC-ROI

 

[ch02] Python ๊ธฐ์ดˆ ์‚ฌ์šฉ๋ฒ• - ๋งˆ์Šคํฌ ์—ฐ์‚ฐ๊ณผ ROI

Region of interst : ๊ด€์‹ฌ ์˜์—ญ์˜์ƒ์—์„œ ํŠน์ • ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ์ž„์˜์˜ ๋ถ€๋ถ„ ์˜์—ญOpenCV๋Š” ์ผ๋ถ€ ํ•จ์ˆ˜์— ๋Œ€ํ•ด ROI ์—ฐ์‚ฐ์„ ์ง€์›ํ•˜๋ฉฐ, ์ด ๋•Œ ๋งˆ์Šคํฌ ์˜์ƒ์„ ์ธ์ž๋กœ ํ•จ๊ป˜ ์ „๋‹ฌํ•ด์•ผํ•จ.ex. cv2.copy(), cv2.calc

velog.io

 

 

 

๐ŸŽต ROI

  • Region of interst : ๊ด€์‹ฌ ์˜์—ญ
  • ์˜์ƒ์—์„œ ํŠน์ • ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ์ž„์˜์˜ ๋ถ€๋ถ„ ์˜์—ญ

 

๐ŸŽต ๋งˆ์Šคํฌ ์—ฐ์‚ฐ

  • OpenCV๋Š” ์ผ๋ถ€ ํ•จ์ˆ˜์— ๋Œ€ํ•ด ROI ์—ฐ์‚ฐ์„ ์ง€์›ํ•˜๋ฉฐ, ์ด ๋•Œ ๋งˆ์Šคํฌ ์˜์ƒ์„ ์ธ์ž๋กœ ํ•จ๊ป˜ ์ „๋‹ฌํ•ด์•ผํ•จ.
    • ex. cv2.copy(), cv2.calcHist(), cv2.bitwise_or(), cv2.matchTemplate(), ...
  • ๋งˆ์Šคํฌ ์˜์ƒ์€ cv2.CV_8UC1 ํƒ€์ž… (๊ทธ๋ ˆ์ด์Šค ์ผ€์ผ ์˜์ƒ)
  • ๋งˆ์Šคํฌ ์˜์ƒ์˜ ํ”ฝ์…€ ๊ฐ’์ด 0์ด ์•„๋‹Œ ์œ„์น˜์—์„œ๋งŒ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋จ
    • ๋ณดํ†ต ๋งˆ์Šคํฌ ์˜์ƒ์œผ๋กœ๋Š” 0 ๋˜๋Š” 255๋กœ ๊ตฌ์„ฑ๋œ ์ด์ง„ ์˜์ƒ(binary image)์„ ์‚ฌ์šฉ

 

๐ŸŽต ๋งˆ์Šคํฌ ์—ฐ์‚ฐ์„ ์ง€์›ํ•˜๋Š” ํ”ฝ์…€ ๊ฐ’ ๋ณต์‚ฌ ํ•จ์ˆ˜

cv2.copyTo(src, mask, dst=None) -> dst
  • src : ์ž…๋ ฅ ์˜์ƒ
  • mask : ๋งˆ์Šคํฌ ์˜์ƒ. cv2.CV_8U.(numpy.uint8). 0์ด ์•„๋‹Œ ํ”ฝ์…€์— ๋Œ€ํ•ด์„œ๋งŒ ๋ณต์‚ฌ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰
  • dst : ์ถœ๋ ฅ ์˜์ƒ. ๋งŒ์•ฝ src์™€ ํฌ๊ธฐ ๋ฐ ํƒ€์ž…์ด ๊ฐ™์€ dst๋ฅผ ์ž…๋ ฅ์œผ๋กœ ์ง€์ •ํ•˜๋ฉด dst๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด dst๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ๋ฐ˜ํ™˜
    • src, mask, dst๋Š” ๋ชจ๋‘ ํฌ๊ธฐ๊ฐ€ ๊ฐ™์•„์•ผ ํ•œ๋‹ค
    • src์™€ dst๋Š” ๊ฐ™์€ ํƒ€์ž…์ด์–ด์•ผ ํ•˜๊ณ , mask๋Š” ๊ทธ๋ ˆ์ด์Šค์ผ€์ผ ํƒ€์ž…์˜ ์ด์ง„ ์˜์ƒ

import matplotlib.pyplot as plt
import cv2

src = cv2.imread('sea.jpg', cv2.IMREAD_COLOR)
logo = cv2.imread('whale.png', cv2.IMREAD_UNCHANGED)

mask = logo[:, :, 3]    # mask๋Š” ์•ŒํŒŒ ์ฑ„๋„๋กœ ๋งŒ๋“  ๋งˆ์Šคํฌ ์˜์ƒ
logo = logo[:, :, :-1]  # logo๋Š” b, g, r 3์ฑ„๋„๋กœ ๊ตฌ์„ฑ๋œ ์ปฌ๋Ÿฌ ์˜์ƒ
h, w = mask.shape[:2]
crop = src[10:10+h, 10:10+w]  # logo, mask์™€ ๊ฐ™์€ ํฌ๊ธฐ์˜ ๋ถ€๋ถ„ ์˜์ƒ ์ถ”์ถœ

dst = cv2.copyTo(logo, mask, crop)

# plt.subplot(311), plt.axis('off'), plt.imshow(logo)
# plt.subplot(312), plt.axis('off'), plt.imshow(mask)
# plt.subplot(313), plt.axis('off'), plt.imshow(crop)

cv2.imshow('image', dst)
cv2.waitKey()
# ์ƒ์„ฑ๋œ ๋ชจ๋“  ์ฐฝ์„ ๋‹ซ์Œ
cv2.destroyAllWindows()

ใ…‹ใ…‹ใ…‹ ์™œ์ด๋Ÿผ? ์ž˜๋ณด๋ฉด ๊ณ ๋ž˜ ์žˆ์Œ

 

 

 

 

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