我想製作一個透明圖像並在其上繪製,然後在基礎圖像上添加加權。在opencv python中創建透明圖像
如何在openCV python中用width和hight初始化完全透明的圖像?
編輯:我想做一個像Photoshop一樣的效果,有堆疊的圖層,所有堆疊的圖層最初都是透明的,並且繪圖是在完全透明的圖層上執行的。最後,我將合併所有圖層以獲得最終圖像
我想製作一個透明圖像並在其上繪製,然後在基礎圖像上添加加權。在opencv python中創建透明圖像
如何在openCV python中用width和hight初始化完全透明的圖像?
編輯:我想做一個像Photoshop一樣的效果,有堆疊的圖層,所有堆疊的圖層最初都是透明的,並且繪圖是在完全透明的圖層上執行的。最後,我將合併所有圖層以獲得最終圖像
如果你想畫幾個「層」,然後將圖紙疊加在一起,那麼如何來創建這個:
import cv2
import numpy as np
#create 3 separate BGRA images as our "layers"
layer1 = np.zeros((500, 500, 4))
layer2 = np.zeros((500, 500, 4))
layer3 = np.zeros((500, 500, 4))
#draw a red circle on the first "layer",
#a green rectangle on the second "layer",
#a blue line on the third "layer"
red_color = (0, 0, 255, 255)
green_color = (0, 255, 0, 255)
blue_color = (255, 0, 0, 255)
cv2.circle(layer1, (255, 255), 100, red_color, 5)
cv2.rectangle(layer2, (175, 175), (335, 335), green_color, 5)
cv2.line(layer3, (170, 170), (340, 340), blue_color, 5)
res = layer1[:] #copy the first layer into the resulting image
#copy only the pixels we were drawing on from the 2nd and 3rd layers
#(if you don't do this, the black background will also be copied)
cnd = layer2[:, :, 3] > 0
res[cnd] = layer2[cnd]
cnd = layer3[:, :, 3] > 0
res[cnd] = layer3[cnd]
cv2.imwrite("out.png", res)
要創建透明圖像,您需要一個4通道矩陣,其中3個代表RGB顏色,第4個通道代表Alpha通道,要創建透明圖像,您可以忽略RGB值並直接將alpha通道設置爲0
。在Python的OpenCV採用numpy
操縱的矩陣,那麼透明圖像可以作爲
import numpy as np
import cv2
img_height, img_width = 300, 300
n_channels = 4
transparent_img = np.zeros((img_height, img_width, n_channels), dtype=np.uint8)
# Save the image for visualization
cv2.imwrite("./transparent_img.png", transparent_img)
謝謝,我試圖在你提出的圖像上畫一些東西,但它不起作用。圖像是真正創建的,但我無法在其上繪製一個簡單的矩形。操作完成,但保存圖像時,無法看到矩形。 –
其實它解決了當我添加矩形與4個通道,與阿爾法255值...謝謝 –
這是非常寬泛的。只需使用一個新圖像(例如白色),繪製它並以某種方式標記您正在繪製的位置(如果您不繪製白色,則不需要,因爲您可以檢查所有像素!=白色)。然後,當您合併這兩幅圖像時,所有未繪製的權重都爲零。 (我不是opencv用戶,我對addWeighted的工作原理做了一些假設)。 – sascha
OpenCV支持alpha通道,但不支持渲染它們。 – Micka