質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

13337閲覧

cv2.VideoCaptureでWebカメラから取得した画像を回転させたい。

onakasuita

総合スコア7

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/10/26 08:57

前提・実現したいこと

WEBカメラの映像をPythonとOpenCVで顔認識して遊ぶ
こちらのサイトを参考(丸コピ)して顔認識できるツールを作ってみたのですが、
cv2.VideoCaptureでWebカメラから取得した映像を90度回転させたいです。

該当のソースコード

python

1import sys 2import cv2 # OpenCV のインポート 3import tkinter 4import numpy as np 5 6''' 7参考 8@link http://ensekitt.hatenablog.com/entry/2017/12/19/200000 9@link https://note.nkmk.me/python-opencv-face-detection-haar-cascade/ 10@link https://note.nkmk.me/python-opencv-mosaic/ 11@link http://workpiles.com/2015/04/opencv-detectmultiscale-scalefactor/ 12''' 13 14# VideoCaptureのインスタンスを作成する。 15# 引数でカメラを選べれる。 16cap = cv2.VideoCapture(1) 17 18if cap.isOpened() is False: 19 print("can not open camera") 20 sys.exit() 21 22# 評価器を読み込み 23# https://github.com/opencv/opencv/tree/master/data/haarcascades 24cascade = cv2.CascadeClassifier('/usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt2.xml') 25eye_cascade = cv2.CascadeClassifier('/usr/local/share/opencv4/haarcascades/haarcascade_eye_tree_eyeglasses.xml') 26 27def mosaic(src, ratio=0.1): 28 small = cv2.resize(src, None, fx=ratio, fy=ratio, interpolation=cv2.INTER_NEAREST) 29 return cv2.resize(small, src.shape[:2][::-1], interpolation=cv2.INTER_NEAREST) 30 31def mosaic_area(src, x, y, width, height, ratio=0.1): 32 dst = src.copy() 33 dst[y:y + height, x:x + width] = mosaic(dst[y:y + height, x:x + width], ratio) 34 return dst 35 36while True: 37 # VideoCaptureから1フレーム読み込む 38 ret, frame = cap.read() 39 40 # そのままの大きさだと処理速度がきついのでリサイズ 41 frame = cv2.resize(frame, (int(frame.shape[1]*0.7), int(frame.shape[0]*0.7))) 42 #windowサイズはここで変更 43 44 # 処理速度を高めるために画像をグレースケールに変換したものを用意 45 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 46 47 # 顔検出 48 facerect = cascade.detectMultiScale( 49 gray, 50 scaleFactor=1.11, 51 minNeighbors=3, 52 minSize=(100, 100) 53 ) 54 55 if len(facerect) != 0: 56 for x, y, w, h in facerect: 57 # 顔の部分(この顔の部分に対して目の検出をかける) 58 face_gray = gray[y: y + h, x: x + w] 59 60 # くり抜いた顔の部分を表示(処理には必要ない。ただ見たいだけ。) 61 show_face_gray = cv2.resize(face_gray, (int(gray.shape[1]), int(gray.shape[0]))) 62 cv2.imshow('face', show_face_gray) 63 64 # 顔の部分から目の検出 65 eyes = eye_cascade.detectMultiScale( 66 face_gray, 67 scaleFactor=1.11, # ここの値はPCのスペックに依存するので適宜修正してください 68 minNeighbors=3, 69 minSize=(15, 15) 70 ) 71 72 if len(eyes) == 0: 73 # 目が閉じられたとみなす 74 cv2.putText( 75 frame, 76 'close your eyes', 77 (x, y - 10), # 位置を少し調整 78 cv2.FONT_HERSHEY_PLAIN, 79 2, 80 (0, 255,0), 81 2, 82 cv2.LINE_AA 83 ) 84 else: 85 for (ex, ey, ew, eh) in eyes: 86 # 目の部分にモザイク処理 87 frame = mosaic_area( 88 frame, 89 int((x + ex) - ew / 2), 90 int(y + ey), 91 int(ew * 2.5), 92 eh 93 ) 94 95 # 顔検出した部分に枠を描画 96 cv2.rectangle( 97 frame, 98 (x, y), 99 (x + w, y + h), 100 (255, 255, 255), 101 thickness=2 102 ) 103 104 cv2.imshow('ARA', frame) 105 106 # キー入力を1ms待って、k が27(ESC)だったらBreakする 107 k = cv2.waitKey(1) 108 if k == 27: 109 break 110 111# キャプチャをリリースして、ウィンドウをすべて閉じる 112cap.release() 113cv2.destroyAllWindows()

補足情報(FW/ツールのバージョンなど)

python 3.7.3
anaconda3 2019.07
openCV

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

cv2.rotate で画像の回転が行えます。

OpenCV - 画像を回転、反転させる方法について

第2引数で90°、180°、270°回転のどれにするかを指定できます。

python

1import cv2 2 3# 画像を読み込む。 4img = cv2.imread("sample.png") 5 6# 反時計回りに90° (時計回りに270°) 回転させる。 7dst = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)

回転するタイミングは入力画像がすでに回転した状態であるならば、cap.read() で取得した直後に入れてはどうでしょうか。

python

1ret, frame = cap.read() 2 3frame = cv2.rotate(frame, cv2.ROTATE_90_COUNTERCLOCKWISE)

投稿2019/10/26 09:15

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

onakasuita

2019/10/26 11:13

おー!できました! 誠にありがとうございます!助かりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問