简介

由于项目需要对比两张相同图片的相似度,因此采用opencv将图片转为灰阶数组,然后对比相应的数组来取相似度,此方法只适用于大小相同的图片,较为局限

# -*- coding: utf-8 -*-
import cv2
import os
# scikit-image
from skimage.metrics import structural_similarity as ssim class PictureSimilarity():
"""
Image cutting and image recognition
Parameters:
origin_img: 起始图片
compare_img: 需要对比的图片
start_x: 裁切的起始x轴
start_y: 裁切的起始y轴
end_x: 裁切的末尾x轴
end_y: 裁切的末尾y轴
"""
def __init__(self, origin_img, compare_img, start_y=None, end_y=None, start_x=None, end_x=None):
self.origin_img = origin_img[0]
self.compare_img = compare_img[0]
self.start_x = start_x
self.start_y = start_y
self.end_x = end_x
self.end_y = end_y def compute_Similarity(self):
try:
print(f"compute acquaintance")
image1 = cv2.imread(self.origin_img)
image2 = cv2.imread(self.compare_img)
if self.start_x is not None:
image1 = image1[int(self.start_y):int(self.end_y), int(self.start_x):int(self.end_x)]
cut_img = "{}_cut.png".format(os.path.splitext(self.origin_img)[0])
cv2.imwrite(cut_img, image1)
else:
image1 = image1
height1, wide1 = image1.shape[0:2]
if not height1 or not wide1:
print("Picture coordinate error, screenshot size cannot be zero")
if image1.shape != image2.shape:
print("Inconsistent picture size")
# 会强制拉伸图片
image2 = cv2.resize(image2, (image1.shape[1],image1.shape[0]))
resize_img = "{}_resize.png".format(os.path.splitext(self.compare_img)[0])
cv2.imwrite(resize_img, image2)
image1 = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
image2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)
acquaintance = ssim(image1, image2)
acquaintance = acquaintance*100
acquaintance = round(acquaintance, 2)
print(f"acquaintance is {acquaintance}")
return acquaintance
except Exception as e:
print(f"compute_Similarity error is {str(e)}") def compute_img(self):
Similarity = None
try:
print(f"start compute acquaintance")
print(self.origin_img)
if os.path.exists(self.origin_img) and os.path.exists(self.compare_img):
Similarity = self.compute_Similarity()
else:
print("content not exist")
except Exception as e:
print(f"compute_img error is {str(e)}")
finally:
return Similarity if __name__ == "__main__":
image_path1 = "/home/ts/workspace/image2_2.png",
image_path2 = "/home/ts/workspace/image2.png",
test = PictureSimilarity(image_path1, image_path2, 12,189,23,400)
result = test.compute_img()
print(result)

python opencv图像识别(相同大小图片)的更多相关文章

  1. OpenCV实现任意大小图片的合并(转)

    OpenCV实现图像合并主要有两种方法 方法一:使用Mat.push_back方法将列数相同的图像加到最后一行 方法二: 主要思路是将图像拷贝到待合并图像的感兴趣区域 (1)新建一个要合并的图像(容器 ...

  2. Python+opencv图像识别

    图像识别 最近工作遇到了一个需要识别安全键盘并点击的需求,做自动化嘛,由于安全键盘的键位固定但是键值随机,所以常规的方法不能正确获取触发点击,so,上网查了一下基本思路都是用机器识别. 加载openc ...

  3. Python+Opencv进行识别相似图片

    http://blog.csdn.net/feimengjuan/article/details/51279629

  4. python opencv show图片,debug技巧

    debug的时候可以直接把图片画出来debug. imshow函数就是python opencv的展示图片的函数,第一个是你要起的图片名,第二个是图片本身.waitKey函数是用来展示图片多久的,默认 ...

  5. python base64 编解码,转换成Opencv,PIL.Image图片格式

    二进制打开图片文件,base64编解码,转成Opencv格式: # coding: utf-8 import base64 import numpy as np import cv2 img_file ...

  6. Python + opencv 实现图片文字的分割

    实现步骤: 1.通过水平投影对图形进行水平分割,获取每一行的图像: 2.通过垂直投影对分割的每一行图像进行垂直分割,最终确定每一个字符的坐标位置,分割出每一个字符: 先简单介绍一下投影法:分别在水平和 ...

  7. Python OpenCV图片转视频 工具贴(三)

    Python OpenCV图片转视频 粘贴即用,注意使用时最好把自己的文件按照数字顺序命名.按照引导输入操作. # 一键傻瓜式引导图片串成视频 # 注意使用前最好把文件命名为数字顺序格式 import ...

  8. python中用opencv读取并显示图片

    一.读取并显示图片: import matplotlib.pyplot as plt # plt 用于显示图片 import matplotlib.image as mpimg # mpimg 用于读 ...

  9. Python+OpenCV图像处理(一)

    Python+OpenCV图像处理(一): 读取,写入和展示图片 调用摄像头拍照 调用摄像头录制视频 1. 读取.写入和展示图片 图像读入:cv2.imread() 使用函数cv2.imread() ...

随机推荐

  1. linux下虚拟环境venv的创建与使用以及virtualenvwrapper

    1.linux安装学习python虚拟环境 linux提供的虚拟环境工具 有virtualenv pipenv 2.我们需求是在linux上可以运行 一个django2 运行一个django1 3.安 ...

  2. Web Api源码(路由注册)

    这篇文章只是我学习Web API框架的输出,学习方法还是输出倒逼输入比较行得通,所以不管写的好不好,坚持下去,肯定有收获.篇幅比较长,仔细思考阅读下来大约需要几分钟. 做.NET开发有好几年时间了,从 ...

  3. 详细剖析pyecharts大屏的Page函数配置文件:chart_config.json

    目录 一.问题背景 二.揭开json文件神秘面纱 三.巧用json文件 四.关于Table图表 五.同步讲解视频 5.1 讲解json的视频 5.2 讲解全流程大屏的视频 5.3 讲解全流程大屏的文章 ...

  4. 830. Positions of Large Groups - LeetCode

    Question 830. Positions of Large Groups Solution 题目大意: 字符串按连续相同字符分组,超过3个就返回首字符和尾字符 思路 : 举例abcdddeeee ...

  5. 使用instanceof操作符判断对象类型及方法的重载

    学习内容: 一.使用instanceof操作符判断对象类型 1.instanceof操作符可以判断一个实例对象是否属于一个类. 语法:对象名 instanceof 类名 2.使用instanceof表 ...

  6. jQuery其他操作与bootstrap框架

    目录 标签操作 样式操作 位置操作 文本值操作 属性操作 文档处理 事件操作 常见事件 克隆案例 悬浮事件hover() 监听input输入值事件 阻止后续事件 事件委托 动画效果 bootstrap ...

  7. boost::bind 不能处理函数重载 (error: no matching function for call to 'bind')

    前言 最近任务多.工期紧,没有时间更新博客,就水一期吧.虽然是水,也不能太失水准,刚好最近工作中遇到一个 boost::bind 的问题,花费了半天时间来定位解决,就说说它吧. 问题背景 项目中使用了 ...

  8. MASA Auth - 从用户的角度看整体设计

    用户 在系统里,用户是一个核心概念.它代表了一个人的唯一身份标识,除了与角色.团队.组织架构等有关,甚至还会影响到在同一个界面不同的用户操作流程与显示内容都会发生变化,再复杂一点的话,或许在同一个系统 ...

  9. Cabloy-CMS中区块的开发与效果

    关于区块 Cabloy-CMS引入了区块的概念,通过区块可以快速向文章添加各种类型的内容,比如:插入一个地图子页面.插入一首音乐,等等 Cabloy-CMS中的区块可以类比于Wordpress古腾堡编 ...

  10. NB-IoT无线通信模块与Lora无线通信协议技术分析与前景展望

    物联网的快速发展对无线通信技术提出了更高的要求,专为低带宽.低功耗.远距离.大量连接的物联网应用而设计的LPWAN(low-power Wide-Area Network,低功耗广域网)也快速兴起.物 ...