Python中的OpenCV putText-数组操作后出错

Python中的OpenCV putText-数组操作后出错,python,opencv,numpy,Python,Opencv,Numpy,短期 我想将文本写入图像。但是,我无法理解以下行为: import numpy as np import cv2 # create an image img = np.ones((512,512,3), dtype = np.uint8) # create an image container (I have to do this as I cycle through many folder and collect images) img_container = np.zeros((512,51

短期

我想将文本写入图像。但是,我无法理解以下行为:

import numpy as np
import cv2
# create an image
img = np.ones((512,512,3), dtype = np.uint8)
# create an image container (I have to do this as I cycle through many folder and collect images)
img_container = np.zeros((512,512,3,5), dtype = np.uint8)
# send img to the container array
img_container[:,:,:,0] = img[:,:,:]

# I can add text to the original image
cv2.putText(img, 'Hello World', (10,500), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255),2 )
cv2.imshow('img', img)

# When I retrieve the img again..
img_from_container = img_container[:,:,:,0]
# ..I am unable to do so however
cv2.putText(img_from_container, 'Hello World', (10,500), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255),2 )

Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: Layout of the output array img is incompatible with cv::Mat (step[ndims-1] != elemsize or step[1] != elemsize*nchannels)
将numpy导入为np
进口cv2
#创建一个图像
img=np.ones((512512,3),dtype=np.uint8)
#创建一个图像容器(我必须这样做,因为我在许多文件夹中循环并收集图像)
img_container=np.zero((512512,3,5),dtype=np.uint8)
#将img发送到容器数组
img_容器[:,:,:,0]=img[:,:,:,:]
#我可以向原始图像添加文本
cv2.putText(img,“Hello World”(10500),cv2.FONT_HERSHEY_SIMPLEX,1,(255255),2)
cv2.imshow(“img”,img)
#当我再次检索img时。。
img_from_container=img_container[:,:,:,0]
#……但是,我不能这样做
cv2.putText(img_来自_容器,'Hello World',(10500),cv2.FONT_HERSHEY_SIMPLEX,1,(255255),2)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
类型错误:输出数组img的布局与cv::Mat不兼容(步骤[ndims-1]!=elemsize或步骤[1]!=elemsize*nchannels)
LONG

我不理解这两个变量(img和来自容器的img_)之间的区别,因为它们都是
dtype=np.uint8
,当使用
img.shape
进行测试时,它们都有相同的形状,当我将它们与来自容器的
img==img_
进行比较时,我得到了所有的结果


很明显我错过了什么。对于这两个变量的不同之处,我将非常感谢您的任何提示和建议

更改以下行可以解决问题

img_from_container = img_container[:,:,:,0].copy()

np.copy()。前面的代码从更高维的numpy数组获取视图,其中
putText()
修改失败。

更改以下行可以解决问题

img_from_container = img_container[:,:,:,0].copy()

np.copy()。前面的代码从更高维的numpy数组中获取视图,其中
putText()
修改失败。

这就是我想要的答案。谢谢,也谢谢你清楚的解释!这就是我一直在寻找的答案。谢谢,也谢谢你清楚的解释!