cv2を試してみた。



import cv2
import matplotlib.pyplot as plt
img = cv2.imread("nanamin1", 1)
# 画像の読み込み

img_r = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# cv2だと色の構成要素がBGRの順番だがpltはRGBの順番なので、pltで表示させるためにはcv2.COLOR_BGR2RGBを使う。

HAAR_FILE="/anaconda3/lib/python3.7/site-packages/cv2/data/haarcascade_frontalface_default.xml"
# 画像データを読み込む。このデータはopen_cvをダウンロードすると付いてくる。

cascade=cv2.CascadeClassifier(HAAR_FILE)
# 大量の画像を学習させることによって、分類器を作る。これによって、顔を検知することが可能となる。

face=cascade.detectMultiScale(img_r)

for x,y,w,h in face:
    cv2.rectangle(img_r,(x, y),(x+w,y+h),(255,255,255),3)
# 顔を囲む長方形を描画する。引数は、(画像、左下座標、右上座標、色、太さ)の順番

plt.imshow(img_r)

うまくできた。

どういうわけだか、open_cvのデフォルトである、cv2.imshow関数を使っても,画像を表示することができなかった。
調べたところ、この問題はかなり多くの人が指摘しており、wait_keyを使うことによって解決した人などもいるようだが、私は解決できなかったので、matplotlibを使った。