情況: 我正在嘗試找出視頻幀之間的差異。我有 35000 個(gè)這樣的幀,它們的名稱(chēng)都像 FRAMENUMBER.jpg。它們?cè)谀夸浿械磁判颉_@是我為查找差異而編寫(xiě)的代碼,但我有幾個(gè)問(wèn)題。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")錯(cuò)誤:直到第二個(gè) for 循環(huán)的所有內(nèi)容都有效,但 pic 數(shù)組存在問(wèn)題。由于文件未排序,因此數(shù)組也未排序。什么是按升序?qū)@些文件進(jìn)行排序的簡(jiǎn)單方法。當(dāng)我嘗試使用 opencv 模塊讀取圖像時(shí),它總是拋出錯(cuò)誤File "frame.py", line 20, in <module>
img1 = cv2.IMREAD_GRAYSCALE("%s",pic[(counter - 1)])
TypeError: 'int' object is not callable我正在嘗試遍歷文件并比較它們之間的差異。我的 for 循環(huán)有什么問(wèn)題或什么是解決此問(wèn)題的更好方法?我在 Linux 上使用 Python 3.6.9(默認(rèn),2020 年 7 月 17 日,12:50:27)[GCC 8.4.0]。
1 回答

慕的地8271018
TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
該錯(cuò)誤告訴您這cv2.IMREAD_GRAYSCALE是一個(gè)數(shù)字。正確的使用方法是做類(lèi)似的事情
img = cv2.imread(filename, cv2.IMREAD_GRAYSCALE)
或者,在你的情況下,
img1 = cv2.imread(pic[counter - 1], cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread(pic[counter], cv2.IMREAD_GRAYSCALE)
由于您正在比較相鄰的圖像,因此您可以通過(guò)重復(fù)使用其中一張圖像來(lái)節(jié)省一半的讀?。ú⑸晕⒑?jiǎn)化代碼)。
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
添加回答
舉報(bào)
0/150
提交
取消