ある一枚の背景画像と、七百枚ほどの画像とで差分とるということを繰り返し行い、背景差分画像を出力したいのですがエラーが出てしまいます。現在のコードは下記のような感じです。python初心者なのですがどなたかご教授いただければ幸いです。なお、このコードは動画をフレーム分割してできた画像をグレースケールに変換して出力するという作業を行っているのですが、そこは問題なくできたので省略しています。
コード
import numpy as np import matplotlib.pyplot as plt import pandas as pd import cv2 i = 0 count = 0 cpf = 1 #動画の読み込み video_path = "Zbc=1100mm_Trim.avi" cap = cv2.VideoCapture(video_path) #フレームレート(fps)の取得 frame_rate = cap.get(cv2.CAP_PROP_FPS) num = 0 while cap.isOpened(): ret, frame = cap.read() if ret == False: print('FINISHED') break if count%cpf == 0: #dt = 0.025[sec] #フレーム画像の保存 cv2.imshow('Video', frame) img = cv2.imwrite("original_" + str(num) + '.png', frame) print(str(num)+'.png') num += 1 i += 1 count = count + 1 cap.release() k = 0 while k < num: #グレースケールによる入力画像の読み込み gray = cv2.imread("original_" + str(k)+'.png', 0) #出力画像の保存 cv2.imshow('Video', gray) gray = cv2.imwrite("gray_"+str(k)+'.png', gray) print('gray_'+str(k)+'.png') k += 1 k = 0 while k < num: #入力画像の読み込み img_src = cv2.imread('gray_'+str(k)+'.png', 0) #背景画像の読み込み img_bkg = cv2.imread('gray_600 - reference.png') #差分画像の取得 img_df = cv2.absdiff(img_src, img_bkg) #出力画像の保存 cv2.imwrite('diff_'+str(k)+'.png', img_df) print('diff_'+str(k)+'.png') k += 1 --------------------------------------------------------------------------- error Traceback (most recent call last) Input In [2], in <cell line: 54>() 60 img_bkg = cv2.imread('gray_600 - reference.png') 62 #差分画像の取得 ---> 63 img_df = cv2.absdiff(img_src, img_bkg) 65 #出力画像の保存 66 cv2.imwrite('diff_'+str(k)+'.png', img_df) error: OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\core\src\arithm.cpp:650: 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'
