Pav*_*van 0 python processing opencv image python-imaging-library
下面我附上了两张图片。我希望根据蒙版图像(第二张图像)将第一张图像裁剪成心形。
我搜索了解决方案,但我无法获得更简单的方法来做到这一点。请帮助我解决问题。
2张图片:
让我们从加载寺庙图像开始sklearn:
from sklearn.datasets import load_sample_images
dataset = load_sample_images()
temple = dataset.images[0]
plt.imshow(temple)
Run Code Online (Sandbox Code Playgroud)
由于我们需要使用第二张图像作为掩码,我们必须进行二值阈值操作。这将创建一个黑白蒙版图像,然后我们可以使用它来蒙版之前的图像。
from matplotlib.pyplot import imread
heart = imread(r'path_to_im\heart.jpg', cv2.IMREAD_GRAYSCALE)
_, mask = cv2.threshold(heart, thresh=180, maxval=255, type=cv2.THRESH_BINARY)
Run Code Online (Sandbox Code Playgroud)
我们现在可以修剪图像,使其尺寸与寺庙图像兼容:
temple_x, temple_y, _ = temple.shape
heart_x, heart_y = mask.shape
x_heart = min(temple_x, heart_x)
x_half_heart = mask.shape[0]//2
heart_mask = mask[x_half_heart-x_heart//2 : x_half_heart+x_heart//2+1, :temple_y]
plt.imshow(heart_mask, cmap='Greys_r')
Run Code Online (Sandbox Code Playgroud)
现在我们必须对我们想要遮罩的图像进行切片,以适应实际遮罩的尺寸。另一种形状是调整蒙版的大小,这是可行的,但我们最终会得到扭曲的心脏图像。要应用面具,我们有cv2.bitwise_and:
temple_width_half = temple.shape[1]//2
temple_to_mask = temple[:,temple_width_half-x_half_heart:temple_width_half+x_half_heart]
masked = cv2.bitwise_and(temple_to_mask,temple_to_mask,mask = heart_mask)
plt.imshow(masked)
Run Code Online (Sandbox Code Playgroud)
如果您想让蒙版(黑色)区域变得透明:
tmp = cv2.cvtColor(masked, cv2.COLOR_BGR2GRAY)
_,alpha = cv2.threshold(tmp,0,255,cv2.THRESH_BINARY)
b, g, r = cv2.split(masked)
rgba = [b,g,r, alpha]
masked_tr = cv2.merge(rgba,4)
plt.axis('off')
plt.imshow(dst)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2729 次 |
| 最近记录: |