gpt4 book ai didi

python - 如何将多个图像放入数组中?

转载 作者:行者123 更新时间:2023-12-02 16:24:39 25 4
gpt4 key购买 nike

我的图像是一个ndarray(2048,2048,3)。我想修改它并保留以前版本的副本(大约5个),以便我可以撤消通过click事件所做的任何修改。

在下面的代码中,我为图像上的每次单击绘制了一个圆圈。但是,我想存储多个图像,并为每次右键单击删除最后一个图像(pop())。

click_pts = []
def click(event, x, y, flags, param):
global click_pts, image, image_ref
if event == cv2.EVENT_LBUTTONDOWN:
click_pts.append((x, y))
image_ref = np.ndarray.copy(image)
cv2.circle(image, (x, y), 5, (255, 0, 0), -1)
cv2.imshow("image", image)
print((x, y))
elif event == cv2.EVENT_RBUTTONDOWN:
click_pts.pop()
image = np.ndarray.copy(image_ref)
cv2.imshow("image", image)


image = cv2.imread('images/RT1_2th.png')
image_ref = np.ndarray.copy(image)
cv2.namedWindow("image")
cv2.setMouseCallback("image", click)
# Loop until 'q' is pressed
while True:
cv2.imshow("image", image)
key = cv2.waitKey(1) & 0xFF

if key == ord('q'):
break
cv2.destroyAllWindows()

我没有找到任何可靠的方法来将多个图像存储在数组中……这与数组的类型无关,但是拥有 .pop()函数会很棒。

另外,(旁注)在 OpenCV example中, image没有传递到函数中,并且导致单击(如果我从 global image中删除 click):
UnboundLocalError: local variable 'image' referenced before assignment

我真的不喜欢全局变量,我想知道,还有什么选择吗?
编辑:
添加了两个功能来处理移位。 lshift向左移动并用新图像替换最后一张图像:
def lshift(arr, new_arr):
result = np.empty_like(arr)
result[:-1] = arr[1:]
result[-1] = new_arr
return result


def rshift(arr):
result = np.empty_like(arr)
result[1:] = arr[:-1]
result[0] = arr[0]
return result

它工作得很好,但不要忘了使用 np.array.copy()通过值传递绘制的图像。否则,它将通过引用传递,并且最终得到所有内容的相同副本!

最佳答案

创建一个零的NumPy数组。

arr = np.zeros((5,2048,2048,3), dtype=np.uint8)

现在,您可以轻松地将图像添加到您想要的任何人。假设您想要最后一个,那么 arr[4]就足够了。

关于python - 如何将多个图像放入数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62221081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com