python - 如何屏蔽正方形的图像?
问题描述
我正在尝试从矩形图像中屏蔽正方形。那些不方形的区域将被涂成白色。我编写代码如下。
photo_data = imageio.imread('./demo/dog.jpg')
total_rows,total_columns,layer=photo_data.shape
X,Y=np.ogrid[:total_rows,:total_columns]
center_rows=total_rows/2
center_columns=total_columns/2
upper_mask=X-center_rows>500
low_mask=X-center_rows<-500
left_mask=Y-center_columns>500
right_mask=Y-center_columns<-500
final_mask=np.logical_and(upper_mask,low_mask,left_mask,right_mask)
photo_data[final_mask]=0
plt.figure(figsize=(15,15))
plt.imshow(photo_data)
我猜 np.logical_and 无法处理具有不同数字大小的数组。如何解决这个问题?
解决方案
我认为你让事情变得比你需要的更复杂一些。从概念上讲,我认为您需要按照以下方式做一些事情:
photo_data = imageio.imread('./demo/dog.jpg')
total_rows,total_columns,layer=photo_data.shape
mask_size = 500
photo_data[total_rows/2-mask_size/2:total_rows/2+mask_size/2,
total_columns/2-mask_size/2:total_columns/2+mask_size/2,
:] = 0
plt.figure(figsize=(15,15))
plt.imshow(photo_data)
编辑:
我认为有更优雅的方法来执行此操作,但我个人喜欢的一种方法是使用 numpys elemet wise multiplication 来应用掩码:
import numpy as np
photo_data = imageio.imread('./demo/dog.jpg')
total_rows,total_columns,layer=photo_data.shape
mask_size = 500
mask = np.zeros(photo_data.shape)
mask[total_rows/2-mask_size/2:total_rows/2+mask_size/2,
total_columns/2-mask_size/2:total_columns/2+mask_size/2,
:] = 1
photo_data = photo_data * mask
plt.figure(figsize=(15,15))
plt.imshow(photo_data)
推荐阅读
- c++ - 我如何在其中应用 C++ 数组?
- windows - 使用 VBScript 运行 OSPP.vbs
- mongodb - 如何使用多个值更新数组中的多个项目
- reactjs - 标准 React Native 组件的包装器在 Web 浏览器中不起作用
- excel-formula - 根据给定日期的频率获取下一个到期日
- r - 在一行中进行字符串比较并删除包含相同的行
- javascript - 正则表达式:从camelCase中提取大写字母
- android - 如何在一个应用程序中制作不同的共享首选项文件
- javascript - 如何根据鼠标在 x=y 线上方/下方的位置使图像不显示?
- php - REACT + PHP - 仅在 POST 请求中阻止了我的 CORS 策略