Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:为我的边缘检测设置带有序列错误的数组元素_Python_Arrays - Fatal编程技术网

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),我能够将像素的颜色更改为绿色。非常感谢你!!