Mon*_*lal 3 python opencv numpy image
我有兴趣将骨架像素为 255(白色)的黑白骨架图像叠加到 3 通道 RGB 图像上。我并不偏向于使用 OpenCV,但是当我使用 add 函数时,我收到了形状不兼容的错误。
有什么方法可以做到这一点?
import cv2
skl_img = cv2.imread("sample_skeleton_image/579366_2_train2017_skel.png", 0)
print(skl_img.shape)
plt.imshow(skl_img)
Run Code Online (Sandbox Code Playgroud)
224x400
obj_img = cv2.imread("/content/drive/Shareddrives/Wish 2021/Code/sample_skeleton_image/579366_2_train2017.jpg", cv2.IMREAD_COLOR)
plt.imshow(obj_img)
Run Code Online (Sandbox Code Playgroud)
obj_img 形状为 224x400x3
final_img = cv2.add(obj_img,skl_img)
plt.imshow(final_img)
Run Code Online (Sandbox Code Playgroud)
error Traceback (most recent call last)
<ipython-input-27-7de7a4136982> in <module>()
----> 1 final_img = cv2.add(obj_img,skl_img)
2 plt.imshow(final_img)
error: OpenCV(4.1.2) /io/opencv/modules/core/src/arithm.cpp:663: error: (-209:Sizes of input arguments do not match) The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array' in function 'arithm_op'
Run Code Online (Sandbox Code Playgroud)
以下是在 Python 中将遮罩应用于图像的其他几种方法。
输入:
面具:
import cv2
import numpy as np
# read image
img = cv2.imread('elephant_trunk.png')
# read mask as grayscale
mask = cv2.imread('elephant_trunk_skeleton.png', cv2.IMREAD_GRAYSCALE)
# Method 1: Numpy masking
result1 = img.copy()
result1[mask!=0] = (255,255,255)
# Method 2: Merge mask to 3 channels
mask2 = cv2.merge([mask,mask,mask])
result2 = cv2.add(img, mask2)
# Method 3: Convert mask to BGR
mask3 = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
result3 = cv2.add(img, mask3)
# save result
cv2.imwrite("elephant_trunk_masked.png", result1)
# show result
cv2.imshow("RESULT1", result1)
cv2.imshow("RESULT2", result2)
cv2.imshow("RESULT3", result3)
cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud)
结果:
归档时间: |
|
查看次数: |
1104 次 |
最近记录: |