我有一个包含~400点的图像。我一直在使用Simpleblob探测器找到关键点。然后我循环遍历所有关键点以找到每个关键点的中心(下面的代码)。这很有效,但我也对瞬间信息感兴趣,正如我想象的那样.pt只是平均与关键点相关的所有像素的位置。
import cv2
import numpy as np
import csv
im = cv2.imread("8f3secshim.bmp", cv2.IMREAD_GRAYSCALE)
detector = cv2.SimpleBlobDetector_create()
keypoints = detector.detect(im)
im_with_keypoints = cv2.drawKeypoints(im, keypoints, np.array([]),
(0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imshow("Keypoints", im_with_keypoints)
x = np.empty([len(keypoints), 2])
for i in range(len(keypoints)):
x[i] = keypoints[i].pt
我想按照以下方式做点什么:
M = np.empty([lens(keypoints), 1])
for j in range(len(keypoints)):
M[j] = cv2.moments(keypoints[j])
但它失败了。
我已经尝试放弃Simpledetector,并在此处列出的时刻使用治疗http://docs.opencv.org/trunk/dd/d49/tutorial_py_contour_features.html ,但那也失败了。
如果有人有任何建议,我们将不胜感激。
答案 0 :(得分:0)
我似乎错误地提出了我的问题。如果有人想要找到与给定图像中找到的单个对象相关联的时刻,则可以使用以下代码。
import cv2
import numpy as np
img = cv2.imread('8f3secshim.bmp',0)
ret,thresh = cv2.threshold(img,127,255,0)
im2,contours,hierarchy = cv2.findContours(thresh, 1, 2)
print(len(contours))
a = np.empty([len(contours), 1])
cx = np.empty([len(contours), 1])
cy = np.empty([len(contours), 1])
for i in range(0, len(contours)):
Mi = cv2.moments(contours[i])
#if any m00 moment is equal to zero the code can not be completed...
if Mi['m00'] != 0:
cx[i]= Mi['m10']/Mi['m00']
cy[i]= Mi['m01']/Mi['m00']
a[i] = cv2.contourArea(contours[i])
x = np.hstack((cx, cy, a))
#x is a len(contours), 3 matrix.
我确信可能有一种更优雅的方式来做到这一点,但这很有效。