Python 为3通道图像中的每个通道添加相同的值?
我读到一幅图像:Python 为3通道图像中的每个通道添加相同的值?,python,numpy,opencv,computer-vision,Python,Numpy,Opencv,Computer Vision,我读到一幅图像: img = cv2.imread("sky.png", 1) 现在,我想为每个通道在每列中添加一个像素。我尝试这样做的方式如下: img[row_1, :, 0] = np.insert(img[row_1,:,0], column_1, some_value) img[row_1, :, 1] = np.insert(img[row_1,:,1], column_1, some_value) img[row_1, :, 2] = np.insert(img[row_1,:,
img = cv2.imread("sky.png", 1)
现在,我想为每个通道在每列中添加一个像素。我尝试这样做的方式如下:
img[row_1, :, 0] = np.insert(img[row_1,:,0], column_1, some_value)
img[row_1, :, 1] = np.insert(img[row_1,:,1], column_1, some_value)
img[row_1, :, 2] = np.insert(img[row_1,:,2], column_1, some_value)
有没有比单独写入每个通道更好的方法
更新:
正如我提到的,我想添加一个新的列,它是一个4x4图像,被转换为4x5图像。每个像素的值不同,列的顺序也不固定。例如,第一像素被插入到3列中,第二像素被插入到1列中,依此类推(使用预定的列集合)
例如:
[
[1,2,3,4],
[4,5,6,7],
[8,9,10,11]
]
上面是一个3x4图像(实际上是一个3通道图像)。我想通过在[0,2]、[1,1]、[2,4]处添加像素,将其转换为3x5图像
然后,输出变为:
[
[1,2, new-pixel-a, 3, 4],
[4,new-pixel-b, 5, 6, 7]
[8, 9, 10, 11, new-pixel-c]
]
因此,我得到了一个新图像,(3,5)查看有关NumPy方法的文档,我会想出以下解决方案:
导入cv2
将numpy作为np导入
#读取图像;输出图像尺寸
image=cv2.imread('N8e9S.png')
打印(图像.形状)
#设置要添加像素的列索引
colIdx=np.array(image.shape[0]*np.random.rand(image.shape[0]),dtype=np.int32)
#设置要添加的像素值
像素=np.uint8(255*np.random.rand(image.shape[0],3))
#初始化单独的映像
newImage=np.zero((image.shape[0],image.shape[1]+1,3),np.uint8)
#在预定义位置插入像素
对于范围内的i(colIdx.shape[0]):
newImage[i,:,:]=np.insert(image[i,:,:],colIdx[i],像素[i,:],轴=0)
#输出(新)图像尺寸
打印(newImage.shape)
#显示最终图像
cv2.imshow(“图像”,图像)
cv2.imshow('newImage',newImage)
cv2.等待键(0)
cv2.destroyAllWindows()
输入图像如下:
最终输出如下所示:
打印输出以验证新图像尺寸:
(241300,3)
(241, 301, 3)
希望有帮助 看看,也许会有帮助。“让我知道!”达蒙派特无法理解。你知道OpenCV和numpy的例子吗?你的意思是图像高度应该增加1吗?@MarkSetchell是的。但是我想为每一行插入不同的像素。对于4x4图像,即5x4,我想插入5个不同的像素。你的问题似乎让Hans和我都感到困惑。也许你可以先展示一个小而简单的图像,然后再展示它的外观?以及前后尺寸。谢谢。我需要在每行插入不同的像素。这将向每个像素插入相同的像素值row@Amanda我就是这样理解你的问题的。我已经编辑了我的答案,插入了一整行,这里有一些随机生成的像素。我已经更新了我的问题。我正在尝试插入一个列顺序不固定的新列。当每列插入一个新像素时,顺序可能会有所不同(由预计算集确定)。例如,一个像素可以转到(1,19),第二个像素可以转到(2,1)等等。本质上,将添加一个新列。还添加了一个小的example@Amanda我的答案的另一个更新。我希望,我现在明白你的意思了。尽管如此,现在我看不到任何解决方案,除非使用列大小为+1的附加
newImage
,并在所有像素上循环,因为您有不同的列索引。至少可以简化np.insert
调用。