OpenCV python裁剪图像

新手上路,请多包涵

我创建了黑色图像,然后在该图像中绘制了一个红色矩形。之后,我裁剪了这张图片,并使用命令在 裁剪 后的图像中绘制了另一个矩形。 cv2.rectangle(crop,(50,50),(150,150),(0,0,255),3)

当我在最后显示第二个矩形时,为什么它会出现在原始图像中?我希望只看到第一个矩形。

 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()

原文由 hory 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 446
2 个回答

crop = image[100:300,100:300] 在原始图像上创建 视图 而不是新对象。修改该视图将修改底层的原始图像。有关详细信息,请参阅 http://scipy-cookbook.readthedocs.io/items/ViewsVsCopies.html

您可以通过在裁剪时创建副本来解决此问题: crop = image[100:300,100:300].copy()

注意: image[100:300,100:300] 参数是 y: y+h, x: x+w 不是 x: x+w, y: y+h

原文由 Martin Valgur 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果要保存裁剪后的图像,只需添加以下代码:

 cv2.imwrite("Cropped.jpg", roi)

after cv2.imshow("Cropped", roi)

我希望这有帮助。

原文由 Filomeno E. Plaza III 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题