下面是我一个截图返回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矩阵才行 红包感谢
下有代码,可直接复制使用。如有帮助,敬请采纳,你的采纳是我前进的动力,O(∩_∩)O谢谢!!!!!!!!
路过的朋友也可以点个赞~(≧▽≦)/~
在图中位置加入以下代码,将截图的RGBA截取为RGB:
img = img[:,:,:-1]
可以使用切片来做:
# 截图的数据
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)
您的采纳就是对我最大的鼓励,谢谢!!!
从描述中看,博主的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)