numpy图片数组怎么转转nump矩阵

下面是我一个截图返回i的nump 数组,我想将他转换成nump 矩阵,就像cv2.imread("./pictures/zidane.jpg") 返回的数据格式一样

这个数据没有问题 用#cv2.imshow("img",arr) #cv2.waitKey(0) 可以直接显示图片


[[[  6  13  23 255]
  [  6  13  23 255]
  [  6  13  23 255]
  ...
  [  6  13  22 255]
  [  5  12  22 255]
  [  5  12  22 255]]

 [[  5  12  21 255]
  [  6  12  22 255]
  [  6  12  21 255]
  ...
  [  5  11  21 255]
  [  5  11  21 255]
  [  5  11  20 255]]

 [[  6  12  22 255]
  [  6  13  23 255]
  [  6  13  22 255]
  ...
  [  5  12  21 255]
  [  5  12  21 255]
  [  5  12  21 255]]

 ...

 [[  9  21  37 255]
  [ 10  22  38 255]
  [ 10  23  39 255]
  ...
  [ 10  23  40 255]
  [ 11  22  39 255]
  [ 10  22  39 255]]

 [[  9  21  37 255]
  [  9  22  38 255]
  [ 10  22  38 255]
  ...
  [ 11  21  38 255]
  [ 10  21  38 255]
  [ 10  22  39 255]]

 [[  8  20  36 255]
  [  8  20  36 255]
  [  9  20  36 255]
  ...
  [ 10  20  37 255]
  [  9  20  37 255]
  [  9  21  38 255]]]

这里就是cv2.imread("2.png") 返回的 numpy矩阵

img = cv2.imread("2.png")

[[[ 6 13 23]
  [ 6 13 23]
  [ 6 13 23]
  ...
  [ 6 13 22]
  [ 5 12 22]
  [ 5 12 22]]

 [[ 5 12 21]
  [ 6 12 22]
  [ 6 12 21]
  ...
  [ 5 11 21]
  [ 5 11 21]
  [ 5 11 20]]

 [[ 6 12 22]
  [ 6 13 23]
  [ 6 13 22]
  ...
  [ 5 12 21]
  [ 5 12 21]
  [ 5 12 21]]

 ...

 [[ 9 21 37]
  [10 22 38]
  [10 23 39]
  ...
  [10 23 40]
  [11 22 39]
  [10 22 39]]

 [[ 9 21 37]
  [ 9 22 38]
  [10 22 38]
  ...
  [11 21 38]
  [10 21 38]
  [10 22 39]]

 [[ 8 20 36]
  [ 8 20 36]
  [ 9 20 36]
  ...
  [10 20 37]
  [ 9 20 37]
  [ 9 21 38]]]
#cv2.imshow("img",arr)
#cv2.waitKey(0)

因为我不想本地读取图片,想直接截图完的的数据直接传入下一个函数,可是函数支持 numpy矩阵的传递,导致我截图数据是numpy数组无法。请问我如何转换

img = cv2.imread("1.jpg")
result = det.predict(img)

#就是这个参数,需要numpy矩阵才行  红包感谢

img


我截的这张图

下有代码,可直接复制使用。如有帮助,敬请采纳,你的采纳是我前进的动力,O(∩_∩)O谢谢!!!!!!!!
路过的朋友也可以点个赞~(≧▽≦)/~
在图中位置加入以下代码,将截图的RGBA截取为RGB:

img = img[:,:,:-1]

img

可以使用切片来做:

# 截图的数据
arr = [[[6,13,23,255],[6,13,23,255],[6,13,23,255]],[[6,13,23,255],[6,13,23,255],[6,13,23,255]]]
np_arr = np.array(arr)
# 修改为imread读取的格式
np_arr = np_arr[:,:,:3]
print(np_arr)

img

您的采纳就是对我最大的鼓励,谢谢!!!

img

从描述中看,博主的np数据shape为(h,w,4),应该是RGBA格式的数据(其中A表示透明度),只需要进行数据切片即可。假设变量为data,令data=data[:,:,:3]即可,也就是只取前三个维度(RGB维度)。还有需要补充的就是,python下opencv读取出来的数据本身就是numpy数据,其shape为(h,w,3),数据格式为uint8。普通的np数组,只要shape正常,且数据格式为uint8即可交给opencv调用。

就一个4通道转三通道而已。。
直接用opencv就搞定了,不需要切片,np切片速度反而不如用cvtColor
需要注意的是,你需要确定下你原来的数据格式是RGBA还是BGRA,然后适用对应的2RGB即可。具体格式要是不清楚的话,可以用cv2.imshow("1",img)出来看下,颜色和截图一致的话就是BGRA,颜色变了(红蓝通道交换了)就是RGBA。我看你后面用了yolov5,你还得看下yolov5用的格式,默认一般是RGB。

cv2.cvtColor(img,cv2.COLOR_BGRA2RGB) 
cv2.cvtColor(img,cv2.COLOR_RGBA2RGB)