OpenCV-Python:找到将键盘写入文件的代码

时间:2014-10-22 06:03:36

标签: python opencv

我正在使用OpenCV-Python绑定来编写我的图像处理应用程序。我正在寻找一种方法将图像的关键点写入文件中,我们可以将其返回以进行匹配。 C / C ++中有代码可以做到这一点,但是使用python

找不到相应的方法

请有人对此有所了解,请与我分享&我们所有人

由于

3 个答案:

答案 0 :(得分:6)

这是你如何做到这一点,灵感来自我之前给出的链接。

将关键点保存在文件中

import cv2
import cPickle

im=cv2.imread("/home/bikz05/Desktop/dataset/checkered-3.jpg")
gr=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
d=cv2.FeatureDetector_create("SIFT")
kp=d.detect(gr)

index = []
for point in kp:
    temp = (point.pt, point.size, point.angle, point.response, point.octave, 
        point.class_id) 
    index.append(temp)

# Dump the keypoints
f = open("/home/bikz05/Desktop/dataset/keypoints.txt", "w")
f.write(cPickle.dumps(index))
f.close()

在图片中加载和显示关键点

import cv2
import cPickle

im=cv2.imread("/home/bikz05/Desktop/dataset/checkered-3.jpg")

index = cPickle.loads(open("/home/bikz05/Desktop/dataset/keypoints.txt").read())

kp = []

for point in index:
    temp = cv2.KeyPoint(x=point[0][0],y=point[0][1],_size=point[1], _angle=point[2], 
                            _response=point[3], _octave=point[4], _class_id=point[5]) 
    kp.append(temp)

# Draw the keypoints
imm=cv2.drawKeypoints(im, kp);
cv2.imshow("Image", imm);
cv2.waitKey(0)

输入图像到第一个脚本

enter image description here

在第二个脚本中显示图像

enter image description here

答案 1 :(得分:2)

为此,我建议使用Pickle或cPickle。它很简单,对我来说它适用于大多数情况。您可以在PyMOTW - Pickle找到简短的介绍。

要注意的是,您可以在文件中dump次多次,并且能够使用loads为每个dump获取数据。

编辑:如果您希望将数据保存到文件中,这里有一个简短的片段:

import pickle

data = ['your stuff']

with open('fileNameToSave.ext', 'wb') as f:
    pickle.dump(data, f, -1)  # -1 for best compression available

如果您需要更多地控制数据的存储方式,可以使用Struct (PyMOTW)。 在这里你可以完全控制,但如果记忆很重要,你也必须自己压缩数据。作为回报,您可以控制Endianness(字节顺序),填充等。因此跨语言数据交换相对简单。

希望我能提供帮助:)

答案 2 :(得分:0)

我找到了一种没有" pickle"的方法。

  import cv2

  img1 = cv2.imread("bat1.jpg")
  gr_img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
  sift = cv2.SIFT()
  kps = sift.detect(gr_img1)
  f = open("bat_dump.txt", "w")

  for point in kps:
    p = str(point.pt[0]) + "," + str(point.pt[1]) + "," + str(point.size) + "," + str(point.angle) + "," + str(
    point.response) + "," + str(point.octave) + "," + str(point.class_id) + "\n"
    f.write(p)

  f.close()

  kps = []
  lines = [line.strip() for line in open('bat_dump.txt')]

  for line in lines:
    list = line.split(',')
    kp = cv2.KeyPoint(x=float(list[0]), y=float(list[1]), _size=float(list[2]), _angle=float(list[3]),
                  _response=float(list[4]), _octave=int(list[5]), _class_id=int(list[6]))
    kps.append(kp)

  img2 = cv2.imread("bat1.jpg") 
  img2 = cv2.drawKeypoints(img2, kps)
  cv2.imshow("img2", img2)
  cv2.waitKey(0)