for x in range(0,img_row):
for y in range(0,img_col):
img_lst.append([img[x,y][0],img[x,y][1],img[x,y][2]])
return img_lst我如何在这里使用列表理解?
img_lst = [img[x,y][0], img[x,y][1], img[x,y][2] y for y in range(0,img_col) for x in range(0, img_row)]我试过了,但是它给了我无效的语法,当我开始删除"y“时,它给了我Y的定义。
整个职能:
def cvimg_to_list(img):
img_row = img.shape[0]
img_col = img.shape[1]
img_lst=[]
img_lst = [img[x,y][0], img[x,y][1], img[x,y][2] y for y in range(0,img_col) for x in range(0, img_row)]
return img_lst发布于 2017-11-16 10:25:36
要将带有list.append()调用的嵌套循环转换为列表理解,只需将.append(...)括号之间的所有内容移到前面,在for循环之后删除:冒号,最后在结果周围添加[...]:
[
[img[x,y][0],img[x,y][1],img[x,y][2]]
for x in range(0,img_row)
for y in range(0,img_col)
]注意,for循环的顺序没有改变!
然后,这可以放在一行上;我为可读性添加了一些空格,并简化了range()调用:
[[img[x, y][0], img[x, y][1], img[x, y][2]]
for x in range(img_row) for y in range(img_col)]因为您构建了一个包含来自img[x, y]的前3个值的新列表,所以您也可以使用切片:
[img[x, y][:3] for x in range(img_row) for y in range(img_col)]您在尝试中犯了三个错误;您交换了for循环的顺序,添加了一个额外的、偏离的y,并为每次迭代生成的list对象删除了]结束括号。
发布于 2017-11-16 11:21:36
我不太确定你想要实现什么,但是如果我的假设是正确的(你想从opencv打开的图像的三个通道中得到像素值的列表),你可以使用numpy来完成这个任务。
img_lst=img.reshape(-1,3).tolist()请记住,cv2将图像加载为BGR而不是RGB。
注意:没有正确地回答这个问题,我宁愿把这作为一个评论,但我没有足够的声誉。
https://stackoverflow.com/questions/47327116
复制相似问题