最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Opencv判斷顏色相似的圖片示例代碼

 更新時(shí)間:2021年03月05日 12:00:43   作者:zhangsheng377  
這篇文章主要介紹了Opencv判斷顏色相似的圖片示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

問題描述

有一個(gè)項(xiàng)目,大體是要判斷一下一篇文章內(nèi)的配圖突不突兀。

素材準(zhǔn)備

所以就從網(wǎng)上隨便找了4張圖:

可以看出,前3張圖片從顏色上、從閱讀感受上,應(yīng)該是相似的,而最后一張應(yīng)該是不同的。

而當(dāng)我們只對(duì)圖片做縮放(為了跑得快),然后用bgr通道出直方圖算相似度時(shí):

卻發(fā)現(xiàn),只有第一張和第二張圖片的相似度是大于0.5的,而第二、三張,以及第三、四張圖片之間的相似度幾乎都小于等于0.1。

思考方法

于是,經(jīng)過思考后我覺得,判斷兩張圖片在顏色上相不相似,其本質(zhì)在于判斷其直方圖分布的形狀相不相似,而不應(yīng)該考慮是偏左還是偏右、是偏亮還是偏暗。一個(gè)圖像亮一點(diǎn),但其實(shí)它們還是相似的。

基于這個(gè)思想,我先暴力的把BGR以及HLS,三個(gè)通道先相互獨(dú)立的直接均衡化,驗(yàn)證了判斷分布形狀的可行性。但同時(shí),發(fā)現(xiàn)相互獨(dú)立的均衡化會(huì)導(dǎo)致對(duì)于不同圖片的分辨能力降低。所以,由此推論出,應(yīng)該是把亮度拉平均衡化,同時(shí)相關(guān)聯(lián)的影響到其他通道的變化。

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

  1. 先把圖片縮放至統(tǒng)一大小,提升運(yùn)算速度。
  2. 把圖像從BGR通道轉(zhuǎn)至HSV通道(經(jīng)實(shí)驗(yàn),HSV通道比HLS通道效果好)。
  3. 把HSV中的V(明度)進(jìn)行均衡化(equalizeHist)。
  4. 再把圖像從HSV通道轉(zhuǎn)回BGR通道,從而達(dá)到在均衡亮度的同時(shí)影響其他通道的目的。
  5. 最后,利用BGR通道進(jìn)行相似度計(jì)算,大于0.5的即可認(rèn)為是相似。

測(cè)試結(jié)果

可以發(fā)現(xiàn),經(jīng)過處理后,第一、二張圖片,以及第二、三張圖片之間的相似度已經(jīng)大于0.7,而第三、四張圖片的相似度則只有0.4左右。已經(jīng)達(dá)到了我們開始時(shí)的目標(biāo)。

不足之處

  • 只對(duì)V通道的均衡進(jìn)行了探尋,沒有研究其他通道可能的關(guān)聯(lián)。
  • 第三、四張圖片經(jīng)過處理后的相似度有點(diǎn)高,需要想辦法降低。

代碼

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt


def create_rgb_hist(image):
  """"創(chuàng)建 RGB 三通道直方圖(直方圖矩陣)"""
  h, w, c = image.shape
  # 創(chuàng)建一個(gè)(16*16*16,1)的初始矩陣,作為直方圖矩陣
  # 16*16*16的意思為三通道每通道有16個(gè)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]
      # 人為構(gòu)建直方圖矩陣的索引,該索引是通過每一個(gè)像素點(diǎn)的三通道值進(jìn)行構(gòu)建
      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 rgbhist


def hist_compare(hist1, hist2):
  """直方圖比較函數(shù)"""
  '''# 創(chuàng)建第一幅圖的rgb三通道直方圖(直方圖矩陣)
  hist1 = create_rgb_hist(image1)
  # 創(chuàng)建第二幅圖的rgb三通道直方圖(直方圖矩陣)
  hist2 = create_rgb_hist(image2)'''
  # 進(jìn)行三種方式的直方圖比較
  match1 = cv.compareHist(hist1, hist2, cv.HISTCMP_BHATTACHARYYA)
  match2 = cv.compareHist(hist1, hist2, cv.HISTCMP_CORREL)
  match3 = cv.compareHist(hist1, hist2, cv.HISTCMP_CHISQR)
  print("巴氏距離:%s, 相關(guān)性:%s, 卡方:%s" % (match1, match2, match3))


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 img


img1 = 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()

到此這篇關(guān)于Opencv判斷顏色相似的圖片示例代碼的文章就介紹到這了,更多相關(guān)Opencv判斷相似圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python提取log文件內(nèi)容并畫出圖表

    python提取log文件內(nèi)容并畫出圖表

    這篇文章主要介紹了python提取log文件內(nèi)容并畫出圖表,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Django項(xiàng)目如何配置Memcached和Redis緩存?選擇哪個(gè)更有優(yōu)勢(shì)?

    Django項(xiàng)目如何配置Memcached和Redis緩存?選擇哪個(gè)更有優(yōu)勢(shì)?

    這篇文章主要介紹了Django項(xiàng)目如何配置Memcached和Redis緩存,幫助大家更好的理解和學(xué)習(xí)使用django框架,感興趣的朋友可以了解下
    2021-04-04
  • python字典遍歷數(shù)據(jù)的具體做法

    python字典遍歷數(shù)據(jù)的具體做法

    在本篇文章里小編給大家整理了一篇關(guān)于python字典遍歷數(shù)據(jù)的具體做法及相關(guān)代碼,有需要的朋友們可以跟著學(xué)習(xí)下。
    2021-07-07
  • Python編程之黑板上排列組合,你舍得解開嗎

    Python編程之黑板上排列組合,你舍得解開嗎

    這篇文章主要介紹了Python排列組合算法的相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • OpenCV圖像變換之傅里葉變換的一些應(yīng)用

    OpenCV圖像變換之傅里葉變換的一些應(yīng)用

    這篇文章主要給大家介紹了關(guān)于OpenCV圖像變換之傅里葉變換的相關(guān)資料,傅里葉變換可以將一幅圖片分解為正弦和余弦兩個(gè)分量,換而言之,他可以將一幅圖像從其空間域(spatial domain)轉(zhuǎn)換為頻域(frequency domain),需要的朋友可以參考下
    2021-07-07
  • python爬蟲判斷招聘信息是否存在的實(shí)例代碼

    python爬蟲判斷招聘信息是否存在的實(shí)例代碼

    在本篇文章里小編給大家整理的是一篇關(guān)于python爬蟲判斷招聘信息是否存在的實(shí)例代碼,有興趣的朋友們可以學(xué)習(xí)下。
    2020-11-11
  • python之隨機(jī)數(shù)函數(shù)的實(shí)現(xiàn)示例

    python之隨機(jī)數(shù)函數(shù)的實(shí)現(xiàn)示例

    這篇文章主要介紹了python之隨機(jī)數(shù)函數(shù)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Python3多線程詳解

    Python3多線程詳解

    使用多線程,可以同時(shí)進(jìn)行多項(xiàng)任務(wù),可以使用戶界面更友好,還可以后臺(tái)執(zhí)行某些用時(shí)長(zhǎng)的任務(wù),同時(shí)具有易于通信的優(yōu)點(diǎn)。python3中多線程的實(shí)現(xiàn)使用了threading模塊,它允許同一進(jìn)程中運(yùn)行多個(gè)線程,本文介紹的非常詳細(xì),,需要的朋友可以參考下
    2023-05-05
  • 基于Python編寫一個(gè)自動(dòng)關(guān)機(jī)程序

    基于Python編寫一個(gè)自動(dòng)關(guān)機(jī)程序

    這篇文章主要介紹了基于Python編寫的一個(gè)自動(dòng)關(guān)機(jī)程序,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,感興趣的同學(xué)可以學(xué)習(xí)一下
    2022-01-01
  • python django生成遷移文件的實(shí)例

    python django生成遷移文件的實(shí)例

    今天小編就為大家分享一篇python django生成遷移文件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08

最新評(píng)論

黔江区| 延吉市| 镇雄县| 永顺县| 根河市| 杭锦旗| 铜山县| 巴林左旗| 千阳县| 顺义区| 琼结县| 石渠县| 高安市| 岢岚县| 钦州市| 湖口县| 阿尔山市| 黄龙县| 田林县| 蓬莱市| 石楼县| 平凉市| 信宜市| 苍南县| 本溪| 石棉县| 赤壁市| 乐亭县| 文登市| 临颍县| 栾城县| 泗阳县| 刚察县| 黑河市| 剑河县| 运城市| 上饶县| 会东县| 文安县| 文水县| 临安市|