匹配地理标记图像

本文介绍了如何在Anaconda环境下安装配置Graphviz和pydot,用于匹配地理标记图像。安装过程中,首先通过Anaconda Prompt安装Graphviz,接着添加环境变量,并确保图像尺寸一致以避免运行时间过长。在解决问题‘OSError:sift not found’时,提供了参考链接。
摘要由CSDN通过智能技术生成

匹配地理标记图像

1、安装配置Graphviz和pydot
anaconda3安装graphciz,通过打开Prompt直接输入pip install graphviz就下载好了。
在这里插入图片描述
然后安装Graphviz,在anaconda首页Open terminal->在这里插入图片描述
在终端输入conda install graphviz,proceed选择y(yes)->在这里插入图片描述
添加环境变量:找到Graphviz的安装路径,然后添加到环境变量(右键此电脑->属性->高级系统设置),我的是D:\anaconda3\Library\bin\graphviz然后重启anaconda。
在这里插入图片描述
安装和配置环境完成以后要安装pydot,直接用pip install pydot安装。
在这里插入图片描述
匹配地理标记图像
图像太大会导致运行时间很长,图片大小要一致,自己随手拍的图片,全都用ps修成了200*300像素。
代码如下:

# -*- coding: utf-8 -*-
import json
import os
import urllib
from pylab import *
from PIL import Image
from PCV.localdescriptors import sift
from PCV.tools import imtools
import pydot

if __name__ == '__main__':
    download_path = "D:\Desktop\desk"
    path = "D:\Desktop\desk"

    imlist = imtools.get_imlist(download_path)
    nbr_images = len(imlist)

    featlist = [imname[:-3] + 'sift' for imname in imlist]
    for i, imname in enumerate(imlist):
        sift.process_image(imname, featlist[i])

    matchscores = zeros((nbr_images, nbr_images))

    for i in range(nbr_images):
        for j in range(i, nbr_images):  # only compute upper triangle
            print('comparing ', imlist[i], imlist[j])
            l1, d1 = sift.read_features_from_file(featlist[i])
            l2, d2 = sift.read_features_from_file(featlist[j])
            matches = sift.match_twosided(d1, d2)
            nbr_matches = sum(matches > 0)
            print('number of matches = ', nbr_matches)
            matchscores[i, j] = nbr_matches

    # copy values
    for i in range(nbr_images):
        for j in range(i + 1, nbr_images):  # no need to copy diagonal
            matchscores[j, i] = matchscores[i, j]

    # 可视化

    threshold = 2  # min number of matches needed to create link

    g = pydot.Dot(graph_type='graph')  # don't want the default directed graph

    for i in range(nbr_images):
        for j in range(i + 1, nbr_images):
            if matchscores[i, j] > threshold:
                # first image in pair
                im = Image.open(imlist[i])
                im.thumbnail((100, 100))
                filename = path + str(i) + '.jpg'
                im.save(filename)  # need temporary files of the right size
                g.add_node(pydot.Node(str(i), fontcolor='transparent', shape='rectangle', image=filename))

                # second image in pair
                im = Image.open(imlist[j])
                im.thumbnail((100, 100))
                filename = path + str(j) + '.jpg'
                im.save(filename)  # need temporary files of the right size
                g.add_node(pydot.Node(str(j), fontcolor='transparent', shape='rectangle', image=filename))

                g.add_edge(pydot.Edge(str(i), str(j)))
    g.write_jpg('congcong2.jpg')

中间出现了 OSError:sift not found 问题,解决办法参考:
添加链接描述
添加链接描述
运行结果:
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值