Python:为我的边缘检测设置带有序列错误的数组元素
我用序列设置数组元素时出错,我不确定如何修复它。触发错误的行是:Python:为我的边缘检测设置带有序列错误的数组元素,python,arrays,Python,Arrays,我用序列设置数组元素时出错,我不确定如何修复它。触发错误的行是: ret[q,l] = (50,255,20) ValueError: setting an array element with a sequence. 我试图做的是将灰度图像中的阈值阵列(定位边缘)中的每个像素更改为绿色,但我一直会遇到此错误 下面是我的边缘检测代码的其余部分: def edgeDetect(img, threshold): ret = img.copy() thresh = [] h
ret[q,l] = (50,255,20)
ValueError: setting an array element with a sequence.
我试图做的是将灰度图像中的阈值阵列(定位边缘)中的每个像素更改为绿色,但我一直会遇到此错误
下面是我的边缘检测代码的其余部分:
def edgeDetect(img, threshold):
ret = img.copy()
thresh = []
h = img.shape[0]
w = img.shape[1]
for y in range(1, h-2):
for x in range(1, w-2):
gx = 0
gy = 0
gx = (img.item(y, x)*0 + img.item(y + 1, x)*0 + img.item(y-1, x)*0 + img.item(y, x+1)*2 + img.item(y, x-1)*-2 + img.item(y+1, x+1)*1 + img.item(y-1, x-1)*-1 + img.item(y+1, x-1)*-1 + img.item(y-1, x+1)*1)
gy = (img.item(y, x)*0 + img.item(y + 1, x)*-2 + img.item(y-1, x)*2 + img.item(y, x+1)*0 + img.item(y, x-1)*0 + img.item(y+1, x+1)*-1 + img.item(y-1, x-1)*1 + img.item(y+1, x-1)*-1 + img.item(y-1, x+1)*1)
result = gx**2 + gy**2
if(result > float(threshold)**2):
thresh.append([y,x])
for p in range(len(thresh)):
print()
q, l = thresh[p]
img[q,l] = (50,255,20)
return ret
您可能正在尝试将3通道值(如果使用OpenCV,则为RGB或BGR)设置为单通道阵列(即灰度) 换句话说,img阵列的形状是什么?如果您的图像是256x256像素,那么形状是(256256)还是(256256,3)?如果是后者,您应该能够将像素值(3元组)设置为
img[row,col,:]=(r,g,b)
如果我假设img只是单通道,那么您需要做的是将现有的单通道图像转换为3个通道,然后设置颜色
OpenCV的cvtColor(…)是一种将灰度图像转换为BGR/RGB的简单方法,但您也可以使用直接的numpy命令进行转换。发布准确的错误消息,包括回溯。我猜一下:使用
img[q][l]
而不是img[q,l]
您希望img[q,l]=…
做什么?什么是img
?Python列表?二维Numpy阵列?一些特殊的图像类?从您在img
上使用的方法来看,它似乎是一个Numpy数组,但是img[q,l]
应该可以工作。为什么将gx,gy
设置为0?@tobias_k我对图像使用了cv2.imread?我想应该是np数组,你说得对。我试图将3通道值设置为单通道阵列,并使用cv2.cvtColor(img,cv2.COLOR_GRAY2RGB),我能够将像素的颜色更改为绿色。非常感谢你!!