Python学习笔记(六)

代码问题主要出自《Python 计算机视觉编程》

第一章

加载数据包问题

# from time import *
import time

# import matplotlib.pylab as plt
from matplotlib.pylab import *

注释掉的是一种组合加载方式,否则,就会报错。当然time只使用了一次,所以就直接加载time。而pylab使用很多,就写成 from matplotlib.pylab import *

这两个为啥会冲突呢? o(≧口≦)o!!

这个文章最后的推测我觉得很有道理。保持命名空间的方法,虽然繁琐,但是能够保证函数调用的单一指向,尤其能规避不同库中存在重名函数,导致调用出现偏移的情况。

第二章

需要使用PCV库里的函数,版本有问题,一直报错。其实可以换个思路,将需要的函数复制到我们的文件中,就不许要在import该文件了。

sift.exe调用问题

在需要调用外部可执行程序时,sift.exe调用完返回的文件时空的。所以后边读取时会报溢出错误。如下:
在这里插入图片描述
找到这片博客sift为空说是版本问题下下来试一下。

这个网站下载历史版本https://www.vlfeat.org/download/
我下了一个0.9.17版的试一下。
问题解决了!!! 乁( ˙ ω˙乁)

对桌同学出现了个问题,他系统使用的是位的,但是要下载32位的才能正常运行。

最近发现可能是路径斜杠的问题,我从电脑直接拷贝的路径为“D:\python\exercise_data\ComputerVision\ch02”
程序中 “\” 有转义字符的意思,还有系统更新部分会不会也有影响??对于路径斜杠的改变?
我改变路径斜杠就可以了,之前潜意识认为是相同的。

matplotlib打印title时正常显示中文

我打印图片时,中文title显示为方块。

import matplotlib.font_manager as fm

#定义字体模板
myfont=fm.FontProperties(fname='C:\Windows\Fonts\simsun.ttc') 

在文件最开始加上这两句,之后再在 title()函数中加上参数 fontproperties=myfont
如下:

title(' Harris 角点',fontproperties=myfont)

就能正常显示中文了! \(@^0^@)/
在这里插入图片描述

调用pydot时出现问题。

按照这个文章 匹配地理标记图像说的,操作之后,程序会报 [WinError 5] 错误。

问题定位到了这里

g.write_png(r'C:/hqq/document/python/computervision/ch02/test1.png')

网上说是要加完整的路径,但是我加了也是报错。

解决这个问题的关键在与:

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 = graphpath +str(i) + '.png'
                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 = graphpath + str(j) + '.png'
                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_png(r'test1.png')

上面代码中的save将图片存哪里了。

程序执行大致是这样的,我们程序调用了pydot.py库,使用了里面的函数。库里面的函数会去调用dot.exe这个可执行文件。dot.exe这个文件的地址在pydot.py中是有个默认值的,如果我们不去修改那就调用不到所以就会报错。

怎么修改呢?很简单,我们在运行这个程序之前是要先安装一下graphviz这个工具的。之后pydot.py调用的dot.exe就是这个工具带的。所以我们要把pydot.py中调用函数地址的默认值,设定为这个graphviz工具带的dot.exe的完整路径设。
在这里插入图片描述
这是要修改的第一个位置。
还有一个也不能说是修改,是要注意的是图片的路径选择
在这里插入图片描述
我是在红色和绿色两个框,框起来的 “ image = filename ” 犯错了。我多加了一个graphpath上去写成了 " image = graphpath + filename ",由于图片的存储位置不对,所以不报错,但输出一种是空的几个举证,没有图片。

我隐约感觉,如果程序在调用外部可执行文件时,关注点应该都是再那个被调用的可执行文件的地址,他是再什么时候,在哪里传递给程序的,这是关键。

python 对矩阵数据的存取

调试代码的时候,就是上面的pydot 匹配地理标记图像时遇到的。需要将匹配好的关系矩阵传递给打印图像的函数中去,这个矩阵能顺利输出,但是打印出现问题了。所以调试的时候很痛苦,就想着将矩阵保存,到时候直接读取,就能省时间。
如何实现呢?

import numpy as np
np.savetxt('data.txt',array)
dataset = np.loadtxt('data.txt')

这里数据时float型的所以有点小问题。

float这样搞:

with open(datapath, 'r') as f:
        
        numFeat = len(open(datapath).readline().split(','))
        for line in f.readlines():
            lineArr =[]
            curLine = line.strip().split(',')
            for i in range(numFeat):
                lineArr.append(float(curLine[i]))
            matchscores.append(lineArr)
    matchscores = array(matchscores)

就可以了。╰(°▽°)╯😊╰(°▽°)╯

savetxt(r'matchscoers.txt',matchscores,delimiter=',')

我存的时候定义的分割符是逗号,所以再切割文件时以“,”为切割标记。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值