[英]Opencv: How to use rectangle() function to draw a rectangle on a COPY of an image rather than the original image?
这就是我正在努力实现的目标。 我有一些图像与每个图像关联的多个边界框。 我想加载一个图像,在图像上绘制 box1,并将新图像保存为 image_1。 然后我想在图像上绘制box2,并将其保存为image_2。 我目前遇到的问题是 image_2 上有 box1 和 box2,而不仅仅是 box2。 每次绘制新的边界框时,我都试图通过保存图像的临时副本来规避这个问题,但似乎原始图像仍然以某种方式被修改。 如何创建加载的 img 的副本,以便在调用 opencv 的 rectangle() 函数时对副本的更改不会传播到加载的 img? 以下是我目前所拥有的。
for fname in boxes:
img = cv2.imread(fname, -1)
for i in range(len(boxes[fname])):
x1, y1, x2, y2 = boxes[fname][i]
tmp = img
cv2.rectangle(tmp, (x1, y1), (x2, y2), (255,0,0), 2)
cv2.imwrite(fname+str(i+1), tmp)
这可以使用 numpy 很容易地完成。
for i in range(len(boxes[fname])):
temp = numpy.copy(img)
.....
这确保您实际创建图像的副本,就像在 python 中一样
tmp = img
只是创建一个指向标签“img”指向的同一图像的新指针。 这就是为什么如果您编辑 tmp,您也会编辑 img。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.