1"""
201. ํ๊ฒฝ ์ค์ ๋ฐ ๊ธฐ์ด
3- OpenCV ์ค์น ํ์ธ
4- ๋ฒ์ ์ ๋ณด
5- ๊ธฐ๋ณธ ํ
์คํธ ์ด๋ฏธ์ง ์์ฑ
6"""
7
8import cv2
9import numpy as np
10import sys
11
12
13def check_opencv_installation():
14 """OpenCV ์ค์น ๋ฐ ๋ฒ์ ํ์ธ"""
15 print("=" * 50)
16 print("OpenCV ํ๊ฒฝ ํ์ธ")
17 print("=" * 50)
18
19 # ๋ฒ์ ํ์ธ
20 print(f"OpenCV ๋ฒ์ : {cv2.__version__}")
21 print(f"Python ๋ฒ์ : {sys.version}")
22 print(f"NumPy ๋ฒ์ : {np.__version__}")
23
24 # ๋น๋ ์ ๋ณด
25 print("\n[๋น๋ ์ ๋ณด]")
26 build_info = cv2.getBuildInformation()
27 # ์ฃผ์ ์ ๋ณด๋ง ์ถ๋ ฅ
28 for line in build_info.split('\n')[:20]:
29 if line.strip():
30 print(line)
31
32
33def check_available_modules():
34 """์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ํ์ธ"""
35 print("\n" + "=" * 50)
36 print("์ฌ์ฉ ๊ฐ๋ฅํ ์ฃผ์ ๊ธฐ๋ฅ")
37 print("=" * 50)
38
39 # SIFT ํ์ธ (contrib ํ์)
40 try:
41 sift = cv2.SIFT_create()
42 print("SIFT: ์ฌ์ฉ ๊ฐ๋ฅ")
43 except AttributeError:
44 print("SIFT: ์ฌ์ฉ ๋ถ๊ฐ (opencv-contrib-python ํ์)")
45
46 # ORB ํ์ธ
47 try:
48 orb = cv2.ORB_create()
49 print("ORB: ์ฌ์ฉ ๊ฐ๋ฅ")
50 except AttributeError:
51 print("ORB: ์ฌ์ฉ ๋ถ๊ฐ")
52
53 # DNN ํ์ธ
54 try:
55 net = cv2.dnn.readNet
56 print("DNN ๋ชจ๋: ์ฌ์ฉ ๊ฐ๋ฅ")
57 except AttributeError:
58 print("DNN ๋ชจ๋: ์ฌ์ฉ ๋ถ๊ฐ")
59
60 # Haar Cascade ํ์ธ
61 cascade_path = cv2.data.haarcascades + 'haarcascade_frontalface_default.xml'
62 print(f"Haar Cascade ๊ฒฝ๋ก: {cv2.data.haarcascades}")
63
64
65def create_test_image():
66 """ํ
์คํธ์ฉ ์ด๋ฏธ์ง ์์ฑ"""
67 print("\n" + "=" * 50)
68 print("ํ
์คํธ ์ด๋ฏธ์ง ์์ฑ")
69 print("=" * 50)
70
71 # ์ปฌ๋ฌ ์ด๋ฏธ์ง ์์ฑ (400x400, BGR)
72 img = np.zeros((400, 400, 3), dtype=np.uint8)
73
74 # ๋ฐฐ๊ฒฝ ๊ทธ๋ผ๋ฐ์ด์
75 for i in range(400):
76 img[i, :] = [i * 255 // 400, 100, 255 - i * 255 // 400]
77
78 # ๋ํ ๊ทธ๋ฆฌ๊ธฐ
79 # ์ฌ๊ฐํ
80 cv2.rectangle(img, (50, 50), (150, 150), (0, 255, 0), 2)
81 cv2.rectangle(img, (60, 60), (140, 140), (0, 255, 0), -1) # ์ฑ์
82
83 # ์
84 cv2.circle(img, (300, 100), 50, (255, 0, 0), 2)
85 cv2.circle(img, (300, 100), 30, (255, 0, 0), -1)
86
87 # ์
88 cv2.line(img, (50, 250), (350, 250), (0, 0, 255), 3)
89 cv2.line(img, (50, 280), (350, 320), (255, 255, 0), 2)
90
91 # ํ์
92 cv2.ellipse(img, (200, 350), (100, 30), 0, 0, 360, (255, 0, 255), 2)
93
94 # ํ
์คํธ
95 cv2.putText(img, 'OpenCV Test', (100, 200),
96 cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)
97
98 # ์ ์ฅ
99 cv2.imwrite('sample.jpg', img)
100 print("sample.jpg ์์ฑ ์๋ฃ")
101
102 # ๊ทธ๋ ์ด์ค์ผ์ผ ์ด๋ฏธ์ง๋ ์์ฑ
103 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
104 cv2.imwrite('sample_gray.jpg', gray)
105 print("sample_gray.jpg ์์ฑ ์๋ฃ")
106
107 return img
108
109
110def basic_operations_demo(img):
111 """๊ธฐ๋ณธ ์ฐ์ฐ ๋ฐ๋ชจ"""
112 print("\n" + "=" * 50)
113 print("๊ธฐ๋ณธ ์ฐ์ฐ ๋ฐ๋ชจ")
114 print("=" * 50)
115
116 # ์ด๋ฏธ์ง ์์ฑ
117 print(f"์ด๋ฏธ์ง shape: {img.shape}")
118 print(f"์ด๋ฏธ์ง dtype: {img.dtype}")
119 print(f"์ด๋ฏธ์ง size: {img.size}")
120
121 # ํฝ์
์ ๊ทผ
122 pixel = img[100, 100]
123 print(f"ํฝ์
(100, 100) BGR ๊ฐ: {pixel}")
124
125 # ROI (Region of Interest)
126 roi = img[50:150, 50:150]
127 print(f"ROI shape: {roi.shape}")
128
129
130def main():
131 """๋ฉ์ธ ํจ์"""
132 # ํ๊ฒฝ ํ์ธ
133 check_opencv_installation()
134 check_available_modules()
135
136 # ํ
์คํธ ์ด๋ฏธ์ง ์์ฑ
137 img = create_test_image()
138
139 # ๊ธฐ๋ณธ ์ฐ์ฐ ๋ฐ๋ชจ
140 basic_operations_demo(img)
141
142 # ์ด๋ฏธ์ง ํ์ (GUI ํ๊ฒฝ์์)
143 print("\n[์ด๋ฏธ์ง ํ์]")
144 print("์ด๋ฏธ์ง ์ฐฝ์ ๋ซ์ผ๋ ค๋ฉด ์๋ฌด ํค๋ ๋๋ฅด์ธ์...")
145
146 try:
147 cv2.imshow('Test Image', img)
148 cv2.waitKey(0)
149 cv2.destroyAllWindows()
150 except Exception as e:
151 print(f"GUI ํ์ ๋ถ๊ฐ: {e}")
152 print("Headless ํ๊ฒฝ์์๋ cv2.imshow() ์ฌ์ฉ ๋ถ๊ฐ")
153
154 print("\nํ๊ฒฝ ์ค์ ํ์ธ ์๋ฃ!")
155
156
157if __name__ == '__main__':
158 main()