python opencv图像识别(相同大小图片)
简介
由于项目需要对比两张相同图片的相似度,因此采用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图像识别(相同大小图片)的更多相关文章
- OpenCV实现任意大小图片的合并(转)
OpenCV实现图像合并主要有两种方法 方法一:使用Mat.push_back方法将列数相同的图像加到最后一行 方法二: 主要思路是将图像拷贝到待合并图像的感兴趣区域 (1)新建一个要合并的图像(容器 ...
- Python+opencv图像识别
图像识别 最近工作遇到了一个需要识别安全键盘并点击的需求,做自动化嘛,由于安全键盘的键位固定但是键值随机,所以常规的方法不能正确获取触发点击,so,上网查了一下基本思路都是用机器识别. 加载openc ...
- Python+Opencv进行识别相似图片
http://blog.csdn.net/feimengjuan/article/details/51279629
- python opencv show图片,debug技巧
debug的时候可以直接把图片画出来debug. imshow函数就是python opencv的展示图片的函数,第一个是你要起的图片名,第二个是图片本身.waitKey函数是用来展示图片多久的,默认 ...
- python base64 编解码,转换成Opencv,PIL.Image图片格式
二进制打开图片文件,base64编解码,转成Opencv格式: # coding: utf-8 import base64 import numpy as np import cv2 img_file ...
- Python + opencv 实现图片文字的分割
实现步骤: 1.通过水平投影对图形进行水平分割,获取每一行的图像: 2.通过垂直投影对分割的每一行图像进行垂直分割,最终确定每一个字符的坐标位置,分割出每一个字符: 先简单介绍一下投影法:分别在水平和 ...
- Python OpenCV图片转视频 工具贴(三)
Python OpenCV图片转视频 粘贴即用,注意使用时最好把自己的文件按照数字顺序命名.按照引导输入操作. # 一键傻瓜式引导图片串成视频 # 注意使用前最好把文件命名为数字顺序格式 import ...
- python中用opencv读取并显示图片
一.读取并显示图片: import matplotlib.pyplot as plt # plt 用于显示图片 import matplotlib.image as mpimg # mpimg 用于读 ...
- Python+OpenCV图像处理(一)
Python+OpenCV图像处理(一): 读取,写入和展示图片 调用摄像头拍照 调用摄像头录制视频 1. 读取.写入和展示图片 图像读入:cv2.imread() 使用函数cv2.imread() ...
随机推荐
- 如何使用Docker构建前端项目
原文链接 Docker单独部署前端项目和Node项目是非常便捷的,在这里分享一下Docker的使用,主要聊聊它的部署实践.(我是window10专业版安装Docker) Docker Docker是一 ...
- numpy学习笔记Ⅰ
一直被numpy和matplotlib困扰,打算好好学习一下,也是从自己的观点,学对自己帮助最大的部分 主要参考<https: www.runoob.com="" numpy ...
- 思科,华为l2tp组网,家庭宽带,公司内网数据分离
拓扑 简介 办公网使用专线接入,拥有固定IP地址,网络出口使用防火墙做NAT,下联交换机接入服务器,办公电脑等,旁挂思科路由器做L2TP LNS 家庭宽带使用ADSL线路,华为路由器做拨号设备与DHC ...
- Python技法:浮点数取整、格式化和NaN处理
1. 取整的三种方法 1.1 强转int类型 这种方法会直接对浮点数的小数部分进行截断(无论是正还是负). print(int(2.7)) # 2 print(int(-2.7)) # -2 1.2 ...
- 用树莓派USB摄像头做个监控
[前言] 看着阴暗的角落里吃灰噎到嗓子眼的树莓派,一起陪伴的时光历历在目,往事逐渐涌上心头,每每触及此处,内心总会升腾起阵阵怜悯之情... 我这有两个设备,一个是积灰已久的树莓派,另一个是积灰已久的U ...
- mybatis中返回一个List字段
目的:在一个查询接口里面,返回一个人的信息,以及这个人所携带的东西的信息,返回效果如下: { "msg": { "listMain": [ { "id ...
- iphone苹果手机拼健康码行程码教程
因为疫情原因,不管是上班,还是上学,各公司和学校都要求提供全家人的健康码和行程码,并弄成一张拼图,这样方便统计!这就苦了广大用苹果手机的朋友们了,因为苹果手机没有自带的拼图软件. 下面我就教大家一个非 ...
- 部署ASP.NET Core最简单的办法,使用IIS部署ASP.NET Core应用
本文迁移自Panda666原博客,原发布时间:2021年3月28日.写原文的时候.NET的最新版本是5.0,现在7的preview出来了,时间真快啊.抽空再写个在Windows Server Core ...
- 理论+案例,带你掌握Angular依赖注入模式的应用
摘要:介绍了Angular中依赖注入是如何查找依赖,如何配置提供商,如何用限定和过滤作用的装饰器拿到想要的实例,进一步通过N个案例分析如何结合依赖注入的知识点来解决开发编程中会遇到的问题. 本文分享自 ...
- 教你用VS code 生成vue-cli代码片段
可以自定义设置名字:name.json { "Print to console": { "prefix": "vue", "bod ...