01_environment_basics.py

Download
python 159 lines 3.9 KB
  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()