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

Python圖片檢索之以圖搜圖

 更新時間:2021年05月31日 10:31:24   作者:代碼小白的成長  
由于很多論文里面的測試圖片沒有標(biāo)號,就不能確定它們是Testset數(shù)據(jù)集中哪幾張圖片.為了能解決這個問題,需要完成以圖片去搜索整個數(shù)據(jù)集文件目錄的任務(wù).本文有非常詳細(xì)的圖文示例,需要的朋友可以參考下

一、待搜索圖

在這里插入圖片描述

二、測試集

在這里插入圖片描述

三、new_similarity_compare.py

# -*- encoding=utf-8 -*-

from image_similarity_function import *
import os
import shutil

# 融合相似度閾值
threshold1 = 0.70
# 最終相似度較高判斷閾值
threshold2 = 0.95


# 融合函數(shù)計算圖片相似度
def calc_image_similarity(img1_path, img2_path):
    """
    :param img1_path: filepath+filename
    :param img2_path: filepath+filename
    :return: 圖片最終相似度
    """

    similary_ORB = float(ORB_img_similarity(img1_path, img2_path))
    similary_phash = float(phash_img_similarity(img1_path, img2_path))
    similary_hist = float(calc_similar_by_path(img1_path, img2_path))
    # 如果三種算法的相似度最大的那個大于0.7,則相似度取最大,否則,取最小。
    max_three_similarity = max(similary_ORB, similary_phash, similary_hist)
    min_three_similarity = min(similary_ORB, similary_phash, similary_hist)
    if max_three_similarity > threshold1:
        result = max_three_similarity
    else:
        result = min_three_similarity

    return round(result, 3)


if __name__ == '__main__':

    # 搜索文件夾
    filepath = r'D:\Dataset\cityscapes\leftImg8bit\val\frankfurt'

    #待查找文件夾
    searchpath = r'C:\Users\Administrator\Desktop\cityscapes_paper'

    # 相似圖片存放路徑
    newfilepath = r'C:\Users\Administrator\Desktop\result'

    for parent, dirnames, filenames in os.walk(searchpath):
        for srcfilename in filenames:
            img1_path = searchpath +"\\"+ srcfilename
            for parent, dirnames, filenames in os.walk(filepath):
                for i, filename in enumerate(filenames):
                    print("{}/{}: {} , {} ".format(i+1, len(filenames), srcfilename,filename))
                    img2_path = filepath + "\\" + filename
                    # 比較
                    kk = calc_image_similarity(img1_path, img2_path)
                    try:
                        if kk >= threshold2:
                            # 將兩張照片同時拷貝到指定目錄
                            shutil.copy(img2_path, os.path.join(newfilepath, srcfilename[:-4] + "_" + filename))
                    except Exception as e:
                        # print(e)
                        pass

四、image_similarity_function.py

# -*- encoding=utf-8 -*-

# 導(dǎo)入包
import cv2
from functools import reduce
from PIL import Image


# 計算兩個圖片相似度函數(shù)ORB算法
def ORB_img_similarity(img1_path, img2_path):
    """
    :param img1_path: 圖片1路徑
    :param img2_path: 圖片2路徑
    :return: 圖片相似度
    """
    try:
        # 讀取圖片
        img1 = cv2.imread(img1_path, cv2.IMREAD_GRAYSCALE)
        img2 = cv2.imread(img2_path, cv2.IMREAD_GRAYSCALE)

        # 初始化ORB檢測器
        orb = cv2.ORB_create()
        kp1, des1 = orb.detectAndCompute(img1, None)
        kp2, des2 = orb.detectAndCompute(img2, None)

        # 提取并計算特征點
        bf = cv2.BFMatcher(cv2.NORM_HAMMING)
        # knn篩選結(jié)果
        matches = bf.knnMatch(des1, trainDescriptors=des2, k=2)

        # 查看最大匹配點數(shù)目
        good = [m for (m, n) in matches if m.distance < 0.75 * n.distance]
        similary = len(good) / len(matches)
        return similary

    except:
        return '0'


# 計算圖片的局部哈希值--pHash
def phash(img):
    """
    :param img: 圖片
    :return: 返回圖片的局部hash值
    """
    img = img.resize((8, 8), Image.ANTIALIAS).convert('L')
    avg = reduce(lambda x, y: x + y, img.getdata()) / 64.
    hash_value = reduce(lambda x, y: x | (y[1] << y[0]), enumerate(map(lambda i: 0 if i < avg else 1, img.getdata())),
                        0)
    return hash_value


# 計算兩個圖片相似度函數(shù)局部敏感哈希算法
def phash_img_similarity(img1_path, img2_path):
    """
    :param img1_path: 圖片1路徑
    :param img2_path: 圖片2路徑
    :return: 圖片相似度
    """
    # 讀取圖片
    img1 = Image.open(img1_path)
    img2 = Image.open(img2_path)

    # 計算漢明距離
    distance = bin(phash(img1) ^ phash(img2)).count('1')
    similary = 1 - distance / max(len(bin(phash(img1))), len(bin(phash(img1))))
    return similary


# 直方圖計算圖片相似度算法
def make_regalur_image(img, size=(256, 256)):
    """我們有必要把所有的圖片都統(tǒng)一到特別的規(guī)格,在這里我選擇是的256x256的分辨率。"""
    return img.resize(size).convert('RGB')


def hist_similar(lh, rh):
    assert len(lh) == len(rh)
    return sum(1 - (0 if l == r else float(abs(l - r)) / max(l, r)) for l, r in zip(lh, rh)) / len(lh)


def calc_similar(li, ri):
    return sum(hist_similar(l.histogram(), r.histogram()) for l, r in zip(split_image(li), split_image(ri))) / 16.0


def calc_similar_by_path(lf, rf):
    li, ri = make_regalur_image(Image.open(lf)), make_regalur_image(Image.open(rf))
    return calc_similar(li, ri)


def split_image(img, part_size=(64, 64)):
    w, h = img.size
    pw, ph = part_size
    assert w % pw == h % ph == 0
    return [img.crop((i, j, i + pw, j + ph)).copy() for i in range(0, w, pw) \
            for j in range(0, h, ph)]

五、結(jié)果

在這里插入圖片描述

到此這篇關(guān)于Python圖片檢索之以圖搜圖的文章就介紹到這了,更多相關(guān)Python以圖搜圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python matplotlib工具欄源碼探析三之添加、刪除自定義工具項的案例詳解

    python matplotlib工具欄源碼探析三之添加、刪除自定義工具項的案例詳解

    這篇文章主要介紹了python matplotlib工具欄源碼探析三之添加、刪除自定義工具項的案例詳解,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Python curses內(nèi)置顏色用法實例

    Python curses內(nèi)置顏色用法實例

    在本篇文章里小編給大家整理的是一篇關(guān)于Python curses內(nèi)置顏色用法實例內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-06-06
  • Python實現(xiàn)新年愿望代碼雨效果

    Python實現(xiàn)新年愿望代碼雨效果

    新的一年又要來了,這篇文章主要為大家詳細(xì)介紹了如何利用Python實現(xiàn)新年愿望代碼雨的動畫效果。文中的示例代碼講解詳細(xì),感興趣的可以動手嘗試一下
    2023-01-01
  • Python selenium文件上傳下載功能代碼實例

    Python selenium文件上傳下載功能代碼實例

    這篇文章主要介紹了Python selenium文件上傳下載功能代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Python變量的作用域詳解

    Python變量的作用域詳解

    這篇文章主要為大家介紹了Python變量的作用域,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • 全網(wǎng)最詳細(xì)的PyCharm+Anaconda的安裝過程圖解

    全網(wǎng)最詳細(xì)的PyCharm+Anaconda的安裝過程圖解

    這篇文章主要介紹了全網(wǎng)最詳細(xì)的PyCharm+Anaconda的安裝過程圖解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Python決策樹和隨機森林算法實例詳解

    Python決策樹和隨機森林算法實例詳解

    這篇文章主要介紹了Python決策樹和隨機森林算法,集合實例形式詳細(xì)分析了決策樹和隨機森林算法的概念、原理及Python相關(guān)實現(xiàn)技巧與注意事項,需要的朋友可以參考下
    2018-01-01
  • 關(guān)于python中密碼加鹽的學(xué)習(xí)體會小結(jié)

    關(guān)于python中密碼加鹽的學(xué)習(xí)體會小結(jié)

    這篇文章主要介紹了關(guān)于python中密碼加鹽的學(xué)習(xí)體會小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 五分鐘學(xué)會怎么用python做一個簡單的貪吃蛇

    五分鐘學(xué)會怎么用python做一個簡單的貪吃蛇

    這篇文章主要介紹了五分鐘學(xué)會怎么用python做一個簡單的貪吃蛇,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • python opencv鼠標(biāo)事件實現(xiàn)畫框圈定目標(biāo)獲取坐標(biāo)信息

    python opencv鼠標(biāo)事件實現(xiàn)畫框圈定目標(biāo)獲取坐標(biāo)信息

    這篇文章主要為大家詳細(xì)介紹了python opencv鼠標(biāo)事件實現(xiàn)畫框圈定目標(biāo),獲取坐標(biāo)信息,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08

最新評論

来宾市| 泰和县| 化隆| 佛冈县| 沁源县| 六枝特区| 柘荣县| 竹溪县| 临武县| 石门县| 合肥市| 徐汇区| 三亚市| 天全县| 邵东县| 金湖县| 故城县| 克拉玛依市| 越西县| 惠东县| 公主岭市| 鸡东县| 台南县| 大悟县| 山西省| 鹤山市| 清水河县| 拜城县| 东阿县| 苗栗市| 东至县| 德昌县| 馆陶县| 旌德县| 博白县| 嘉峪关市| 阳朔县| 西乡县| 翁牛特旗| 荔浦县| 西宁市|