from skimage.measure import compare_ssimimport argparseimport imutilsimport cv2first = ("original_02.png")second = ("modified_02.png")imageA = cv2.imread("first")imageB = cv2.imread("second")grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)(score, diff) = compare_ssim(grayA, grayB, full=True)diff = (diff * 255).astype("uint8")print("SSIM: {}".format(score))thresh = cv2.threshold(diff, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)cnts = imutils.grab_contours(cnts)for c in cnts: (x, y, w, h) = cv2.boundingRect(c) cv2.rectangle(imageA, (x, y), (x + w, y + h), (0, 0, 255), 2) cv2.rectangle(imageB, (x, y), (x + w, y + h), (0, 0, 255), 2)cv2.imshow("Original", imageA)cv2.imshow("Modified", imageB)cv2.imshow("Diff", diff)cv2.imshow("Thresh", thresh)cv2.waitKey(0)這是我的代碼,我遇到了標題中提到的錯誤。我將代碼和必要的文件保存在同一個文件夾中g(shù)reyA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY) cv2.error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-j8nxabm_\opencv\modules\imgproc \src\color.cpp:182: 錯誤: (-215:斷言失敗) !_src.empty() 在函數(shù)“cv::cvtColor”中上面是我收到的錯誤
2 回答

絕地無雙
TA貢獻1946條經(jīng)驗 獲得超4個贊
您不是在讀取圖像,而是將字符串讀取到 imread 中。imread()將此解釋為路徑并可能返回,None因為它找不到路徑。相反嘗試:
first = ("original_02.png")
second = ("modified_02.png")
imageA = cv2.imread(first)
imageB = cv2.imread(second)

紫衣仙女
TA貢獻1839條經(jīng)驗 獲得超15個贊
錯誤消息告訴您您的圖像是空的。
這是為什么?— 因為您的代碼正在嘗試讀取名稱為'first'且'second'. 實際上,您想要讀取這些名稱的變量。
因此刪除引號。此外,沒有理由將變量名稱放在括號中 - 也刪除它們。目前看來您打算將這些變量定義為元組(但您沒有):
first = "original_02.png"
second = "modified_02.png"
imageA = cv2.imread(first)
imageB = cv2.imread(second)
接下來,您應該檢查這是否真的有效。
如果無法讀取圖像(...),該函數(shù)將返回一個空矩陣
添加回答
舉報
0/150
提交
取消