我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用Opencv怎么判断颜色相似的图片

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用Opencv怎么判断颜色相似的图片

本篇文章给大家分享的是有关使用Opencv怎么判断颜色相似的图片,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

问题描述

有一个项目,大体是要判断一下一篇文章内的配图突不突兀。

素材准备

所以就从网上随便找了4张图:

使用Opencv怎么判断颜色相似的图片

可以看出,前3张图片从颜色上、从阅读感受上,应该是相似的,而最后一张应该是不同的。

而当我们只对图片做缩放(为了跑得快),然后用bgr通道出直方图算相似度时:

使用Opencv怎么判断颜色相似的图片

却发现,只有第一张和第二张图片的相似度是大于0.5的,而第二、三张,以及第三、四张图片之间的相似度几乎都小于等于0.1。

思考方法

于是,经过思考后我觉得,判断两张图片在颜色上相不相似,其本质在于判断其直方图分布的形状相不相似,而不应该考虑是偏左还是偏右、是偏亮还是偏暗。一个图像亮一点,但其实它们还是相似的。

基于这个思想,我先暴力的把BGR以及HLS,三个通道先相互独立的直接均衡化,验证了判断分布形状的可行性。但同时,发现相互独立的均衡化会导致对于不同图片的分辨能力降低。所以,由此推论出,应该是把亮度拉平均衡化,同时相关联的影响到其他通道的变化。

所以,最后想出的方案是:

  1. 先把图片缩放至统一大小,提升运算速度。

  2. 把图像从BGR通道转至HSV通道(经实验,HSV通道比HLS通道效果好)。

  3. 把HSV中的V(明度)进行均衡化(equalizeHist)。

  4. 再把图像从HSV通道转回BGR通道,从而达到在均衡亮度的同时影响其他通道的目的。

  5. 最后,利用BGR通道进行相似度计算,大于0.5的即可认为是相似。

测试结果

使用Opencv怎么判断颜色相似的图片

可以发现,经过处理后,第一、二张图片,以及第二、三张图片之间的相似度已经大于0.7,而第三、四张图片的相似度则只有0.4左右。已经达到了我们开始时的目标。

不足之处

  • 只对V通道的均衡进行了探寻,没有研究其他通道可能的关联。

  • 第三、四张图片经过处理后的相似度有点高,需要想办法降低。

代码

import cv2 as cvimport numpy as npfrom matplotlib import pyplot as pltdef create_rgb_hist(image):  """"创建 RGB 三通道直方图(直方图矩阵)"""  h, w, c = image.shape  # 创建一个(16*16*16,1)的初始矩阵,作为直方图矩阵  # 16*16*16的意思为三通道每通道有16个bins  rgbhist = np.zeros([16 * 16 * 16, 1], np.float32)  bsize = 256 / 16  for row in range(h):    for col in range(w):      b = image[row, col, 0]      g = image[row, col, 1]      r = image[row, col, 2]      # 人为构建直方图矩阵的索引,该索引是通过每一个像素点的三通道值进行构建      index = int(b / bsize) * 16 * 16 + int(g / bsize) * 16 + int(r / bsize)      # 该处形成的矩阵即为直方图矩阵      rgbhist[int(index), 0] += 1  plt.ylim([0, 10000])  plt.grid(color='r', linestyle='--', linewidth=0.5, alpha=0.3)  return rgbhistdef hist_compare(hist1, hist2):  """直方图比较函数"""  '''# 创建第一幅图的rgb三通道直方图(直方图矩阵)  hist1 = create_rgb_hist(image1)  # 创建第二幅图的rgb三通道直方图(直方图矩阵)  hist2 = create_rgb_hist(image2)'''  # 进行三种方式的直方图比较  match2 = cv.compareHist(hist1, hist2, cv.HISTCMP_BHATTACHARYYA)  match3 = cv.compareHist(hist1, hist2, cv.HISTCMP_CORREL)  match4 = cv.compareHist(hist1, hist2, cv.HISTCMP_CHISQR)  print("巴氏距离:%s, 相关性:%s, 卡方:%s" % (match2, match3, match4))def handle_img(img):  img = cv.resize(img, (100, 100))  img = cv.cvtColor(img, cv.COLOR_BGR2HSV)  img[:, :, 2] = cv.equalizeHist(img[:, :, 2])  img = cv.cvtColor(img, cv.COLOR_HSV2BGR)  return imgimg1 = cv.imread("1.jpg")img1 = handle_img(img1)cv.imshow("img1", img1)img2 = cv.imread("2.jpg")img2 = handle_img(img2)cv.imshow("img2", img2)img3 = cv.imread("3.jpg")img3 = handle_img(img3)cv.imshow("img3", img3)img4 = cv.imread("4.jpg")img4 = handle_img(img4)cv.imshow("img4", img4)hist1 = create_rgb_hist(img1)hist2 = create_rgb_hist(img2)hist3 = create_rgb_hist(img3)hist4 = create_rgb_hist(img4)plt.subplot(1, 4, 1)plt.title("hist1")plt.plot(hist1)plt.subplot(1, 4, 2)plt.title("hist2")plt.plot(hist2)plt.subplot(1, 4, 3)plt.title("hist3")plt.plot(hist3)plt.subplot(1, 4, 4)plt.title("hist4")plt.plot(hist4)hist_compare(hist1, hist2)hist_compare(hist2, hist3)hist_compare(hist3, hist4)plt.show()cv.waitKey(0)cv.destroyAllWindows()

以上就是使用Opencv怎么判断颜色相似的图片,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

使用Opencv怎么判断颜色相似的图片

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用Opencv怎么判断颜色相似的图片

本篇文章给大家分享的是有关使用Opencv怎么判断颜色相似的图片,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。问题描述有一个项目,大体是要判断一下一篇文章内的配图突不突兀。素材
2023-06-07

怎么在Python中使用Opencv识别相似的图片

这篇文章给大家介绍怎么在Python中使用Opencv识别相似的图片,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端开发,众多大型网站均
2023-06-14

怎么用opencv判断多种颜色小球的形状及位置

这篇文章主要介绍了怎么用opencv判断多种颜色小球的形状及位置的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用opencv判断多种颜色小球的形状及位置文章都会有所收获,下面我们一起来看看吧。一、openc
2023-07-04

怎么在Android中使用Drawable改变图片的颜色

今天就跟大家聊聊有关怎么在Android中使用Drawable改变图片的颜色,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.利用color资源对Drawable变色Drawable
2023-05-30

使用css3怎么给背景图片加颜色遮罩

这篇文章给大家介绍使用css3怎么给背景图片加颜色遮罩,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。方法一:通过定位叠加(注意层级)
2023-06-08

怎么使用python删除同一文件夹下相似的图片

小编给大家分享一下怎么使用python删除同一文件夹下相似的图片,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python有哪些常用库python常用的库:1.r
2023-06-14

教你怎么用python删除相似度高的图片

1. 前言 因为输入是视频,切完帧之后都是连续图片,所以我的目录结构如下:其中frame_output是视频切帧后的保存路径,1和2文件夹分别对应两个是视频切帧后的图片。 2. 切帧代码如下:#encoding:utf-8 import o
2022-06-02

使用OpenCV怎么删除图片中的阴影

这期内容当中小编将会给大家带来有关使用OpenCV怎么删除图片中的阴影,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。numpy的ndarray数组numpy是一个第三方的模块,用它我们可以很方便的处理多维
2023-06-14

怎么使用Node.js判断png图片是否存在透明像素

这篇文章主要介绍怎么使用Node.js判断png图片是否存在透明像素,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!背景png格式的图片存储空间会比jpg格式的图片大,但是png图片的质量明显更好。有时候并不需要图片的
2023-06-20

怎么在​python中使用id函数判断分片产生的列表

这篇文章将为大家详细讲解有关怎么在python中使用id函数判断分片产生的列表,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python主要应用领域有哪些1、云计算,典型应用OpenStac
2023-06-14

使用python怎么解决OpenCV在读取显示图片闪退的问题

使用python怎么解决OpenCV在读取显示图片闪退的问题?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。waitKey函数:用来等待按键,当用户按下按键后,该
2023-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录