简介

由于项目需要对比两张相同图片的相似度,因此采用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. Python-100-Days-master-第二周笔记

    python100day学习第二周 # 通过enumerate函数处理列表之后再遍历可以同时获得元素索引和值 list1 = [1, 3, 5, 7, 100] for index, elem in ...

  2. 【理论积累】C语言基础理论知识【第一版】

    第一个程序 #include <stdio.h> int main(){ printf("Hello World"); } 变量与常量 变量类型:整型[int].字符型 ...

  3. 群晖下 gitea+drone+harbor实现CI/CD 发布到云服务器

    常用命令 sudo -i然后输入密码登录root账户(群晖默认只能使用admin账号登陆) vim xxx编辑(编辑是进去之后按i,退出并保存是按esc,然后:wq!再回车) mkdir xx创建文件 ...

  4. CentOS删除编译安装的Python3

    编译安装Python3 # 下载 # wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tar.xz wget http://mirr ...

  5. 好客租房33-事件绑定this指向(总结)

    1推荐使用class的实例方法 //导入react import React from 'react'   import ReactDOM from 'react-dom' //导入组件   // 约 ...

  6. while和for循环的补充与数据类型的内置方法(int, float, str)

    目录 while与for循环的补充 while + else 死循环 while的嵌套 for补充 range函数 break与continue与else for循环的嵌套 数据类型的内置方法 int ...

  7. MySQL、SqlServer、Oracle,这三种数据库的优缺点,你知道吗?

    盘点MySQL.SqlServer.Oracle 三种数据库优缺点 MySQL SqlServer Oracle 一.MySQL 优 点 体积小.速度快.总体拥有成本低,开源:支持多种操作系统:是开源 ...

  8. 如何在Uniapp中访问CabloyJS后端API管理系统

    介绍 CabloyJS是一款免费开源的NodeJS全栈开发框架,采用前后端分离设计,具备开箱即用的后台管理系统 Cabloy-SDK是专门为Uniapp应用量身定制的前端SDK,用于便捷的访问Cabl ...

  9. python中f'{}'用法

    python3.6增加的方法,字符串定义以f开头,可以使用{}包裹变量,方便字符串的定义. 有些时候很懒,碰到写的比较清晰的就直接搬运:https://blog.csdn.net/weixin_387 ...

  10. 一文详解JackSon配置信息

    背景 1.1 问题 Spring Boot 在处理对象的序列化和反序列化时,默认使用框架自带的JackSon配置.使用框架默认的,通常会面临如下问题: Date返回日期格式(建议不使用Date,但老项 ...