OpenCV是一个功能强大且高度优化的开源库,在 BSD 3-clause 许可下开发和发布。它可用于跨平台(Linux、macOS、ios、windows 和 android)并支持多种语言(C++、Java 和 python),用途广泛。它是使用 Python 比较两个图像并突出显示差异的最佳方法之一,那么python如何实现照片比对?
python照片比对:它是为机器学习、图像处理、3D 重建、对象检测等而开发的,但现在它在实时应用中发挥着重要作用,这在这个时代非常重要,它的实时操作可以处理图像和视频,识别物体,甚至它可以区分手写或两个非常相似的图像。OpenCV 应用程序仅受我们想象力的限制。
【python照片比对(如何比较两个图像并突出显示差异())】python如何比较两个图像?在本文中,我们将使用 OpenCV 包并使用它来比较两个图像并使用 Python 突出显示差异。
例如,让我们来看看这两个网页截图:
文章图片
文章图片
我们必须牢记两个基本要素:
- 两个图像必须具有相同的大小和通道。
- 每个像素必须是相同的值。
- 加载原始图像和第二张
- 检查图像的大小
- 找出两张图片之间的不同之处
- 将它们转换为灰度
- 增加差异的大小
- 查找更改的计数器
- 在更改周围显示框
现在让我们开始这个python照片比对的过程:
让我们首先检查它们是否具有相同的大小和通道。如果两个图像具有相同的尺寸和通道,我们必须继续进行操作,如果两个图像没有相同的尺寸和通道,则它们不相等。
python如何实现照片比对?如果两个图像具有相同的大小和通道,我们可以通过减去它们来继续。操作 cv2.subtract(image1,image2) 而不是算术运算,只需将第一张图像中的每个像素减去第二张图像中相应像素的值。
现在让我们开始编码:
先决条件
- OpenCV 包
- Python知识
python3 -m pip install imutils
python3 -m pip install opencv-python
第 2 步:导入依赖项现在打开你最喜欢的代码编辑器并粘贴以下代码:
import cv2
import imutiimls
然后我们需要导入所需的库,包括 openCV 和 utils。我们可以
imutils
使用“
pip install imutils
”命令轻松安装。#get the images you want to compare.
original = cv2.imread("1.png")
new = cv2.imread("2.png")
#resize the images to make them small in size. A bigger size image may take a significant time
#more computing power and time
original = imutils.resize(original, height = 600)
new = imutils.resize(new, height = 600)
python如何比较两个图像?之后我们需要从系统内存中读取图像,我们需要确保两个图像与我们正在编写的代码放在同一文件夹中,否则你需要提供图像的位置路径。图像完全加载后,我们需要将图像大小调整为更易于管理的大小(在这种情况下为高 = 960 像素)。现在我们也可以处理原始图像本身,尽管有时图像的尺寸确实很大,因此处理图像可能需要更多的时间。
#create a copy of original image so that we can store the
#difference of 2 images in the same on
diff = original.copy()
cv2.absdiff(original, new, diff)
第 3 步:python照片比对 - 将图像转换为灰度现在我们必须使用
absdiff
有助于找到两个图像阵列像素之间绝对差异的函数。在这个函数的帮助下,我们将能够计算两个数组之间的每个元素的精确差异。差异在第三个参数中返回。#converting the difference into grayscale images
gray = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY) #increasing the size of differences after that we can capture them all
for i in range(0, 3):
dilated = cv2.dilate(gray.copy(), None, iterations= i+ 1)
在这部分代码中,我们首先将图像转换为灰度,这有助于在图像上制作和应用不同类型的操作非常容易,然后我们应用形态学操作(形态学操作是一组广泛的图像处理操作,可以处理数字图像基于它们的形状和大小。)在图像上将像素合并在一起,因为我们对确切的差异并不真正感兴趣,但对图像上的差异区域真的很感兴趣。
#threshold the gray image to binary it. Anything pixel that has
#value higher than 3 we are converting to white
#(remember 0 is black and 255 is exact white)
#the image is called binarised as any value lower than 3 will be 0 and
# all of the values equal to and higher than 3 will be 255
(T, thresh) = cv2.threshold(dilated, 3, 255, cv2.THRESH_BINARY) # now we have to find contours in the binarized image
cnts = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
python如何实现照片比对?在线五我们对膨胀的灰度图像进行阈值处理以将其二值化。任何值大于 3 的像素我们都将转换为白色(我们必须记住像素值 0 是黑色,255 是纯白色)并且该图像被称为二值化,因为任何低于 3 的值都将是 0 并且所有值类似于大于3的将转换为255。之后,我们可以使用OpenCV函数找到二值化图像的轮廓之一。
for c in cnts:
# nicely fiting a bounding box to the contour
(x, y, w, h) = cv2.boundingRect(c)
cv2.rectangle(new, (x, y), (x + w, y + h), (0, 255, 0), 2) #remove comments from below 2 lines if you want to
#for viewing the image press any key to continue
#simply write the identified changes to the disk
cv2.imwrite("changes.png", new)
输出
文章图片
python如何比较两个图像?在第一个语法中,我们遍历在图像中找到的所有轮廓,我们可以尝试找到相同图像的矩形绿色边界框。在语法的第三行,我们必须在绿色边界框上制作绿色矩形,最后,我们可以在语法的最后一行将图像保存在磁盘上。这些绿色矩形框将帮助你使用 Python 比较两个图像并突出显示差异。容易吧?从GITHUB克隆
python照片比对总结因此,这就是你可以使用 Python 比较两个图像并突出显示差异的方法。如果你们对此有任何问题/意见,请告诉我们。比较只是图像处理领域的第一步,你可以使用 OpenCV 实现更多目标。
推荐阅读
- python文字转图片(如何使用生成带有文本的图像())
- python文本转语音(如何将文本转换为音频?)
- python识别图片验证码(用于读取验证码的OCR模型)
- python识别图片中的数字(使用OpenCV进行数字识别)
- python识别图片文字(使用OpenCV和OCR进行文本检测和提取)
- 电脑连接旧路由Wi-Fi容易断线或超慢咋办!
- 内存买单条16G还是8Gx2?详解双通道内存的好处!
- 开机提示USB Device over current status Detected 故障
- 电脑网卡灯不亮的原因及处理技巧