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

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

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

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

TypeError:Expected Ptr<cv::UMat> for argument '%s'の対処法

hamasaki
hamasaki

総合スコア6

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0評価

0クリップ

16581閲覧

投稿2019/11/26 00:51

前提・実現したいこと

PythonやOpenCVなどを用い、動画をフレーム間差分法で加工、その動画を画像に分割し、その画像をトリミングして保存しようとしています。トリミングの処理までは完了していますが、そこから次の処理である画像の保存の際に以下のエラーメッセージが発生しました。

該当のソースコード

Python

import cv2 import numpy as np from PIL import Image import os import shutil def video_2_frames(video_file, image_dir, image_file): # Delete the entire directory tree if it exists. if os.path.exists(image_dir): shutil.rmtree(image_dir) # Make the directory if it doesn't exist. if not os.path.exists(image_dir): os.makedirs(image_dir) # Video to frames global i global j global count i=0 j=0 count=0 cap = cv2.VideoCapture(video_file) fgbg = cv2.bgsegm.createBackgroundSubtractorMOG() while(cap.isOpened()): flag, frame = cap.read() # Capture frame-by-frame if flag == False: # Is a frame left? break if i==30: fgmask = fgbg.apply(frame) cv2.imwrite(image_dir+image_file % str(j), fgmask) # Save a frame print('Save', image_dir+image_file % str(j)) i = 0 j += 1 i+=1 cap.release() # When everything done, release the capture video_2_frames('./movie.mp4','./image_dir/','img_%s.jpg') def nparray_to_rgb(nparry:np.array): return (int(nparry[0]),int(bg_color[1]),int(bg_color[2])) def find_edge(img_path:str): img = cv2.imread(img_path,0) blur = cv2.blur(img,(5,5)) print('blur') print(blur) edges = cv2.Canny(blur,100,200) print('edges') print(edges) return edges def find_target(edges): results = np.where(edges==255) print('results') print(results) top = np.min(results[0]) bottom = np.max(results[0]) - 1 left = np.min(results[1]) right = np.max(results[1]) - 1 return (left,top,right,bottom) def to_RGB(image:Image): if image.mode != 'RGBA': return image background = Image.new("RGB", image.size, (255, 255, 255)) print('image.mode='+image.mode) background.paste(image, mask=image.split()[3]) # 3 is the alpha channel background.format = image.format return background def get_crop_img(img_path:str): edges = find_edge(img_path) left,top,right,bottom = find_target(edges) rgb_img = to_RGB(Image.open(img_path)) trim_img = rgb_img.crop((left, top, right, bottom)) cv2.imwrite('./image_dir/img_'+str(count)+'_trim.jpg',trim_img) print('crop_img') for count_img in range(1,j): print('crop_'+str(count_img)) get_crop_img('./image_dir/img_'+str(count_img)+'.jpg') count_img+=1 count+=1

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

line 78, in get_crop_img cv2.imwrite('./image_dir/img_'+str(count)+'_trim.jpg',trim_img) TypeError: Expected Ptr<cv::UMat> for argument '%s'

このエラーはなぜ発生したのでしょうか?
また、どのように対処したらよいのだしょうか?
教えて頂けると幸いです。

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

開発環境(IDE):Spyder(Python3.7)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。