Несовместимые типы данных с Python-OpenCV и срезом Numpy - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь рассчитать оптический поток некоторых точек, извлеченных с помощью openCv goodFeaturesToTrack. Функция calcOpticalFlowPyrLK прекрасно работает до тех пор, пока я отправляю ей точки, извлеченные непосредственно из goodFeaturesToTrack, или точки, измененные с помощью функции numpy. np.array_like и np.squeeze оба совместимы. Однако, если я отправляю эти точки из фрагмента массива float32, он зависает, и я получаю следующую ошибку:

error: OpenCV(4.1.0) D:\Build\OpenCV\opencv-4.1.0\modules\video\src\lkpyramid.cpp:1229: error: (-215:Assertion failed) (npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0 in function 'cv::`anonymous-namespace'::SparsePyrLKOpticalFlowImpl::calc'

Ниже приведен пример кода:

cap = cv2.VideoCapture(fname)
ret,frame = cap.read()
gr_img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
candidate_feats = cv2.goodFeaturesToTrack(  image = gr_img, 
                                            maxCorners = 5,
                                            qualityLevel = 0.3,
                                            minDistance = 7,
                                            mask = None, 
                                            blockSize = 7)   

pts_candidate = np.squeeze(candidate_feats, 1) #this one works fine
pts = np.zeros_like(pts_candidate) #this works fine too
pts = np.zeros(pts_candidate.shape, dtype=np.float32) #this one works
#the feature array from which I want to take a slice
feats = np.zeros([len(pts_candidate),13], dtype=np.float32)  
feats[:,6:8] = pts_candidate
pts = feats[:,6:8] #this one hangs
pts_candidate, st, err = cv2.calcOpticalFlowPyrLK(prevImg = gr_img, 
                                                   nextImg = gr_img, 
                                                   prevPts = pts, 
                                                   nextPts = None, 
                                                   winSize  = (15,15),
                                                   maxLevel = 2,
                                                   criteria = (cv2.TERM_CRITERIA_EPS | 
                                                               cv2.TERM_CRITERIA_COUNT, 
                                                               10, 0.03))   

Есть предложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...