Windows 10 で Python 3 で OpenCV 4 で 画像処理
UbuntuばかりでWindowsであんまりやってなかったのでやってみる。
Windowsを使うのであればVC++やC#とかで実装することが多いんだと思うけど、Pythonのが簡単なのでPythonで。
GUIはTkinterで実装する。
Python のインストール
https://www.python.org/downloads/ からダウンロードしてインストール。
そんだけ。
コマンドプロンプトでpythonと打ってバージョンが帰ってきたらちゃんと入ってる。
C:\>python
Python 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
OpenCV のインストール
コマンドプロンプトを開いて、pip install opencv-python でインストールする。
ただし、pipが古いとあれなのでまずはpipをアップグレード。
C:\>python -m pip install --upgrade pip
Requirement already satisfied: pip in c:\appdata\local\programs\python\python310\lib\site-packages (22.0.4)
最新だった。
んで、opencvインストール。
C:\>pip install opencv-python
Collecting opencv-python
Downloading opencv_python-4.5.5.64-cp36-abi3-win_amd64.whl (35.4 MB)
---------------------------------------- 35.4/35.4 MB 46.7 MB/s eta 0:00:00
Collecting numpy>=1.19.3
Downloading numpy-1.22.3-cp310-cp310-win_amd64.whl (14.7 MB)
---------------------------------------- 14.7/14.7 MB 54.4 MB/s eta 0:00:00
Installing collected packages: numpy, opencv-python
Successfully installed numpy-1.22.3 opencv-python-4.5.5.64
ちゃんと入ったかの確認は以下のコマンドでできる。
C:\>python -c "import cv2; print(cv2.__version__)"
4.5.5
エラーが出たら入ってない。
Tkinterの確認
Tkinterはデフォルトで一緒に入ってきているけど一応確認する。
以下のコマンドでダイアログが表示されたらちゃんと入っている。
C:\>python -m tkinter
PILのインストール
pythonで画像処理するときにたいてい必要になるPILを入れる。
C:\> pip install Pillow
Collecting Pillow
Downloading Pillow-9.0.1-cp310-cp310-win_amd64.whl (3.2 MB)
---------------------------------------- 3.2/3.2 MB 25.8 MB/s eta 0:00:00
Installing collected packages: Pillow
Successfully installed Pillow-9.0.1
カメラの映像をTkinterのGUI上に表示させるコード
以下のコード(sample1.py)を実行するとカメラの画像がGUI上に表示される。
# Import required Libraries
from tkinter import *
from PIL import Image, ImageTk
import cv2
# Create an instance of TKinter Window or frame
win = Tk()
# Set the size of the window
win.geometry("640x480")
# Create a Label to capture the Video frames
label =Label(win)
label.grid(row=0, column=0)
cap= cv2.VideoCapture(0)
# Define function to show frame
def show_frames():
# Get the latest frame and convert into Image
cv2image= cv2.cvtColor(cap.read()[1],cv2.COLOR_BGR2RGB)
img = Image.fromarray(cv2image)
# Convert image to PhotoImage
imgtk = ImageTk.PhotoImage(image = img)
label.imgtk = imgtk
label.configure(image=imgtk)
# Repeat after an interval to capture continiously
label.after(20, show_frames)
show_frames()
win.mainloop()
実行
C:\>python sample1.py
GUIが表示され、カメラの画像が移っているはず。
とりあえずここまで。