Python学习笔记(六)

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

第一章

加载数据包问题


import time

from matplotlib.pylab import *

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

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

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

第二章

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

sift.exe调用问题

在需要调用外部可执行程序时,sift.exe调用完返回的文件时空的。所以后边读取时会报溢出错误。如下:

Python学习笔记(六)
找到这片博客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^@)/

Python学习笔记(六)

调用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:

                im = Image.open(imlist[i])
                im.thumbnail((100, 100))
                filename = graphpath +str(i) + '.png'
                im.save(filename)
                g.add_node(pydot.Node(str(i), fontcolor='transparent', shape='rectangle', image= filename))

                im = Image.open(imlist[j])
                im.thumbnail((100, 100))
                filename = graphpath + str(j) + '.png'
                im.save(filename)
                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的完整路径设。

Python学习笔记(六)
这是要修改的第一个位置。
还有一个也不能说是修改,是要注意的是图片的路径选择
Python学习笔记(六)
我是在红色和绿色两个框,框起来的 ” 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=',')

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

Original: https://blog.csdn.net/qq_35021992/article/details/126942460
Author: 书生丶丶
Title: Python学习笔记(六)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/769422/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球