The Fool In The Valleyの雑記帳

-- 好奇心いっぱいのおじいちゃんが綴るよしなし事 --

VSCodeでPython+OpenCV

本稿は、「Windows10上でVSCodeを使ってPythonOpenCVのプログラムを開発する」ための環境をつくる方法を記したものです。2021年2月時点での最新版を使い、Visual Studio Code1.53.1 の上で、Python 3.8.5、OpenCV 4.5.1が使えることを確認できています。以下はその手順です。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

◆Anacondaのインストール
Anacondaのサイトからダウンロードした Anaconda3-2020.11-Windows-x86_64.exe を実行し、D:\Development\anaconda3(任意)にインストールする。


VSCodeのインストール
Visual Studio Codeのサイトからダウンロードした VSCodeUserSetup-x64-1.53.1.exe を実行し、D:\Development\Microsoft VS Code(任意)にインストールする。


VSCode拡張機能のインストール
VSCodeのアクティビティー・バーで拡張機能を開き、

をインストールする。
f:id:tfitv:20210215203200p:plain


◆activate/deactivateコマンドのPowerShellスクリプトのセット
下記の手順でGitを使ってactivate、deactivateスクリプトを入手し、anacondaで使えるようにする。

PS D:\Development> git clone https://github.com/Liquidmantis/PSCondaEnvs

PS D:\Development> cd PSCondaEnvs

PS D:\Development\PSCondaEnvs> cp activate.ps1 d:\Development\anaconda3\Scripts\.       
PS D:\Development\PSCondaEnvs> cp deactivate.ps1 d:\Development\anaconda3\Scripts\.     


◆環境の作成
python 3.8.5、OpenCV 4を使う環境をopencv4という名で新たに作成し、それをactivateする。

PS D:\Development\PSCondaEnvs> conda create -n opencv4 python=3.8.5

PS D:\Development\PSCondaEnvs> conda env list
# conda environments:
#
base                  *  D:\Development\anaconda3
opencv4                D:\Development\anaconda3\envs\opencv4

PS D:\Development\PSCondaEnvs> activate opencv4

opencv4 という環境をactivateしたので、そこにOpenCVをインストールする。
opencv4の環境では、OpenCVのバージョン4.5.1がインストールされ、インポートできるようになっていることが確認できた。

[opencv4] PS D:\Development\PSCondaEnvs> pip install opencv-contrib-python

[opencv4] PS D:\Development\PSCondaEnvs> python
Python 3.8.5 (default, Sep  3 2020, 21:29:08) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32

Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.5.1'


◆Python3.8.5とOpenCV4の環境でのプログラムの実行
VSCodeの左下でPython 3.8.5 64-bit (’opencv4’):conda)が設定されていることを確認する。異なっていいれば、左下のPythonの表示をクリックして設定する。
f:id:tfitv:20210215221309p:plain

下にサンプルプログラム(ハノイの塔で一番上の円盤を軸から引き上げる動作のグラフィカル表示)と実行結果を示す。
OpenCVはimport cv2 としてインポートする。OpenCV 4.5.1であるがモジュール名はcv2である。

import numpy as np
import cv2
import time

def DiscColor(i):       #Discの番号を渡されて色を返す関数
    if i % 2 == 0:
        color = (0,42,84)   # こげ茶
    else:
        color = (55,174,255)    # 黄土  
    return(color)  

ww = 640
wh = 480
ps = int(ww / 4)
bh = int(3 * wh / 4)
maxdn = 5 #number of discs
dh = int(wh / 4 / maxdn)
dr = [0,0,0,0,0,0,0]

for i in range(maxdn):
    dr[i] = int(ww/8 * (1 - 3*i/(maxdn-1)/4))

for j in range(5):
    img = np.full((wh, ww, 3), 255, dtype=np.uint8)     # 白いベースの画面
    cv2.line(img, (int(ww/16), bh), (int(ww*15/16), bh), (0,0,0), 3) # 水平線

    for i in range(3):   # 軸の描画
        cv2.line(img, (int(ww*(i+1)/4), int(wh*6/16)), (int(ww*(i+1)/4), int(wh*3/4)), (0,0,0), 3)

    for i in range(maxdn-1):  # 円盤の描画
        cv2.rectangle(img, ((ps-dr[i]), (bh-dh*(i+1))), ((ps + dr[i]), (bh-dh*i)), DiscColor(i),  -1)
    i = maxdn-1
    # 一番上の円盤の描画 5回に分けで少しずつ上に移動させる
    cv2.rectangle(img, ((ps-dr[i]), (bh-dh*(i+j+1))), ((ps + dr[i]), (bh-dh*(i+j))), DiscColor(i),  -1)
    # 
    cv2.imshow('img', img)
    cv2.moveWindow('img', 0, 520)
    cv2.waitKey(200)  # 200mmsecの間待つ

cv2.waitKey(0) # 0の場合、キーが押されるまで待つ
f:id:tfitv:20210215200740g:plain
PythonOpenCVの実行結果をGIFで表示したもの