{"id":13,"date":"2026-04-16T11:18:18","date_gmt":"2026-04-16T11:18:18","guid":{"rendered":"https:\/\/blog-api.minpox.com\/?p=13"},"modified":"2026-04-16T11:18:18","modified_gmt":"2026-04-16T11:18:18","slug":"opencv-cuda-%ea%b0%9c%eb%b0%9c%ed%99%98%ea%b2%bd-docker%eb%a1%9c-%ea%b5%ac%ec%b6%95%ed%95%98%ea%b3%a0-vscode%ec%97%90%ec%84%9c-%eb%94%94%eb%b2%84%ea%b9%85%ea%b9%8c%ec%a7%80","status":"publish","type":"post","link":"https:\/\/blog-api.minpox.com\/?p=13","title":{"rendered":"OpenCV CUDA \uac1c\ubc1c\ud658\uacbd Docker\ub85c \uad6c\ucd95\ud558\uace0 VSCode\uc5d0\uc11c \ub514\ubc84\uae45\uae4c\uc9c0"},"content":{"rendered":"\n<style>\n  .blog-wrap { font-family: 'Segoe UI', sans-serif; color: #1a1a1a; line-height: 1.8; max-width: 860px; margin: 0 auto; }\n  .blog-wrap h2 { font-size: 1.5rem; font-weight: 700; margin: 2.5rem 0 1rem; padding-left: 12px; border-left: 4px solid #2563eb; color: #1e3a8a; }\n  .blog-wrap h3 { font-size: 1.1rem; font-weight: 700; margin: 1.8rem 0 0.6rem; color: #1e40af; }\n  .blog-wrap p { margin: 0.8rem 0; }\n  .blog-wrap pre { background: #0f172a; color: #e2e8f0; padding: 1.2rem 1.5rem; border-radius: 8px; overflow-x: auto; font-size: 0.88rem; line-height: 1.7; margin: 1rem 0; }\n  .blog-wrap code { font-family: 'Fira Code', 'Courier New', monospace; }\n  .blog-wrap .inline-code { background: #e0e7ff; color: #3730a3; padding: 2px 6px; border-radius: 4px; font-size: 0.9em; font-family: monospace; }\n  .blog-wrap .result-box { background: #f0fdf4; border: 1px solid #86efac; border-radius: 8px; padding: 1rem 1.5rem; margin: 1rem 0; }\n  .blog-wrap .error-box { background: #fff1f2; border: 1px solid #fca5a5; border-radius: 8px; padding: 1rem 1.5rem; margin: 1rem 0; }\n  .blog-wrap .info-box { background: #eff6ff; border: 1px solid #93c5fd; border-radius: 8px; padding: 1rem 1.5rem; margin: 1rem 0; }\n  .blog-wrap table { width: 100%; border-collapse: collapse; margin: 1rem 0; font-size: 0.95rem; }\n  .blog-wrap th { background: #1e3a8a; color: white; padding: 0.6rem 1rem; text-align: left; }\n  .blog-wrap td { padding: 0.6rem 1rem; border-bottom: 1px solid #e2e8f0; }\n  .blog-wrap tr:nth-child(even) td { background: #f8fafc; }\n  .blog-wrap .tag { display: inline-block; background: #dbeafe; color: #1e40af; font-size: 0.8rem; padding: 2px 10px; border-radius: 20px; margin-right: 6px; margin-bottom: 4px; }\n  .blog-wrap .step-num { display: inline-block; background: #2563eb; color: white; width: 26px; height: 26px; border-radius: 50%; text-align: center; line-height: 26px; font-size: 0.85rem; font-weight: 700; margin-right: 8px; }\n  .blog-wrap hr { border: none; border-top: 1px solid #e2e8f0; margin: 2rem 0; }\n<\/style>\n\n<div class=\"blog-wrap\">\n\n  <p>\n    <span class=\"tag\">Docker<\/span>\n    <span class=\"tag\">OpenCV<\/span>\n    <span class=\"tag\">CUDA<\/span>\n    <span class=\"tag\">Python<\/span>\n    <span class=\"tag\">VSCode<\/span>\n    <span class=\"tag\">RTX 3060<\/span>\n  <\/p>\n\n  <p>\n    OpenCV\uc5d0\uc11c CUDA \uac00\uc18d\uc744 \uc4f0\ub824\uba74 <span class=\"inline-code\">pip install opencv-python<\/span>\uc73c\ub85c\ub294 \uc548 \ub429\ub2c8\ub2e4.\n    CUDA \uc9c0\uc6d0\uc740 \uc18c\uc2a4\uc5d0\uc11c \uc9c1\uc811 \ube4c\ub4dc\ud574\uc57c \ud65c\uc131\ud654\ub429\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \ud638\uc2a4\ud2b8 \uc2dc\uc2a4\ud15c\uc744 \ub354\ub7fd\ud788\uc9c0 \uc54a\uace0,\n    Docker\ub97c \uc774\uc6a9\ud574 \uae54\ub054\ud558\uac8c \ud658\uacbd\uc744 \uad6c\ucd95\ud558\uace0 VSCode\uc5d0\uc11c \ub514\ubc84\uae45\uae4c\uc9c0 \ud558\ub294 \ubc29\ubc95\uc744 \uc815\ub9ac\ud588\uc2b5\ub2c8\ub2e4.\n  <\/p>\n\n  <hr>\n\n  <h2>\uc65c pip install\ub85c\ub294 \uc548 \ub418\ub098?<\/h2>\n  <p>\n    PyPI\uc5d0 \uc62c\ub77c\uc628 <span class=\"inline-code\">opencv-python<\/span>\uc740 \ubc94\uc6a9 \ube4c\ub4dc\ub77c CUDA\uac00 \ube60\uc838 \uc788\uc2b5\ub2c8\ub2e4.\n    OpenCV\ub294 \ube4c\ub4dc \uc2dc\uc810\uc5d0 CUDA \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ub9c1\ud06c\ud574\uc11c \ucef4\ud30c\uc77c\ud574\uc57c CUDA \uae30\ub2a5\uc774 \ud65c\uc131\ud654\ub429\ub2c8\ub2e4.\n  <\/p>\n  <table>\n    <tr><th>\ubc29\ubc95<\/th><th>CUDA \uc9c0\uc6d0<\/th><th>\ube44\uace0<\/th><\/tr>\n    <tr><td>pip install opencv-python<\/td><td>\u274c<\/td><td>\ubc94\uc6a9 \ube4c\ub4dc, CPU\ub9cc<\/td><\/tr>\n    <tr><td>\uc18c\uc2a4 \uc9c1\uc811 \ube4c\ub4dc<\/td><td>\u2705<\/td><td>\ud638\uc2a4\ud2b8 \ud658\uacbd \uc624\uc5fc<\/td><\/tr>\n    <tr><td>Docker + \uc18c\uc2a4 \ube4c\ub4dc<\/td><td>\u2705<\/td><td>\uaca9\ub9ac, \uae54\ub054, \ucd94\ucc9c<\/td><\/tr>\n  <\/table>\n\n  <hr>\n\n  <h2><span class=\"step-num\">1<\/span> \ud658\uacbd \uc900\ube44<\/h2>\n  <p>\ud638\uc2a4\ud2b8\uc5d0 \ub2e4\uc74c\uc774 \uc124\uce58\ub418\uc5b4 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/p>\n  <ul>\n    <li>NVIDIA \ub4dc\ub77c\uc774\ubc84 (nvidia-smi\ub85c \ud655\uc778)<\/li>\n    <li>Docker<\/li>\n    <li>nvidia-container-toolkit<\/li>\n  <\/ul>\n  <pre><code># nvidia-container-toolkit \uc124\uce58\nsudo apt install nvidia-container-toolkit\nsudo systemctl restart docker\n\n# GPU\uac00 Docker\uc5d0\uc11c \ubcf4\uc774\ub294\uc9c0 \ud655\uc778\ndocker run --gpus all --rm nvidia\/cuda:12.8.0-base-ubuntu22.04 nvidia-smi<\/code><\/pre>\n\n  <div class=\"info-box\">\n    <strong>\ud83d\udca1 \ucc38\uace0<\/strong><br>\n    CUDA Toolkit(nvcc)\uc740 \ud638\uc2a4\ud2b8\uc5d0 \uc124\uce58\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub429\ub2c8\ub2e4. Docker \uc774\ubbf8\uc9c0 \uc548\uc5d0 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.\n  <\/div>\n\n  <hr>\n\n  <h2><span class=\"step-num\">2<\/span> NVIDIA \uacf5\uc2dd CUDA \uc774\ubbf8\uc9c0\ub85c \ucee8\ud14c\uc774\ub108 \uc2e4\ud589<\/h2>\n  <pre><code>docker run --gpus all -it \\\n  --name opencv-cuda \\\n  -v \/your\/project\/path:\/workspace \\\n  nvidia\/cuda:12.8.0-cudnn-devel-ubuntu22.04 \\\n  bash<\/code><\/pre>\n\n  <p>\ucee8\ud14c\uc774\ub108 \uc548\uc5d0\uc11c GPU \ubc0f nvcc \ud655\uc778:<\/p>\n  <pre><code>nvcc --version\nnvidia-smi<\/code><\/pre>\n\n  <div class=\"result-box\">\n    <strong>\u2705 \uc815\uc0c1 \ucd9c\ub825<\/strong>\n    <pre style=\"background:transparent; color:#166534; padding:0; margin:0.5rem 0 0;\">nvcc: NVIDIA (R) Cuda compiler driver\nCuda compilation tools, release 12.8\n\nNVIDIA GeForce RTX 3060  |  CUDA Version: 12.8<\/pre>\n  <\/div>\n\n  <hr>\n\n  <h2><span class=\"step-num\">3<\/span> \uc758\uc874\uc131 \uc124\uce58<\/h2>\n  <p>apt \uc18d\ub3c4\uac00 \ub290\ub9ac\ub2e4\uba74 \uce74\uce74\uc624 \ubbf8\ub7ec\ub85c \ubcc0\uacbd\ud569\ub2c8\ub2e4.<\/p>\n  <pre><code># \uce74\uce74\uc624 \ubbf8\ub7ec\ub85c \ubcc0\uacbd (\ud55c\uad6d \uc0ac\uc6a9\uc790 \uad8c\uc7a5)\nsed -i 's\/archive.ubuntu.com\/mirror.kakao.com\/g' \/etc\/apt\/sources.list\nsed -i 's\/security.ubuntu.com\/mirror.kakao.com\/g' \/etc\/apt\/sources.list\n\napt update && apt install -y \\\n  python3 python3-pip python3-dev \\\n  cmake git g++ \\\n  libgtk2.0-dev pkg-config \\\n  libavcodec-dev libavformat-dev libswscale-dev\n\npip3 install numpy<\/code><\/pre>\n\n  <hr>\n\n  <h2><span class=\"step-num\">4<\/span> OpenCV \uc18c\uc2a4 \ube4c\ub4dc<\/h2>\n  <pre><code>cd \/workspace\n\ngit clone https:\/\/github.com\/opencv\/opencv.git\ngit clone https:\/\/github.com\/opencv\/opencv_contrib.git\n\ncd opencv && mkdir build && cd build\n\ncmake .. \\\n  -D WITH_CUDA=ON \\\n  -D OPENCV_CUDA_ARCH_BIN=\"8.6\" \\\n  -D CUDA_ARCH_BIN=\"8.6\" \\\n  -D CUDA_ARCH_PTX=\"\" \\\n  -D OPENCV_EXTRA_MODULES_PATH=\/workspace\/opencv_contrib\/modules \\\n  -D WITH_CUBLAS=ON \\\n  -D BUILD_opencv_python3=ON \\\n  -D CMAKE_BUILD_TYPE=Release<\/code><\/pre>\n\n  <div class=\"info-box\">\n    <strong>\ud83d\udca1 CUDA_ARCH_BIN GPU\ubcc4 \uac12<\/strong><br>\n    RTX 3060 \u2192 <span class=\"inline-code\">8.6<\/span> &nbsp;|&nbsp;\n    RTX 3090 \u2192 <span class=\"inline-code\">8.6<\/span> &nbsp;|&nbsp;\n    RTX 4090 \u2192 <span class=\"inline-code\">8.9<\/span> &nbsp;|&nbsp;\n    RTX 5070 Ti \u2192 <span class=\"inline-code\">8.9 ~ 9.0<\/span>\n  <\/div>\n\n  <p>cmake \uc644\ub8cc \ud6c4 \ubc18\ub4dc\uc2dc \uc544\ub798 \ud56d\ubaa9 \ud655\uc778:<\/p>\n  <div class=\"result-box\">\n    <pre style=\"background:transparent; color:#166534; padding:0; margin:0;\">--   NVIDIA CUDA:   YES (ver 12.8, CUFFT CUBLAS)  \u2705\n--     NVIDIA GPU arch:  86                        \u2705\n--   cuDNN:          YES (ver 9.7.0)               \u2705\n--   Python 3:\n--     Libraries:    \/usr\/lib\/...\/libpython3.10.so \u2705\n--     numpy:        ...\/numpy\/_core\/include       \u2705<\/pre>\n  <\/div>\n\n  <p>\ube4c\ub4dc \ubc0f \uc124\uce58 (30\ubd84~1\uc2dc\uac04 \uc18c\uc694):<\/p>\n  <pre><code>make -j$(nproc)\nmake install<\/code><\/pre>\n\n  <hr>\n\n  <h2><span class=\"step-num\">5<\/span> \ube4c\ub4dc \ud655\uc778<\/h2>\n  <pre><code>python3 -c \"\nimport cv2\nprint('OpenCV version:', cv2.__version__)\nprint('CUDA devices:', cv2.cuda.getCudaEnabledDeviceCount())\n\"<\/code><\/pre>\n\n  <div class=\"result-box\">\n    <strong>\u2705 \uc131\uacf5 \ucd9c\ub825<\/strong>\n    <pre style=\"background:transparent; color:#166534; padding:0; margin:0.5rem 0 0;\">OpenCV version: 4.14.0-pre\nCUDA devices: 1<\/pre>\n  <\/div>\n\n  <hr>\n\n  <h2><span class=\"step-num\">6<\/span> \uc774\ubbf8\uc9c0 \uc800\uc7a5<\/h2>\n  <p>\ucee8\ud14c\uc774\ub108\ub97c \ub098\uac00\uba74 \ube4c\ub4dc\ud55c \ub0b4\uc6a9\uc774 \uc0ac\ub77c\uc9d1\ub2c8\ub2e4. \ud638\uc2a4\ud2b8\uc758 \uc0c8 \ud130\ubbf8\ub110\uc5d0\uc11c \ucee4\ubc0b\ud574 \uc774\ubbf8\uc9c0\ub85c \uc800\uc7a5\ud569\ub2c8\ub2e4.<\/p>\n  <pre><code># \ud638\uc2a4\ud2b8\uc5d0\uc11c\ndocker ps  # \ucee8\ud14c\uc774\ub108 ID \ud655\uc778\ndocker commit &lt;container_id&gt; opencv-cuda:latest\n\n# \ud655\uc778\ndocker images | grep opencv-cuda<\/code><\/pre>\n\n  <div class=\"info-box\">\n    <strong>\u26a0\ufe0f \uc774\ubbf8\uc9c0 \ud06c\uae30<\/strong><br>\n    \ube4c\ub4dc \uacb0\uacfc\ubb3c\uc774 \ubaa8\ub450 \ud3ec\ud568\ub418\uc5b4 \uc57d 13GB \uc815\ub3c4 \ub429\ub2c8\ub2e4. \n    \uba40\ud2f0\uc2a4\ud14c\uc774\uc9c0 \ube4c\ub4dc\ub97c \uc0ac\uc6a9\ud558\uba74 4~5GB\ub85c \uc904\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n  <\/div>\n\n  <hr>\n\n  <h2><span class=\"step-num\">7<\/span> VSCode Dev Containers\ub85c \ub514\ubc84\uae45 \uc5f0\uacb0<\/h2>\n  <p>VSCode \ud655\uc7a5 2\uac1c\ub97c \uc124\uce58\ud569\ub2c8\ub2e4.<\/p>\n  <ul>\n    <li>Remote &#8211; SSH (\uae30\uc874)<\/li>\n    <li><strong>Dev Containers<\/strong> (\ucd94\uac00 \uc124\uce58)<\/li>\n  <\/ul>\n  <p>\ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud55c \ud6c4:<\/p>\n  <pre><code>docker run --gpus all -it \\\n  --name opencv-cuda \\\n  -v \/your\/project\/path:\/workspace \\\n  opencv-cuda:latest bash<\/code><\/pre>\n\n  <p>VSCode \uc67c\ucabd \ud558\ub2e8 \ud30c\ub780 \ubc84\ud2bc \u2192 <strong>Attach to Running Container<\/strong> \u2192 <span class=\"inline-code\">opencv-cuda<\/span> \uc120\ud0dd<\/p>\n  <p><span class=\"inline-code\">.vscode\/launch.json<\/span> \uc0dd\uc131:<\/p>\n  <pre><code>{\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"name\": \"Python Debugger: Current File\",\n      \"type\": \"debugpy\",\n      \"request\": \"launch\",\n      \"program\": \"${file}\",\n      \"console\": \"integratedTerminal\"\n    }\n  ]\n}<\/code><\/pre>\n\n  <hr>\n\n  <h2><span class=\"step-num\">8<\/span> CPU vs GPU \uc18d\ub3c4 \ube44\uad50 \ud14c\uc2a4\ud2b8<\/h2>\n  <h3>\uccab \ubc88\uc9f8 \uc2dc\ub3c4 &#8211; \ub2e8\uc21c GaussianBlur 1\ud68c<\/h3>\n  <pre><code>import cv2\nimport numpy as np\nimport time\n\nimg = np.random.randint(0, 255, (4096, 4096, 3), dtype=np.uint8)\n\n# CPU\nstart = time.time()\nresult_cpu = cv2.GaussianBlur(img, (21, 21), 0)\ncpu_time = time.time() - start\nprint(f\"CPU \uc2dc\uac04: {cpu_time:.4f}\ucd08\")\n\n# GPU\ngpu_img = cv2.cuda_GpuMat()\ngpu_img.upload(img)\nstart = time.time()\ngpu_filter = cv2.cuda.createGaussianFilter(cv2.CV_8UC3, cv2.CV_8UC3, (21, 21), 0)\nresult_gpu = gpu_filter.apply(gpu_img)\nresult_gpu.download()\ngpu_time = time.time() - start\nprint(f\"GPU \uc2dc\uac04: {gpu_time:.4f}\ucd08\")<\/code><\/pre>\n\n  <div class=\"result-box\">\n    <strong>\uacb0\uacfc<\/strong>\n    <pre style=\"background:transparent; color:#166534; padding:0; margin:0.5rem 0 0;\">CPU \uc2dc\uac04: 0.0437\ucd08\nGPU \uc2dc\uac04: 0.0982\ucd08\n\uc18d\ub3c4 \ucc28\uc774: 0.4\ubc30 (GPU\uac00 \ub354 \ub290\ub9bc \ud83d\ude05)<\/pre>\n  <\/div>\n\n  <p>GPU\uac00 \ub354 \ub290\ub9b0 \uc774\uc720\ub294 <strong>upload\/download \uc804\uc1a1 \uc624\ubc84\ud5e4\ub4dc<\/strong>\uac00 \uc5f0\uc0b0 \uc2dc\uac04\ubcf4\ub2e4 \ud06c\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4.<\/p>\n\n  <h3>\ub450 \ubc88\uc9f8 \uc2dc\ub3c4 &#8211; \uc5f0\uc18d \uc5f0\uc0b0 (Laplacian \uc5d0\ub7ec \ubc1c\uc0dd)<\/h3>\n  <pre><code>laplacian_filter = cv2.cuda.createLaplacianFilter(\n    cv2.CV_8UC3, cv2.CV_8UC3  # \u2190 3\ucc44\ub110\ub85c \uc0dd\uc131 \uc2dc\ub3c4\n)<\/code><\/pre>\n\n  <div class=\"error-box\">\n    <strong>\u274c \uc5d0\ub7ec \ubc1c\uc0dd<\/strong>\n    <pre style=\"background:transparent; color:#991b1b; padding:0; margin:0.5rem 0 0;\">OpenCV Error: (-215:Assertion failed) scn == 1 || scn == 4\nin function 'LinearFilter'<\/pre>\n    <p style=\"margin:0.5rem 0 0;\"><strong>\uc6d0\uc778:<\/strong> CUDA Laplacian \ud544\ud130\ub294 1\ucc44\ub110(\uadf8\ub808\uc774\uc2a4\ucf00\uc77c) \ub610\ub294 4\ucc44\ub110\ub9cc \uc9c0\uc6d0\ud569\ub2c8\ub2e4. 3\ucc44\ub110(BGR) \uceec\ub7ec \uc774\ubbf8\uc9c0\ub294 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/p>\n  <\/div>\n\n  <h3>\uc218\uc815 \ucf54\ub4dc &#8211; \uadf8\ub808\uc774\uc2a4\ucf00\uc77c \ubcc0\ud658 \ud6c4 \uc5f0\uc18d \uc5f0\uc0b0 5\ud68c<\/h3>\n  <pre><code>import cv2\nimport numpy as np\nimport time\n\nimg = np.random.randint(0, 255, (4096, 4096, 3), dtype=np.uint8)\nimg_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 1\ucc44\ub110 \ubcc0\ud658\n\n# CPU\nstart = time.time()\nresult = img_gray.copy()\nfor _ in range(5):\n    result = cv2.GaussianBlur(result, (21, 21), 0)\n    result = cv2.Laplacian(result, cv2.CV_8U)\n    result = cv2.GaussianBlur(result, (21, 21), 0)\ncpu_time = time.time() - start\nprint(f\"CPU \uc2dc\uac04: {cpu_time:.4f}\ucd08\")\n\n# GPU - \uc5c5\ub85c\ub4dc 1\ubc88, \uc5f0\uc0b0 15\ubc88, \ub2e4\uc6b4\ub85c\ub4dc 1\ubc88\ngpu_img = cv2.cuda_GpuMat()\ngpu_img.upload(img_gray)\n\ngaussian_filter = cv2.cuda.createGaussianFilter(cv2.CV_8UC1, cv2.CV_8UC1, (21, 21), 0)\nlaplacian_filter = cv2.cuda.createLaplacianFilter(cv2.CV_8UC1, cv2.CV_8UC1)\n\nstart = time.time()\ngpu_result = gpu_img\nfor _ in range(5):\n    gpu_result = gaussian_filter.apply(gpu_result)\n    gpu_result = laplacian_filter.apply(gpu_result)\n    gpu_result = gaussian_filter.apply(gpu_result)\nresult = gpu_result.download()\ngpu_time = time.time() - start\nprint(f\"GPU \uc2dc\uac04: {gpu_time:.4f}\ucd08\")\nprint(f\"\uc18d\ub3c4 \ucc28\uc774: {cpu_time\/gpu_time:.1f}\ubc30\")<\/code><\/pre>\n\n  <div class=\"result-box\">\n    <strong>\u2705 \ucd5c\uc885 \uacb0\uacfc<\/strong>\n    <pre style=\"background:transparent; color:#166534; padding:0; margin:0.5rem 0 0;\">CPU \uc2dc\uac04: 0.1283\ucd08\nGPU \uc2dc\uac04: 0.0553\ucd08\n\uc18d\ub3c4 \ucc28\uc774: 2.3\ubc30 \ud83c\udf89<\/pre>\n  <\/div>\n\n  <hr>\n\n  <h2>\ud575\uc2ec \uc815\ub9ac<\/h2>\n  <table>\n    <tr><th>\ud3ec\uc778\ud2b8<\/th><th>\ub0b4\uc6a9<\/th><\/tr>\n    <tr><td>pip install opencv<\/td><td>CUDA \ubbf8\ud3ec\ud568, \uc18c\uc2a4 \ube4c\ub4dc \ud544\uc694<\/td><\/tr>\n    <tr><td>Docker \uc0ac\uc6a9 \uc774\uc720<\/td><td>\ud638\uc2a4\ud2b8 \uc2dc\uc2a4\ud15c \uc624\uc5fc \uc5c6\uc774 \uaca9\ub9ac\ub41c \ud658\uacbd \uad6c\ucd95<\/td><\/tr>\n    <tr><td>GPU\uac00 \ub290\ub9b0 \uacbd\uc6b0<\/td><td>upload\/download \uc624\ubc84\ud5e4\ub4dc > \uc5f0\uc0b0 \uc2dc\uac04<\/td><\/tr>\n    <tr><td>GPU\uac00 \ube60\ub978 \uacbd\uc6b0<\/td><td>\uc5f0\uc0b0\uc744 \ub9ce\uc774 \uc5f0\uc18d\uc73c\ub85c \ud560\uc218\ub85d \uc720\ub9ac<\/td><\/tr>\n    <tr><td>Laplacian \uc5d0\ub7ec<\/td><td>CUDA\ub294 1\ucc44\ub110(CV_8UC1)\ub9cc \uc9c0\uc6d0, BGR \ubd88\uac00<\/td><\/tr>\n    <tr><td>VSCode \ub514\ubc84\uae45<\/td><td>Dev Containers\ub85c \ucee8\ud14c\uc774\ub108 \uc548\uc5d0\uc11c F5 \ub514\ubc84\uae45 \uac00\ub2a5<\/td><\/tr>\n  <\/table>\n\n<\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"602\" src=\"https:\/\/blog-api.minpox.com\/wp-content\/uploads\/2026\/04\/\uc2a4\ud06c\ub9b0\uc0f7-2026-04-16-\uc624\ud6c4-8.08.00-1024x602.png\" alt=\"\" class=\"wp-image-14\" srcset=\"https:\/\/blog-api.minpox.com\/wp-content\/uploads\/2026\/04\/\uc2a4\ud06c\ub9b0\uc0f7-2026-04-16-\uc624\ud6c4-8.08.00-1024x602.png 1024w, https:\/\/blog-api.minpox.com\/wp-content\/uploads\/2026\/04\/\uc2a4\ud06c\ub9b0\uc0f7-2026-04-16-\uc624\ud6c4-8.08.00-300x176.png 300w, https:\/\/blog-api.minpox.com\/wp-content\/uploads\/2026\/04\/\uc2a4\ud06c\ub9b0\uc0f7-2026-04-16-\uc624\ud6c4-8.08.00-768x452.png 768w, https:\/\/blog-api.minpox.com\/wp-content\/uploads\/2026\/04\/\uc2a4\ud06c\ub9b0\uc0f7-2026-04-16-\uc624\ud6c4-8.08.00-1536x903.png 1536w, https:\/\/blog-api.minpox.com\/wp-content\/uploads\/2026\/04\/\uc2a4\ud06c\ub9b0\uc0f7-2026-04-16-\uc624\ud6c4-8.08.00-2048x1204.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Docker OpenCV CUDA Python VSCode RTX 3060 OpenCV\uc5d0\uc11c CUDA \uac00\uc18d\uc744 \uc4f0\ub824\uba74 pip install opencv-python\uc73c\ub85c\ub294 \uc548 \ub429\ub2c8\ub2e4. CUDA \uc9c0\uc6d0\uc740 \uc18c\uc2a4\uc5d0\uc11c \uc9c1\uc811 \ube4c\ub4dc\ud574\uc57c \ud65c\uc131\ud654\ub429\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \ud638\uc2a4\ud2b8 \uc2dc\uc2a4\ud15c\uc744 \ub354\ub7fd\ud788\uc9c0 \uc54a\uace0, Docker\ub97c \uc774\uc6a9\ud574 \uae54\ub054\ud558\uac8c \ud658\uacbd\uc744 \uad6c\ucd95\ud558\uace0 VSCode\uc5d0\uc11c \ub514\ubc84\uae45\uae4c\uc9c0 \ud558\ub294 \ubc29\ubc95\uc744 \uc815\ub9ac\ud588\uc2b5\ub2c8\ub2e4. \uc65c pip install\ub85c\ub294 \uc548 \ub418\ub098? PyPI\uc5d0 \uc62c\ub77c\uc628 opencv-python\uc740 \ubc94\uc6a9 \ube4c\ub4dc\ub77c CUDA\uac00 \ube60\uc838 \uc788\uc2b5\ub2c8\ub2e4. OpenCV\ub294 \ube4c\ub4dc \uc2dc\uc810\uc5d0 CUDA \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[17,5,16,18,20,19],"class_list":["post-13","post","type-post","status-publish","format-standard","hentry","category-it","tag-cuda","tag-docker","tag-opencv","tag-python","tag-rtx3060","tag-vscode"],"_links":{"self":[{"href":"https:\/\/blog-api.minpox.com\/index.php?rest_route=\/wp\/v2\/posts\/13","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog-api.minpox.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog-api.minpox.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog-api.minpox.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog-api.minpox.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=13"}],"version-history":[{"count":1,"href":"https:\/\/blog-api.minpox.com\/index.php?rest_route=\/wp\/v2\/posts\/13\/revisions"}],"predecessor-version":[{"id":15,"href":"https:\/\/blog-api.minpox.com\/index.php?rest_route=\/wp\/v2\/posts\/13\/revisions\/15"}],"wp:attachment":[{"href":"https:\/\/blog-api.minpox.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=13"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog-api.minpox.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=13"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog-api.minpox.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=13"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}