I am having a problem to translate numpy's ndarray functions to their equivalent
OpenCV C++ calls to reshape/split a n-dimensional cv::Mat into appropriate slices.
In particular i am trying to convert the OpenCV python2 sample "texture_flow.py"
(>= OpenCV 2.4.3) to C++. I've marked the lines in question in the snippet below.
# [......]
img = cv2.imread(fn)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# simple width and height tuple
h, w = img.shape[:2]
eigen = cv2.cornerEigenValsAndVecs(gray, 15, 3)
print eigen.shape # prints: (height, widht, 6), i.e. 6 channels
# Problem 1:
# OpenCV's reshape function is not sufficient to do this.
# probably must be split into several steps...
eigen = eigen.reshape(h, w, 3, 2) # [[e1, e2], v1, v2]
print eigen.shape # prints: (height, width, 3, 2)
# Problem 2:
# I assume this is meant to get the the v1 and v2 matrices
# from the previous reshape
flow = eigen[:,:,2]
print flow.shape # prints: (height, width, 2), i.e. 2 channels
vis = img.copy()
# C++: vis.data[i] = (uchar)((192 + (int)vis.data[i])/2);
vis[:] = (192 + np.uint32(vis))/2
d = 12
# Problem 3:
# Can probably be split into 2 nested for-loops
points = np.dstack( np.mgrid[d/2:w:d, d/2:h:d] ).reshape(-1, 2)
# [......]
Может ли кто-нибудь помочь мне перевести соответствующие строки на C ++?