I'm working in Windows 10, with Python 3.8 and OpenCV 4.5, and creating an artificial dataset to train a Convolutional Neural Network. In one step I need to translate a contour structure, but I'm stucked at this problem and I can't fix.
I need to translate a contour by x_offset and y_offset. But I'm having a hard time with np.array types and the way OpenCV organize contours.
When I print contours, I get this as result:
[array([[[207, 146]],
[[207, 455]],
[[603, 455]],
[[603, 146]]], dtype=int32)]
I'm trying to keep the structure, but remap the points using x_offset and y_offset, so my result should be something like:
[array([[[207 x_offset, 146 y_offset]],
[[207 x_offset, 455 y_offset]],
[[603 x_offset, 455 y_offset]],
[[603 x_offset, 146 y_offset]]], dtype=int32)]
Can someone help with an algorithm to perform this operation without losing the structure of the contour? So I can use drawContours to draw this translated contour.
CodePudding user response:
You just have to add your X and Y offset to every contour as a tuple:
x_offset, y_offset = 5, 3
for contour in contours:
# contour with new offset is created
new_contour = contour (x_offset, y_offset)
# draw the new contour on the image
cv2.drawContours(im,new_contour,-1,(0,255,0),3)
I guess the data structure of contours got you confused. contours is a tuple. Every contour identified is stored as an individual tuple. The points for each contour is stored inside these tuples.


