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

OpenCV ์˜์ƒ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ + ์ƒ์„ฑ, ๋ณต์‚ฌ, ๋ถ€๋ถ„ ์ถ”์ถœ ๋ณธ๋ฌธ

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

OpenCV ์˜์ƒ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ + ์ƒ์„ฑ, ๋ณต์‚ฌ, ๋ถ€๋ถ„ ์ถ”์ถœ

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

221020 ์ž‘์„ฑ

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

https://velog.io/@redorangeyellowy/ch02-Python-%EA%B8%B0%EC%B4%88-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%98%81%EC%83%81%EC%9D%98-%EC%86%8D%EC%84%B1%EA%B3%BC-%ED%94%BD%EC%85%80-%EA%B0%92-%EC%B0%B8%EC%A1%B0

 

[ch02] Python ๊ธฐ์ดˆ ์‚ฌ์šฉ๋ฒ• - ์˜์ƒ์˜ ์†์„ฑ๊ณผ ํ”ฝ์…€ ๊ฐ’ ์ฐธ์กฐ

OpenCV๋Š” ์˜์ƒ ๋ฐ์ดํ„ฐ๋ฅผ numpy.ndarray๋กœ ํ‘œํ˜„numpy.ndarrayndim: ์ฐจ์› ์ˆ˜. len(img.shape)๊ณผ ๊ฐ™์Œ.shape: ๊ฐ ์ฐจ์›์˜ ํฌ๊ธฐ. (h, w)๊ทธ๋ ˆ์ด์Šค์ผ€์ผ ๋˜๋Š” (h, w, 3)์ปฌ๋Ÿฌsize: ์ „์ฒด ์›์†Œ ๊ฐœ์ˆ˜dtype: ์›์†Œ์˜ ๋ฐ์ดํ„ฐ

velog.io

 

 

๐Ÿ“ OpenCV๋Š” ์˜์ƒ ๋ฐ์ดํ„ฐ๋ฅผ numpy.ndarray๋กœ ํ‘œํ˜„

numpy.ndarray

  • ndim : ์ฐจ์› ์ˆ˜. len(img.shape)๊ณผ ๊ฐ™์Œ.
  • shape : ๊ฐ ์ฐจ์›์˜ ํฌ๊ธฐ. (h, w)[๊ทธ๋ ˆ์ด์Šค์ผ€์ผ] ๋˜๋Š” (h, w, 3)[์ปฌ๋Ÿฌ]
  • size : ์ „์ฒด ์›์†Œ ๊ฐœ์ˆ˜
  • dtype : ์›์†Œ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…. ์˜์ƒ ๋ฐ์ดํ„ฐ๋Š” uint8
    • ๊ทธ๋ ˆ์ด์Šค์ผ€์ผ ์˜์ƒ : cv2.CV_8UC1 → numpy.uint8, shape = (h, w)
    • ์ปฌ๋Ÿฌ ์˜์ƒ : cv2.CV_8UC3 → numpy.uint8, shape = (h, w, 3)

 

๐Ÿ“ ์ƒˆ ์˜์ƒ ์ƒ์„ฑํ•˜๊ธฐ

  • shape: ๊ฐ ์ฐจ์›์˜ ํฌ๊ธฐ. (h, w) ๋˜๋Š” (h, w, 3)
  • dtype: ์›์†Œ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…. ์ผ๋ฐ˜์ ์ธ ์˜์ƒ์ด๋ฉด numpy.uint8 ์ง€์ •
  • arr: ์ƒ์„ฑ๋œ ์˜์ƒ(numpy.ndarray)
  • ์ฐธ๊ณ ์‚ฌํ•ญ
    • numpy.empty() ํ•จ์ˆ˜๋Š” ์ž„์˜์˜ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ ๋ฐฐ์—ด์„ ์ƒ์„ฑ
    • numpy.zeros() ํ•จ์ˆ˜๋Š” 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ ๋ฐฐ์—ด์„ ์ƒ์„ฑ
    • numpy.ones() ํ•จ์ˆ˜๋Š” 1๋กœ ์ดˆ๊ธฐํ™”๋œ ๋ฐฐ์—ด์„ ์ƒ์„ฑ
    • numpy.full() ํ•จ์ˆ˜๋Š” fill_value๋กœ ์ดˆ๊ธฐํ™”๋œ ๋ฐฐ์—ด์„ ์ƒ์„ฑ
# 1. ์˜์ƒ ์ƒ์„ฑ
import cv2
import numpy as np
import matplotlib.pyplot as plt


img1 = np.empty((480, 640), dtype=np.uint8) # grayscale image
img2 = np.zeros((480, 640, 3), dtype=np.uint8) # color image
img3 = np.ones((480, 640), dtype=np.unit8) * 255 # white
img4 = np.full((480, 640, 3), (0, 255, 255), dtype=np.uint8) # yellow

plt.subplot(411), plt.axis('off'), plt.imshow(img1)
plt.subplot(412), plt.axis('off'), plt.imshow(img2)
plt.subplot(421), plt.axis('off'), plt.imshow(img3)
plt.subplot(422), plt.axis('off'), plt.imshow(img4)
plt.show()

 

 

๐Ÿ“ ์ƒˆ ์˜์ƒ ๋ณต์‚ฌํ•˜๊ธฐ

# 2. ์˜์ƒ ๋ณต์‚ฌ
img1 = cv2.imread('./์•ŒํŒŒ์นด.jpg')
img2 = img1 # img1 ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐ
img3 = img1.copy() # ๋ณต์‚ฌ๋ณธ ์ƒˆ๋กœ ์ƒ์„ฑ
plt.subplot(311), plt.axis('off'), plt.imshow(img1)
plt.subplot(312), plt.axis('off'), plt.imshow(img2)
plt.subplot(313), plt.axis('off'), plt.imshow(img3)

plt.show()

์ฐฝ๋ฐฑํ•œ ์•ŒํŒŒ์นด..

 

 

๐Ÿ“ ์˜์ƒ ๋ถ€๋ถ„ ์ถ”์ถœํ•˜๊ธฐ

# 3. ์˜์ƒ ๋ถ€๋ถ„ ์ถ”์ถœ
img1 = cv2.imread('./์•ŒํŒŒ์นด.jpg')
img2 = img1[40:120, 30:150] # numpy.ndarray์˜ ์Šฌ๋ผ์ด์‹ฑ
img3 = img1[40:120, 30:150].copy()

img2.fill(0) # img1๊ณผ ์ฐธ์กฐํ•˜๋Š” ๊ด€๊ณ„์ด๋ฏ€๋กœ img1์—๋„ ์˜ํ–ฅ

plt.subplot(311), plt.axis('off'), plt.imshow(img1)
plt.subplot(312), plt.axis('off'), plt.imshow(img2)
plt.subplot(313), plt.axis('off'), plt.imshow(img3)

plt.show()

 

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