为了账号安全,请及时绑定邮箱和手机立即绑定

Python 中的 OpenCv 问题 Resutling 'int' object is not

Python 中的 OpenCv 问题 Resutling 'int' object is not

白衣染霜花 2023-04-25 17:14:18
情况: 我正在尝试找出视频帧之间的差异。我有 35000 个这样的帧,它们的名称都像 FRAMENUMBER.jpg。它们在目录中但未排序。这是我为查找差异而编写的代码,但我有几个问题。import osimport cv2import pandas as pd frame = []pic = []directory = r'/home/kjo2/video'for filename in os.listdir(directory):    if filename.endswith(".jpg"):        bob = os.path.join(filename)        pic.append(bob)    else:        continuepd.DataFrame(pic).to_csv("boo.csv")for counter in range(1,35000):    if counter == 35000:        img1 = cv2.IMREAD_GRAYSCALE("%s",pic[(counter - 1)])        img2 = cv2.IMREAD_GRAYSCALE("%s",pic[0])        diff = cv2.absdiff(img1, img2)        frame.append(diff)    else:        img1 = cv2.IMREAD_GRAYSCALE("%s",pic[(counter - 1)])        img2 = cv2.IMREAD_GRAYSCALE("%s",pic[counter])        diff = cv2.absdiff(img1, img2)        frame.append(diff)pd.DataFrame(frame).to_csv("foo.csv")错误:直到第二个 for 循环的所有内容都有效,但 pic 数组存在问题。由于文件未排序,因此数组也未排序。什么是按升序对这些文件进行排序的简单方法。当我尝试使用 opencv 模块读取图像时,它总是抛出错误File "frame.py", line 20, in <module>     img1 = cv2.IMREAD_GRAYSCALE("%s",pic[(counter - 1)]) TypeError: 'int' object is not callable我正在尝试遍历文件并比较它们之间的差异。我的 for 循环有什么问题或什么是解决此问题的更好方法?我在 Linux 上使用 Python 3.6.9(默认,2020 年 7 月 17 日,12:50:27)[GCC 8.4.0]。
查看完整描述

1 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

该错误告诉您这cv2.IMREAD_GRAYSCALE是一个数字。正确的使用方法是做类似的事情


img = cv2.imread(filename, cv2.IMREAD_GRAYSCALE)

或者,在你的情况下,


img1 = cv2.imread(pic[counter - 1], cv2.IMREAD_GRAYSCALE)

img2 = cv2.imread(pic[counter], cv2.IMREAD_GRAYSCALE)

由于您正在比较相邻的图像,因此您可以通过重复使用其中一张图像来节省一半的读取(并稍微简化代码)。


img1 = cv2.imread(pic[0], cv2.IMREAD_GRAYSCALE)

for i in range(1, len(pic)):

    img2 = cv2.imread(pic[i], cv2.IMREAD_GRAYSCALE)

    frame.append(cv2.absDiff(img1, img2))

    img1 = img2


查看完整回答
反对 回复 2023-04-25
  • 1 回答
  • 0 关注
  • 79 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信