Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.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 为3通道图像中的每个通道添加相同的值?_Python_Numpy_Opencv_Computer Vision - Fatal编程技术网

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
调用。