コンテンツにスキップ

Top

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が表示され、カメラの画像が移っているはず。

とりあえずここまで。