使用Python创建一个新的RGB OpenCV图像?

83

如何在Python中使用OpenCV创建新的RGB图像?我不想从文件加载图像,只是创建一个空白图像来进行操作。


8
如果我可以质疑重复标志,一个问题正在使用cv回答,而另一个问题则使用cv2回答。 - Arnaud P
我们需要一种方法来合并 Stack Overflow 上的问题。 - user391339
公平地说,8年后,他们都有cv2的答案 :) - Hugh Perkins
1
我重新打开了这个问题。除了关于库版本的任何问题之外:如果有什么问题,这应该是如何提问的规范 - 它更受欢迎,也更好接受。另一个问题被表述为调试问题,而此处的 OP 没有遇到任何错误。这里的一个好答案似乎也更高质量,因为它提供了更好的解释和相关的文档链接。 - Karl Knechtel
1
为了背景:在旧的重复关闭系统下,此问题曾被标记为OpenCv CreateImage函数无法工作的重复。 - Karl Knechtel
2个回答

239
Python的新cv2接口将numpy数组集成到OpenCV框架中,这使得操作变得更简单,因为它们用简单的多维数组表示。例如,您的问题可以用以下方式回答:
import cv2  # Not actually necessary if you just want to create an image.
import numpy as np
blank_image = np.zeros((height,width,3), np.uint8)

这将初始化一个全黑的RGB图像。例如,如果您想将图像的左半部分设置为蓝色,右半部分设置为绿色,您可以轻松地完成:

blank_image[:,0:width//2] = (255,0,0)      # (B, G, R)
blank_image[:,width//2:width] = (0,255,0)

如果你想在未来避免很多麻烦,以及不必再像这样提问,我强烈建议使用cv2接口而不是旧的cv。我最近做出了这个改变,从此没有后悔过。你可以在OpenCV Change Logs中了解更多关于cv2的信息。


7
不需要,只是为了明确使用cv2处理图像时,图像本身只是一个NumPy数组,并没有什么特别的。 - hjweide
1
今天我学到了一课.... :) - jtlz2
3代表什么?np.zeros((height,width,3), np.uint8) - mattsmith5
@mattsmith5 这里的3代表三个颜色通道:蓝色、绿色和红色。 - hjweide
一个通道的空白图像:blank=255*cv2.getStructuringElement(cv2.MORPH_RECT, (100,100))。对于RGB,请使用cv2.merge()。:–) - Alex Alex
显示剩余4条评论

3
以下代码显示了创建一个空白的RGB图像并显示它的过程。
import numpy as np
import cv2

height, width = 1080, 1920
b, g, r = 0x3E, 0x88, 0xE5  # orange
image = np.zeros((height, width, 3), np.uint8)
image[:, :, 0] = b
image[:, :, 1] = g
image[:, :, 2] = r

cv2.imshow("A New Image", image)
cv2.waitKey(0)

1
非常有用,因为你可以用任何颜色填充它。 - AwokeKnowing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接