我正在使用OpenCV-Python綁定來編寫我的圖像處理應用程序。我正在尋找一種方法來將圖像的關鍵點寫入到一個文件中,我們可以通過該文件找回匹配的目的。有一個在C/C++做這個代碼,但不能由使用pythonOpenCV-Python:找到將文件寫入文件的代碼
找到一種方法,這種請任何人對此有一個想法,請與我&我們所有的人分享
感謝
我正在使用OpenCV-Python綁定來編寫我的圖像處理應用程序。我正在尋找一種方法來將圖像的關鍵點寫入到一個文件中,我們可以通過該文件找回匹配的目的。有一個在C/C++做這個代碼,但不能由使用pythonOpenCV-Python:找到將文件寫入文件的代碼
找到一種方法,這種請任何人對此有一個想法,請與我&我們所有的人分享
感謝
這是你如何做到這一點,從我剛纔給的鏈接啓發。
保存的關鍵點在一個文件中的圖像中
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)
輸入圖像到第一個腳本
在第二腳本
爲此我建議使用Pickle或cPickle。它的簡單和對我來說,它在大多數情況下工作。一個簡短的介紹,你可以找到PyMOTW - Pickle。
要注意的是,您可以在文件中更多次地使用dump
,並且能夠爲每個dump
返回loads
。
編輯:如果您希望將數據保存到一個文件,這裏是一個簡短的片段:
import pickle
data = ['your stuff']
with open('fileNameToSave.ext', 'wb') as f:
pickle.dump(data, f, -1) # -1 for best compression available
如果您需要在數據如何存儲更多的控制,你可以使用Struct (PyMOTW)。 在這裏你可以完全控制,但如果內存有問題,你也必須自己壓縮數據。作爲回報,你可以控制字節順序,字節順序等。因此跨語言數據交換相對簡單。
希望我能幫助:)
我已經找到一種方法來做到這一點沒有「泡菜」顯示的圖像。
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)
這可能是有幫助的,http://stackoverflow.com/questions/10045363/pickling-cv2-keypoint-causes-picklingerror – bikz05 2014-10-22 06:41:35
感謝您的幫助。我會試試這個。 – 2014-10-22 06:57:08