找出两幅图像中不同的地方,并在不同处用方框标出要求:对两幅找茬图像进行对比,找出图像中不同的地方,并在不同处用方框标出。

选题(2

47 找出两幅图像中不同的地方,并在不同处用方框标出

要求:对两幅找茬图像进行对比,找出图像中不同的地方,并在不同处用方框标出。

试验图片

          

参考步骤:

  1. 对左右两幅图像进行帧相减
  2. 统计不同处的个数、位置坐标以及不同区域的大小
  3. 在所有不同区域按照目标大小向外扩5个像素的地方用红色线画出方框
  4. 不同方法图像融合的比较

解:

使用Python代码解决问题,使用OpenCV实现上述需求。该代码将对比两幅图像,找出它们之间的不同之处,并在不同区域周围画出红色的方框,同时统计不同区域的个数、位置坐标和大小。

请确保你的计算机上已安装OpenCV库。如果没有安装,可以使用以下命令进行安装:

pip install opencv-python
import cv2
import numpy as np

# 读取两幅待比较的图像
image1 = cv2.imread('image1.jpg')
image2 = cv2.imread('image2.jpg')

# 确保两幅图像具有相同的尺寸
if image1.shape != image2.shape:
    print("Error: Images must have the same dimensions.")
    exit()

# 将图像转换为灰度图
gray1 = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)

# 计算图像的绝对差异
diff = cv2.absdiff(gray1, gray2)

# 二值化差异图像
_, thresh = cv2.threshold(diff, 30, 255, cv2.THRESH_BINARY)

# 扩大二值化图像以填补孔洞
thresh = cv2.dilate(thresh, None, iterations=2)

# 查找轮廓
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 统计不同区域的个数和大小,并在原图中绘制方框
num_differences = 0
regions = []

for contour in contours:
    area = cv2.contourArea(contour)
    if area > 500:  # 过滤小区域
        x, y, w, h = cv2.boundingRect(contour)
        cv2.rectangle(image1, (x - 5, y - 5), (x + w + 5, y + h + 5), (0, 0, 255), 2)  # 红色方框
        regions.append((x, y, w, h, area))
        num_differences += 1

# 输出结果
print(f'发现 {num_differences} 个不同区域。')
for region in regions:
    x, y, w, h, area = region
    print(f'区域位置: ({x}, {y}), 大小: {w}x{h}, 面积: {area}')

# 显示结果图像
cv2.imshow("Differences", image1)
cv2.imshow("Threshold", thresh)

# 按任意键退出
cv2.waitKey(0)
cv2.destroyAllWindows()

代码说明

  1. 读取图像: 代码将两幅待比较的图像加载到内存中并确保它们的尺寸相同。
  2. 灰度转换: 将图像转换为灰度图,以便后续处理。
  3. 计算差异: 通过逐像素计算绝对差异,得到一幅显示两幅图像不同之处的差异图。
  4. 二值化: 对差异图进行二值化处理,以突出显示不同的地方。
  5. 膨胀处理: 使用dilate扩大二值化后的图像,填补孔洞。
  6. 轮廓检测: 使用findContours检测不同区域的轮廓,并计算每个区域的面积。
  7. 绘制方框: 对于足够大的不同区域,在图像上绘制红色方框,方框的大小扩展了5个像素。
  8. 统计和输出: 输出不同区域的数量、位置和大小。
  9. 显示结果: 使用OpenCV的imshow展示带有标记的图像和二值化的差异图。

注意事项

  • 请确保图像路径和文件名正确。
  • 根据需要调整二值化阈值和面积过滤条件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值