๋ฐ์ํ
Python ๊ธฐ๋ฐ ์ฃผ์ ์ด๋ฏธ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ
ํฌ๊ฒ 3๊ฐ์ง๊ฐ ์์ต๋๋ค.
- PIL (Python Image Library)
- ์ฃผ๋ก ์ด๋ฏธ์ง ์ฒ๋ฆฌ๋ง์ ์ํด ์ฌ์ฉํฉ๋๋ค.
- ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ์๋์ ์ผ๋ก ๋๋ฆฌ๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
- Scikit-Image
- ํ์ด์ฌ ๊ธฐ๋ฐ์ ์ ๋ฐ์ ์ธ ์ปดํจํฐ ๋น์ ๊ธฐ๋ฅ ์ ๋๋ค.
- ์ฌ์ดํ์ด(Scipy)์ ๊ธฐ๋ฐํ๊ณ ์์ต๋๋ค.
- OpenCV
- ์คํ์์ค ๊ธฐ๋ฐ์ ์ต๊ณ ์ธ๊ธฐ ์ปดํจํฐ ๋น์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋๋ค.
- ์ปดํจํฐ ๋น์ ๊ธฐ๋ฅ ์ผ๋ฐํ์ ํฌ๊ฒ ๊ธฐ์ฌ ํ๋ค๋ ํน์ง์ด ์์ต๋๋ค.
- (์ด๋ ค์ด ๊ธฐ๋ฅ๋ API ๋ช์ค๋ก ๊ฐ๋จํ๊ฒ ๊ตฌํ์ด ๊ฐ๋ฅํฉ๋๋ค.)
- C++ ๊ธฐ๋ฐ์ด๋ Python๋ ์ง์ํฉ๋๋ค. (Java, C# ๋ฑ ๋ค์ํ ์ธ์ด ์ง์)
OpenCV ํน์ง
OpenCV (Open Source Computer Vision Library)๋ ์ปดํจํฐ ๋น์ ๊ณผ ๋จธ์ ๋ฌ๋์ ์ํ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- ์ธํ ์ด ์ด๊ธฐ ๊ฐ๋ฐ์ ์ฃผ๋ํ์์ต๋๋ค.
- Windows, ๋ฆฌ๋ ์ค, Mac OS X, ์๋๋ก์ด๋, iOS ๋ฑ ๋ค์ํ ํ๋ซํผ์์ ์ฌ์ฉ ๊ฐ๋ฅ ํ๋ค๋ ํน์ง์ด ์์ต๋๋ค.
- ๋ฐฉ๋ํ ์ปดํจํฐ ๋น์ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ฌ์ด ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๊ด๋ฒ์ํ ๊ธฐ๋ฅ:
- ์ด๋ฏธ์ง ์ฒ๋ฆฌ: ํํฐ๋ง, ์์ ๋ณํ, ๊ธฐํํ์ ๋ณํ ๋ฑ ๋ค์ํ ์ด๋ฏธ์ง ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ๋น๋์ค ๋ถ์: ๋์์ ์คํธ๋ฆผ ์ฒ๋ฆฌ, ๊ฐ์ฒด ์ถ์ , ๋ฐฐ๊ฒฝ ์ ๊ฑฐ ๋ฑ์ ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค.
- ๊ฐ์ฒด ๊ฒ์ถ: ์ผ๊ตด ๊ฒ์ถ, ์ฌ๋ ๊ฒ์ถ, ์ฐจ๋ ๊ฒ์ถ ๋ฑ ์ฌ์ ํ์ต๋ ๋ชจ๋ธ์ ์ด์ฉํ ๊ฐ์ฒด ๊ฒ์ถ ๊ธฐ๋ฅ์ ํฌํจํฉ๋๋ค.
- ๊ธฐ๊ณ ํ์ต: SVM, KNN, ๊ฒฐ์ ํธ๋ฆฌ ๋ฑ ๋ค์ํ ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ํฉ๋๋ค.
- ๋ฅ๋ฌ๋ ํตํฉ: TensorFlow, Caffe, PyTorch ๋ฑ ๋ฅ๋ฌ๋ ํ๋ ์์ํฌ์์ ํตํฉ์ ์ง์ํ์ฌ, ๋ฅ๋ฌ๋ ๋ชจ๋ธ์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋ฉํฐํ๋ซํผ ์ง์:
- OpenCV๋ Windows, Linux, macOS๋ฟ๋ง ์๋๋ผ, Android์ iOS์ ๊ฐ์ ๋ชจ๋ฐ์ผ ํ๋ซํผ์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๊ณ ์ฑ๋ฅ:
- OpenCV๋ C++๋ก ๊ตฌํ๋์ด ์์ผ๋ฉฐ, CPU์ GPU ๊ฐ์์ ํตํด ๋์ ์ฑ๋ฅ์ ๋ฐํํ ์ ์์ต๋๋ค.
- ์คํ์์ค:
- OpenCV๋ BSD ๋ผ์ด์ผ์ค๋ก ์ ๊ณต๋๋ฉฐ, ๋๊ตฌ๋ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
OpenCV ์ด๋ฏธ์ง ๋ก๋ฉ
imread( )๋ฅผ ์ด์ฉํ ์ด๋ฏธ์ง ๋ก๋ฉ
- OpenCV์์ ์ด๋ฏธ์ง ๋ก๋ฉ์ imread(‘ํ์ผ๋ช ’)์ ์ด์ฉํฉ๋๋ค.
- imread(‘ํ์ผ๋ช ’)์ ํ์ผ์ ์ฝ์ด ๋ํ์ด array๋ก ๋ณํํฉ๋๋ค.
- OpenCV์์ imread()๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง ๋ก๋ฉ ์ ๊ฐ์ฅ ์ฃผ์ํด์ผ ํ ์ ์ OpenCV๊ฐ ์ด๋ฏธ์ง๋ฅผ RGB ํํ๊ฐ ์๋ BGR ํํ๋ก ๋ก๋ฉํ๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ์๋ณธ ์ด๋ฏธ์ง์ ๋ค๋ฅด๊ฒ ๋ํ๋๋ค๋ ๊ฒ์ ๋๋ค.
import cv2
import matplotlib.pyplot as plt
img_array = cv2.imread(‘ํ์ผ๋ช
’)
plt.imshow(img_array)
OpenCV ์ด๋ฏธ์ง ๋ก๋ฉ์ BGR์ RGB๋ก ๋ณํ
cvtColor( )๋ฅผ ์ด์ฉํ์ฌ BGR์ RGB๋ก ๋ณํ
- OpenCV์์ imread(‘ํ์ผ๋ช ’)์ ์ด์ฉํ์ฌ ๋ก๋ฉ๋ ์ด๋ฏธ์ง ๋ฐฐ์ด์ BGR ํํ์ ๋ฐฐ์ด์ด๋ฏ๋ก ์ด๋ฅผ RGB ํํ์ ๋ฐฐ์ด๋ก ๋ณํํ๋ ค๋ฉด cvtColor(์ด๋ฏธ์ง ๋ฐฐ์ด, cv2.COLOR_BGR2RGB)๋ฅผ ์ด์ฉํฉ๋๋ค.
import cv2
import matplotlib.pyplot as plt
bgr_img_array = cv2.imread(‘ํ์ผ๋ช
’)
rgb_img_array = cv2.cvtColor(bgr_img_array, cv2.COLOR_BGR2RGB)
plt.imshow(rgb_img_array)
OpenCV ์ด๋ฏธ์ง ๋ฐฐ์ด์ ํ์ผ์ ์ฐ๊ธฐ
imwrite()๋ฅผ ์ด์ฉํ์ฌ ํ์ผ์ ์ฐ๊ธฐ
- OpenCV์์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ์ด๋ฏธ์ง ๋ฐฐ์ด์ ๋ค์ ํ์ผ์ ์ ์ฅํ๋ ค๋ฉด imwrite(‘์ถ๋ ฅํ์ผ๋ช ‘, ์ด๋ฏธ์ง๋ฐฐ์ด)์ ์ด์ฉํฉ๋๋ค.
- ์ด๋ imread( )๋ก ์ธํด BGRํํ๋ก ๋์ด ์๋ ์ด๋ฏธ์ง ๋ฐฐ์ด์ ๋ค์ RGB ํํ๋ก ๋ณํํ์ฌ ์ ์ฅํฉ๋๋ค.
- ๋ฐ๋ผ์ imread( )๋ก ์ฝ๊ณ , imwrite( )๋ก ์ถ๋ ฅํ ์ด๋ฏธ์ง ํ์ผ์ ๋ค์ RGB ํํ์ ํ์ผ์ด ๋ฉ๋๋ค.
import cv2
import matplotlib.pyplot as plt
img_array = cv2.imread(‘ํ์ผ๋ช
’)
cv2.imwrite(‘์ถ๋ ฅํ์ผ๋ช
’, img_arrary)
OpenCV Windows Frame ์ธํฐํ์ด์ค
OpenCV Windows Frame ์ธํฐํ์ด์ค
- OpenCV๋ OS์ Window Frame๊ณผ ๋ฐ๋ก ์ธํฐํ์ด์ค ํ์ฌ ์ฌ์ฉํ ์ ์๋ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ํ์ง๋ง ์ด๋ค ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด Window Frame ์์ฑ์ด ๊ฐ๋ฅํ GUI ๊ฐ๋ฐ ํ๊ฒฝ์์๋ง ๊ฐ๋ฅํฉ๋๋ค.(Windows GUI, Linux X-windows ๋ฑ).
- ์ฃผํผํฐ ๋ ธํธ๋ถ ๊ธฐ๋ฐ์์๋ ์ฌ์ฉ ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
cv2.imshow(์ด๋ฏธ์ง array)๋ ์ด๋ฏธ์ง ๋ฐฐ์ด์ window frame์ ๋ณด์ฌ์ค.
cv2.waitKey() : ํค๋ณด๋ ์
๋ ฅ์ด ์์ ๋๊น์ง ๋ฌดํ ๋๊ธฐ
cv2.destroyAllWindows(): ํ๋ฉด์ ์๋์ฐ ํ๋ ์ ๋ชจ๋ ์ข
๋ฃ
- ์ฃผํผํฐ ๋ ธํธ๋ถ ๊ธฐ๋ฐ์์๋ ์ด๋ฏธ์ง ๋ฐฐ์ด์ ์๊ฐํ์ matplotlib์ ์ฌ์ฉํฉ๋๋ค.
OpenCV ์ด๋ฏธ์ง์ ์์์ฒ๋ฆฌ Practice (by Python)
PIL ํจํค์ง๋ฅผ ์ด์ฉํด ์ด๋ฏธ์ง ๋ก๋ํ๊ธฐ
import matplotlib.pyplot as plt
%matplotlib inline
from PIL import Image
# PIL์ oepn()์ผ๋ก image file์ ์ฝ์ด์ ImageFile๊ฐ์ฒด๋ก ์์ฑ.
pil_image = Image.open("/content/drive/MyDrive/แแ
ตแธแ
แ
ฅแแ
ตแผ แแ
ฅแทแแ
ฒแแ
ฅ แแ
ตแแ
ฅแซ แแ
กแแ
ตแแ
ณ/Deep_learning computer Vision Guide/data/image/beatles01.jpg")
print('image type:', type(pil_image))
plt.figure(figsize=(10, 10))
plt.imshow(pil_image)
#plt.show()
- image type: <class 'PIL.JpegImagePlugin.JpegImageFile'>
- <matplotlib.image.AxesImage at 0x7fbf19cd1940>
scikit-image (์ฌ์ดํท-์ด๋ฏธ์ง)๋ก image loadํ๊ธฐ
- skimage๋ imread()๋ฅผ ์ด์ฉํ์ฌ RGB ์๋ณธ ์ด๋ฏธ์ง๋ฅผ RGB ํํ์ ๋ํ์ด ๋ฐฐ์ด๋ก ๋ฐํํฉ๋๋ค.
from skimage import io
#skimage๋ imread()๋ฅผ ์ด์ฉํ์ฌ image๋ฅผ numpy ๋ฐฐ์ด๋ก ๋ฐํํจ.
sk_image = io.imread("/content/drive/MyDrive/แแ
ตแธแ
แ
ฅแแ
ตแผ แแ
ฅแทแแ
ฒแแ
ฅ แแ
ตแแ
ฅแซ แแ
กแแ
ตแแ
ณ/Deep_learning computer Vision Guide/data/image/beatles01.jpg")
print('sk_image type:', type(sk_image), ' sk_image shape:', sk_image.shape)
plt.figure(figsize=(10, 10))
plt.imshow(sk_image)
#plt.show()
- sk_image type: <class 'numpy.ndarray'> sk_image shape: (633, 806, 3)
- <matplotlib.image.AxesImage at 0x7fc168f0a780>
OpenCV๋ก ์ด๋ฏธ์ง ๋ก๋ํ๊ธฐ
- OpenCV๋ imread()๋ฅผ ์ด์ฉํ์ฌ ์๋ณธ RGB ์ด๋ฏธ์ง๋ฅผ BGR ํํ์ Numpy(๋ํ์ด) ๋ฐฐ์ด๋ก ๋ฐํํฉ๋๋ค.
- OpenCV์ imwrite()๋ฅผ ์ด์ฉํ๋ค๋ฉด BGR ํํ์ ์ด๋ฏธ์ง ๋ฐฐ์ด์ ํ์ผ์ ๊ธฐ๋กํ ๋ ๋ค์ RGBํํ๋ก ๋ณํํ๋ฏ๋ก ์ฌ์ฉ์๋ RGB->BGR->RGB ๋ณํ์ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋ฉ๋๋ค.
import cv2
cv2_image = cv2.imread("/content/drive/MyDrive/แแ
ตแธแ
แ
ฅแแ
ตแผ แแ
ฅแทแแ
ฒแแ
ฅ แแ
ตแแ
ฅแซ แแ
กแแ
ตแแ
ณ/Deep_learning computer Vision Guide/data/image/beatles01.jpg")
cv2.imwrite(("/content/drive/MyDrive/แแ
ตแธแ
แ
ฅแแ
ตแผ แแ
ฅแทแแ
ฒแแ
ฅ แแ
ตแแ
ฅแซ แแ
กแแ
ตแแ
ณ/Deep_learning computer Vision Guide/data/image/beatles02.jpg"), cv2_image)
print('cv_image type:', type(cv2_image), ' cv_image shape:', cv2_image.shape)
plt.figure(figsize=(10, 10))
img = plt.imread("/content/drive/MyDrive/แแ
ตแธแ
แ
ฅแแ
ตแผ แแ
ฅแทแแ
ฒแแ
ฅ แแ
ตแแ
ฅแซ แแ
กแแ
ตแแ
ณ/Deep_learning computer Vision Guide/data/image/beatles02.jpg")
plt.imshow(img)
#plt.show()
- cv_image type: <class 'numpy.ndarray'> cv_image shape: (633, 806, 3)
- <matplotlib.image.AxesImage at 0x7fc15e1a7320>
OpenCV์ imread()๋ก ๋ฐํ๋ BGR ์ด๋ฏธ์ง ๋ํ์ด ๋ฐฐ์ด์ ๊ทธ๋๋ก ์๊ฐํ ํ๊ธฐ
OpenCV์ imread()๋ RGB๋ฅผ BGR๋ก ๋ณํํ๋ฏ๋ก ์ํ์ง ์๋ ์ด๋ฏธ์ง๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
cv2_image = cv2.imread("/content/drive/MyDrive/แแ
ตแธแ
แ
ฅแแ
ตแผ แแ
ฅแทแแ
ฒแแ
ฅ แแ
ตแแ
ฅแซ แแ
กแแ
ตแแ
ณ/Deep_learning computer Vision Guide/data/image/beatles01.jpg")
plt.figure(figsize=(10, 10))
plt.imshow(cv2_image)
plt.show()
sk_image = io.imread("../../data/image/beatles01.jpg")
print(sk_image.shape)
sk_image[:, :, 0] # R Channel์ ๊ฐ
- ์๋ ์ฝ๋์ ๊ฒฐ๊ณผ๊ฐ๋ค์ R Channel ๊ณ์ด๋ค์ ๊ฐ์ ๋๋ค.
- ๋ ๊ฐ์ NumPy ๋ฐฐ์ด์ ๋ํ ์ ๋ณด๋ฅผ ๋ํ๋ ๋๋ค.
- ์ฒซ ๋ฒ์งธ๋ ์์ ์ด๋ฏธ์ง (RGB ์ด๋ฏธ์ง), ๋ ๋ฒ์งธ๋ ๊ทธ๋ ์ด์ค์ผ์ผ ์ด๋ฏธ์ง์ ๋๋ค.
- ์ด๋ฅผ ํตํด RGB ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋ ์ด์ค์ผ์ผ ์ด๋ฏธ์ง๋ก ๋ณํํ์์ ์ ์ ์์ต๋๋ค.
(633, 806, 3) # RGB ์ด๋ฏธ์ง
ndarray (633, 806) # Gray Scale ์ด๋ฏธ์ง
array([[ 18, 18, 18, ..., 47, 39, 64],
[ 19, 19, 18, ..., 72, 41, 37],
[ 18, 18, 18, ..., 84, 56, 41],
...,
[225, 226, 228, ..., 231, 230, 229],
[225, 225, 226, ..., 229, 229, 227],
[225, 225, 224, ..., 227, 227, 227]], dtype=uint8)
- ์ฃผ์ด์ง ์ถ๋ ฅ์ ๋ ๊ฐ์ NumPy ๋ฐฐ์ด์ ๋ํ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค๋๋ค.
- ์ฒซ ๋ฒ์งธ ๋ฐฐ์ด์ RGB ์ด๋ฏธ์ง์ ํด๋นํ๋ฉฐ, ๋ ๋ฒ์งธ ๋ฐฐ์ด์ ๊ทธ๋ ์ด์ค์ผ์ผ ์ด๋ฏธ์ง์ ํด๋นํฉ๋๋ค.
- ์ด ์ ๋ณด๋ RGB ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋ ์ด์ค์ผ์ผ ์ด๋ฏธ์ง๋ก ๋ณํํ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ ๋๋ค.
cv2_image = cv2.imread("/content/drive/MyDrive/แแ
ตแธแ
แ
ฅแแ
ตแผ แแ
ฅแทแแ
ฒแแ
ฅ แแ
ตแแ
ฅแซ แแ
กแแ
ตแแ
ณ/Deep_learning computer Vision Guide/data/image/beatles01.jpg")
print(type(cv2_image))
print(cv2_image.shape)
cv2_image[:, :, 0]
<class 'numpy.ndarray'> # RGB ์ด๋ฏธ์ง
(633, 806, 3) # RGB ์ด๋ฏธ์ง
ndarray (633, 806) # Gray Scale ์ด๋ฏธ์ง
array([[ 19, 19, 20, ..., 47, 39, 64],
[ 20, 20, 20, ..., 71, 40, 36],
[ 20, 20, 20, ..., 82, 54, 40],
...,
[198, 199, 201, ..., 190, 189, 188],
[198, 198, 199, ..., 188, 188, 186],
[199, 199, 198, ..., 186, 186, 186]], dtype=uint8)
cv2_image[:, :, 2]
ndarray (633, 806) hide data
array([[ 18, 18, 18, ..., 47, 39, 64],
[ 19, 19, 18, ..., 72, 41, 37],
[ 18, 18, 18, ..., 84, 56, 41],
...,
[225, 226, 228, ..., 231, 230, 229],
[225, 225, 226, ..., 229, 229, 227],
[225, 225, 224, ..., 227, 227, 227]], dtype=uint8)
cv2_image = cv2.imread("/content/drive/MyDrive/แแ
ตแธแ
แ
ฅแแ
ตแผ แแ
ฅแทแแ
ฒแแ
ฅ แแ
ตแแ
ฅแซ แแ
กแแ
ตแแ
ณ/Deep_learning computer Vision Guide/data/image/beatles01.jpg")
draw_image = cv2.cvtColor(cv2_image, cv2.COLOR_BGR2RGB)
plt.figure(figsize=(10, 10))
plt.imshow(draw_image)
plt.show()
๋ฐ์ํ
'๐ Computer Vision' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CV] Object Detection & Segmentation์ ์ํ ํจํค์ง & CUDA ์๊ฐ (0) | 2024.05.20 |
---|---|
[CV] OpenCV ์์์ฒ๋ฆฌ ๊ฐ์ (0) | 2024.05.19 |
[CV] Object Detection & Segmentation์ ์ํ ์ฃผ์ Dataset (0) | 2024.05.17 |
[CV] Precision(์ ๋ฐ๋) & Recall(์ฌํ์จ) (0) | 2024.05.15 |
[CV] Object Detection ๋ฐฉ์ & ์ฑ๋ฅ ํ๊ฐ (0) | 2024.05.13 |