使用opencv和selenium截图

2024-09-29 03:37:27 发布

您现在位置:Python中文网/ 问答频道 /正文

在我们的一个新的网页截图,以确定我们的新的网页之间的差异。为此,我使用Selenium将屏幕截图作为PNG图像:

driver.get_screenshot_as_file(filepath)

imageAimageB

一旦我有了这两个截图,我就试着将它们与opencv进行比较:

^{pr2}$

然后我要画出矩形,围绕发现的差异。在

当我使用:

thresh = cv2.threshold(diff, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]

我收到以下错误消息:

OpenCV Error: Assertion failed (src.type() == (((0) & ((1 << 3) - 1)) + (((1)-1) << 3))) in threshold

关闭自适应阈值:

thresh = cv2.threshold(diff, 0, 255, cv2.THRESH_BINARY_INV)[1]

我设法又向前迈了一步。在

但是,检测轮廓的代码失败了:

cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

错误如下:

error: (-210) [Start]FindContours supports only CV_8UC1 images when mode != CV_RETR_FLOODFILL otherwise supports CV_32SC1 images only in function cvStartFindContours_Impl

我开始怀疑问题是否出在使用的文件类型(png vs jpeg)。在

完整的、可复制的代码如下:

imageA = cv2.imread("screenshota.png")
imageB = cv2.imread("screenshotb.png")

grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)
grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)

(score, diff) = compare_ssim(grayA, grayB, full=True)
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)

抱歉问新手的问题,但有人能给我指出正确的方向吗?在


Tags: in网页thresholdpng错误diff差异cv2