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

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

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

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

Python 3.x

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

Q&A

0回答

1505閲覧

Python/OpenCVでのcv2.findTransformECCの引数について

P5_USER

総合スコア73

OpenCV

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

Python 3.x

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

0グッド

0クリップ

投稿2019/04/17 07:38

編集2019/04/17 07:42

いつもお世話になっています。

前提・実現したいこと

PCにつないだカメラの映像からリアルタイムで手振れを除去しようとしています。
Qiitaの記事に私の望むもののベースとなるものがありました。
以下のソースコードもこちらから参考にしたものを使っています。

そのまま実行してみると、引数の数が足りてないと警告を出したので、
こちらから関数(cv2.findTransformECC)の確認を行い、都度修正を行いました。

しかし、inputMaskの意味が理解できず、躓いてしまいました。
こちらのページに書いてある通り、inputMaskを設定して引数に入れたのですが、以下のエラーメッセージが表示されてしまいました。

発生している問題・エラーメッセージ

サイズがあっていないとのことなのですが、
inputMask = np.ones(frame.shape,np.uint8)
で画像の値を取っている以上、なぜこのようなエラーになったのかがわかっていません。

OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\core\src\arithm.cpp:663: error: (-209:Sizes of input arguments do not match) The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array' in function 'cv::arithm_op'

該当のソースコード

Python3

1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3 4import cv2 5import numpy as np 6 7# FourCC指定 8#fourcc = "DIB " 9fourcc = "XVID" 10 11# 変換メソッド指定(?) 12#warp_type = cv2.MOTION_AFFINE 13#warp_type = cv2.MOTION_EUCLIDEAN 14#warp_type = cv2.MOTION_TRANSLATION 15warp_type = cv2.MOTION_HOMOGRAPHY 16 17# 出力画像を縦横1/2サイズ(面積1/4)に設定 18scale = 2 19 20# WarpMatrixと変換関数を設定 21if warp_type == cv2.MOTION_HOMOGRAPHY: 22 warp = np.eye(3,3,dtype=np.float32) 23 warpTransform = cv2.warpPerspective 24else: 25 warp = np.eye(2,3,dtype=np.float32) 26 warpTransform = cv2.warpAffine 27 28##カメラの画像取り込みオブジェクトインスタンスの生成 29capture = cv2.VideoCapture(0) 30 31# キャプチャの情報取得し出力情報を作成 32fps = capture.get(cv2.CAP_PROP_FPS) 33size = capture.get(cv2.CAP_PROP_FRAME_WIDTH), capture.get(cv2.CAP_PROP_FRAME_HEIGHT) 34size = tuple(map(lambda x: int(x / scale), size)) 35 36# 基準となる画像を取得 37ret, base = capture.read() 38base = cv2.resize(base, size) 39base = cv2.cvtColor(base, cv2.COLOR_BGR2GRAY) 40 41criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 5000, 1e-8) 42 43while True: 44 45 # フレーム取得 46 ret, frame = capture.read() 47 if not ret: 48 break 49 50 #mask is set to the full image 51 inputMask = np.ones(frame.shape,np.uint8) 52 53 frame = cv2.resize(frame, size) 54 tmp = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 55 cv2.findTransformECC(tmp, base, warp, warp_type, criteria, inputMask, 5) 56 57 # 出力は元画像(カラー画像) 58 out = warpTransform(frame, warp, size) 59 60 # 表示かつAVIに出力 61 cv2.imshow("", out) 62 63 k = cv2.waitKey(1) 64 if k in [27, ord('q')]: 65 # ESCかQキー押下で終了 66 break 67 68# 解放 69capture.release() 70cv2.destroyAllWindows()

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

MS Visual Studio Enterprise 2019
Python 3.6
OpenCV 4.1.0.25

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問