最近项目中需要实现两组图片对比,并能将两者的区别标识出来。

在网上搜索一大堆找到一篇大神的文章,最终实现该功能,在这里记录下:

想要实现此demo,首先我们得确保电脑上已安装 openCV 和 Python 两个工具以及scikit-image和imutils两个库:

安装方法,在这里不多说,我安装的是Python3.6 和openCV2,安装方法网上自行百度谷歌;

进入正题:

新建一个新的Python文件并命名为copmarePicture.py,写入下面的代码:

from skimage.measure import compare_ssim

#~ import skimage as ssim

import argparse

import imutils

import cv2

加载两张图片并将他们转换为灰度:

imageA = cv2.imread("D:/111test/111.png")

imageB = cv2.imread("D:/111test/444.png")

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 = cnts[0] if imutils.is_cv2() else cnts[1]

找到一系列区域,在区域周围放置矩形:

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 展现最终对比之后的图片, cv2.imwrite 保存最终的结果图片

cv2.imshow("Modified",imageB)

cv2.imwrite("haha2.png",imageB)

cv2.waitKey(0)

到这已经实现两张图片的对比并标识出不同。结果如下所示:(图1图2对比,图3为对标结果

以上这篇用openCV和Python 实现图片对比,并标识出不同点的方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

本文标题: 用openCV和Python 实现图片对比,并标识出不同点的方式

本文地址: http://www.cppcns.com/jiaoben/python/293870.html

python找图片不同_用openCV和Python 实现图片对比,并标识出不同点的方式相关推荐

  1. python人脸识别理论_使用OpenCV和Python进行人脸识别

    介绍 人脸识别是什么?或识别是什么?当你看到一个苹果时,你的大脑会立刻告诉你这是一个苹果.在这个过程中,你的大脑告诉你这是一个苹果水果,用简单的语言来说就是识别.那么什么是人脸识别呢?我肯定你猜对了. ...

  2. 使用opencv和python进行智能图像处理_使用OpenCV在Python中进行图像处理

    编辑推荐: 本文将先讨论一些图像处理,然后再继续介绍可以方便使用图像处理的不同应用程序/场景,希望对您的学习有所帮助. 本文来自于tecdat ,由火龙果软件Alice编辑.推荐. 介绍 在本教程中, ...

  3. python实现对数转换_利用opencv在python平台上实现二值变换,伽马变换,对数变换,补色变换等...

    如何用 opencv 在 python 平台上实现灰度图像的二值化,对数变换, ,伽马变换以及补色变 换.代码如下 import cv2 import copy import math import  ...

  4. python 摄像头录制帧率_基于opencv和python的可变帧速率IP摄像机视频记录

    首先,我想对我正在做的事情发表评论.在 我有一个IP摄像机通过一个带以太网线的路由器连接到我的网络(FOSCAM 9800p),我试图用RTSP协议录制一段视频.我未来的打算是用opencv在中间添加 ...

  5. opencv和python是什么关系_使用OpenCV和Python检测眼睛

    今天,我们将学习如何借助称为霍夫变换的技术来检测图像中的直线和圆. 什么是霍夫空间? 在开始对图像应用霍夫变换之前,我们需要了解霍夫空间是什么,我们将通过示例的方式来学习. 参数空间 当我们处理图像时 ...

  6. python找数字程序_程序以查找Python中从1到N的所有缺失数字

    假设我们有一个数字列表,称为大小为n的数字,其中列表中的所有数字都出现在间隔[1,n]中,某些元素可能出现两次,而另一些元素只能出现一次.我们必须从[1,n]中找到所有数字,以使它们不在列表中.我们必 ...

  7. python 检测图像圆弧_基于OpenCV和Python的图像圆弧检测

    尝试以下代码:它将检测所有圆.曲线和圆弧:int main() { //RANSAC //load edge image cv::Mat color = cv::imread("../cir ...

  8. 用openCV 和 Python 实现图片对比,并标识出不同点

    最近项目中需要实现两组图片对比,并能将两者的区别标识出来. 在网上搜索一大堆找到一篇大神的文章,最终实现该功能,在这里记录下: 想要实现此demo,首先我们得确保电脑上已安装 openCV 和 Pyt ...

  9. [python] 工作记录一、利用opencv,numpy旋转图片无黑边(轮子必须由我造!!!)

    [python] 工作记录一.利用opencv,numpy旋转图片无黑边(轮子必须由我造!!!) 1. 第三方库的安装 2. 程序目的 3. 图片理解 4. 编写代码 (1).旋转顺时针90° (2) ...

最新文章

  1. 【OpenCV 4开发详解】轮廓面积与长度
  2. halcon的算子清点:Chapter 7 :Image
  3. will not add file alias already exists in index(git上传代码出错)
  4. Qt QML页面翻转控件封装
  5. java反斜杠\的用法
  6. Docker系列之一:入门介绍
  7. 【Java】浅谈Java的I/O体系
  8. dede image.class.php,DEDE模板下载织梦DEDE 核心类TypeLink.class.php功能剖析
  9. 图的简单应用(C/C++实现)
  10. Win10如何关闭管理员权限运行
  11. [单片机框架][DFU] Dfu升级例子 带crc校验+超时机制+led指示灯+芯片加锁+芯片自擦
  12. GB28181协议视频流媒体平台中国标设备编号和通道国标编号标记唯一的摄像头|视频|镜头通道
  13. 浅聊矢量场 —— 3. 什么是旋度(Rotational Vector)
  14. 【Cocos2d-x游戏引擎开发笔记(13)】Tiled Map Editor(一)
  15. 自上而下解读ncnn系列(1):加载param模型和bin文件前向传播
  16. Kubernetes(k8s)快速入门和环境部署
  17. CSS @media - 手机和平板适配
  18. c语言设置单片机中断优先级,如何设置51单片机的中断优先级
  19. 忧郁的loli od链接爬取
  20. 新黑马头条项目经验(黑马)

热门文章

  1. java mvel_mvel java和脚本的融合 -- kkito的博客
  2. android开发界面 淡出,Android 界面淡出 淡入效果
  3. MogDB大对象LargeObject存取测试
  4. 构建数据库云管平台 实现数据价值最大化
  5. 一条SQL语句的千回百转
  6. 运维工程师要失业了?抛开噱头与调侃,闲聊我心中的运维!
  7. 520特辑丨码神VS爱神:盘点程序员的四大男友力,你偏爱哪一种?
  8. 搭建亿级时间线数据的监控系统,我有绝招!
  9. 【华为云技术分享】STM32L476移植华为LiteOS系列教程---开发前的准备 2
  10. 【华为云实战开发】2.Docker镜像部署怎么玩才酷炫?