|
9 | 9 | np.set_printoptions(precision=5,suppress=True)
|
10 | 10 | import cv2
|
11 | 11 | import time
|
| 12 | +from packaging import version |
12 | 13 | #from matlab_imresize.imresize import imresize
|
13 | 14 | #from scipy.ndimage import convolve
|
14 | 15 |
|
| 16 | +OPENCV_NEWER_THAN_4_5_2 = version.parse(cv2.__version__) > version.parse('4.5.2') |
| 17 | + |
15 | 18 | # Inheriting from opencv class causes segfaults
|
16 | 19 | #class MultiHarrisZernike (cv2.Feature2D):
|
17 | 20 | class MultiHarrisZernike:
|
@@ -589,8 +592,13 @@ def FtDict2KeypointList(self, Ft, alpha):
|
589 | 592 | response = float(res)
|
590 | 593 | octave = int(sc)
|
591 | 594 | size = float(self.zrad*(octave+1)*2)
|
592 |
| - keypoints.append(cv2.KeyPoint(pt_x, pt_y, size, _angle=angle, |
593 |
| - _response=response, _octave=octave)) |
| 595 | + |
| 596 | + if OPENCV_NEWER_THAN_4_5_2: |
| 597 | + keypoints.append(cv2.KeyPoint(x=pt_x, y=pt_y, size=size, angle=angle, |
| 598 | + response=response, octave=octave)) |
| 599 | + else: |
| 600 | + keypoints.append(cv2.KeyPoint(pt_x, pt_y, size, _angle=angle, |
| 601 | + _response=response, _octave=octave)) |
594 | 602 | return keypoints
|
595 | 603 |
|
596 | 604 | def keypointList2FtDict(self, keypoints, gr_shape):
|
@@ -708,8 +716,14 @@ def detectAndCompute(self, gr_img, mask=None, timing=False, computeEigVals=False
|
708 | 716 |
|
709 | 717 | kp_eigVals = np.zeros((Ft['Nfeats'],2))
|
710 | 718 | # i at specified scale, j at specified scale and s scale
|
711 |
| - for i, (si, sj, s) in enumerate(zip(Ft['sivec'], Ft['sjvec'], Ft['svec'])): |
712 |
| - kp_eigVals[i,:] = eigVals[s][si,sj] |
| 719 | + if OPENCV_NEWER_THAN_4_5_2: |
| 720 | + kp = [cv2.KeyPoint(x=float(x),y=float(y),size=float(self.zrad*(sc+1)*2),angle=float(ang),response=float(res),octave=int(sc)) |
| 721 | + for x,y,ang,res,sc in zip(Ft['jvec'], Ft['ivec'], np.rad2deg(alpha), |
| 722 | + Ft['evec'],Ft['svec'])] |
| 723 | + else: |
| 724 | + kp = [cv2.KeyPoint(float(x),float(y),float(self.zrad*(sc+1)*2),_angle=float(ang),_response=float(res),_octave=int(sc)) |
| 725 | + for x,y,ang,res,sc in zip(Ft['jvec'], Ft['ivec'], np.rad2deg(alpha), |
| 726 | + Ft['evec'],Ft['svec'])] |
713 | 727 |
|
714 | 728 | return kp, V, kp_eigVals, Ft
|
715 | 729 |
|
@@ -746,9 +760,15 @@ def detect(self, gr_img, mask=None, timing=False):
|
746 | 760 | if timing: print("Feature Threshold - {:0.4f}".format(time.time()-st)); st=time.time()
|
747 | 761 | alpha = self.corner_angle(P, Ft)
|
748 | 762 | if timing: print("Angle computation - {:0.4f}".format(time.time()-st)); st=time.time()
|
749 |
| - kp = [cv2.KeyPoint(x,y,self.zrad*(sc+1)*2,_angle=ang,_response=res,_octave=sc) |
750 |
| - for x,y,ang,res,sc in zip(Ft['jvec'], Ft['ivec'], np.rad2deg(alpha), |
751 |
| - Ft['evec'],Ft['svec'])] |
| 763 | + if OPENCV_NEWER_THAN_4_5_2: |
| 764 | + kp = [cv2.KeyPoint(x=x,y=y,size=self.zrad*(sc+1)*2,angle=ang,response=res,octave=sc) |
| 765 | + for x,y,ang,res,sc in zip(Ft['jvec'], Ft['ivec'], np.rad2deg(alpha), |
| 766 | + Ft['evec'],Ft['svec'])] |
| 767 | + else: |
| 768 | + kp = [cv2.KeyPoint(x,y,self.zrad*(sc+1)*2,_angle=ang,_response=res,_octave=sc) |
| 769 | + for x,y,ang,res,sc in zip(Ft['jvec'], Ft['ivec'], np.rad2deg(alpha), |
| 770 | + Ft['evec'],Ft['svec'])] |
| 771 | + |
752 | 772 | if timing: print("Keypoint export - {:0.4f}".format(time.time()-st)); st=time.time()
|
753 | 773 |
|
754 | 774 | return kp
|
|
0 commit comments