I've created black image, than I drew a red rectangle into this image. Afterwards I cropped this image and drew a another rectangle into the cropped image using the command. cv2.rectangle(crop,(50,50),(150,150),(0,0,255),3)
Why does this second rectangle appears in the original image when I show it at the end? I expected to see just the first rectangle.
import cv2
import numpy as np
#create image
image = np.zeros((400,400,3), np.uint8)
#draw rectangle into original image
cv2.rectangle(image,(100,100),(300,300),(0,0,255),3)
#crop image
crop = image[100:300,100:300]
#draw rectangle into cropped image
cv2.rectangle(crop,(50,50),(150,150),(0,0,255),3)
cv2.imshow('Result', image)
cv2.waitKey()
cv2.destroyAllWindows()
解决方案
crop = image[100:300,100:300] creates a view on the original image instead of a new object. Modifying that view will modify the underlying original image. See http://scipy-cookbook.readthedocs.io/items/ViewsVsCopies.html for more details.
You can resolve this issue by creating a copy when cropping:
crop = image[100:300,100:300].copy().
Note: image[100:300,100:300] parameters are y: y+h, x: x+w not x: x+w, y: y+h