情況: 我正在嘗試找出視頻幀之間的差異。我有 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)
由于您正在比較相鄰的圖像,因此您可以通過重復使用其中一張圖像來節省一半的讀?。ú⑸晕⒑喕a)。
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
添加回答
舉報
0/150
提交
取消