按位并返回黑色图像

问题描述 投票:0回答:1

假设我们有以下图像:

我想在这张图像上应用一些按位和,所以我只是尝试了以下掩码:

import cv2
import matplotlib.pyplot as plt
import numpy as np
image1 =cv2.imread("ML.png")
image1 =cv2.resize(image1,(400,400))
print(image1)
mask =np.zeros((400,400,3),dtype='uint8')
mask[0:50,0:120]=1
mask[70:180,130:320] =1
mask[150:240,190:390] =1
print(mask)
image1_changed =cv2.bitwise_and(image1,mask)
print(image1_changed)
plt.imshow(np.uint8(image1_changed))
plt.show()

实际上我想只留下头部并删除其余部分,所有矩阵都在这里:

[[[255 250 245]
  [255 250 245]
  [255 250 245]
  ...
  [255 250 245]
  [255 250 245]
  [255 250 245]]

 [[255 250 245]
  [255 250 245]
  [255 250 245]
  ...
  [255 250 245]
  [255 250 245]
  [255 250 245]]

 [[255 250 245]
  [255 250 245]
  [255 250 245]
  ...
  [255 250 245]
  [255 250 245]
  [255 250 245]]

 ...

 [[255 250 245]
  [255 250 245]
  [255 250 245]
  ...
  [255 250 245]
  [255 250 245]
  [255 250 245]]

 [[255 250 245]
  [255 250 245]
  [255 250 245]
  ...
  [255 250 245]
  [255 250 245]
  [255 250 245]]

 [[255 250 245]
  [255 250 245]
  [255 250 245]
  ...
  [255 250 245]
  [255 250 245]
  [255 250 245]]]
[[[1 1 1]
  [1 1 1]
  [1 1 1]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 [[1 1 1]
  [1 1 1]
  [1 1 1]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 [[1 1 1]
  [1 1 1]
  [1 1 1]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 ...

 [[0 0 0]
  [0 0 0]
  [0 0 0]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 [[0 0 0]
  [0 0 0]
  [0 0 0]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 [[0 0 0]
  [0 0 0]
  [0 0 0]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]]
[[[1 0 1]
  [1 0 1]
  [1 0 1]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 [[1 0 1]
  [1 0 1]
  [1 0 1]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 [[1 0 1]
  [1 0 1]
  [1 0 1]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 ...

 [[0 0 0]
  [0 0 0]
  [0 0 0]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 [[0 0 0]
  [0 0 0]
  [0 0 0]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 [[0 0 0]
  [0 0 0]
  [0 0 0]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]]

如何定义好这样的矩阵?以前的代码返回黑色图像,请帮助我

python opencv computer-vision
1个回答
0
投票

根据我的理解,你需要保留头部(大脑)部分并消除休息。您可以通过从原始图像中选择点并将其设置为 255 来创建蒙版,请注意,您将其指定为 1 ,因为它是黑色(接近 0),所以不会很清晰。请参阅下面的代码以及解释中的注释。希望这有帮助。

import cv2
import numpy as np

#Read image
image = cv2.imread('ML.png')
#Create mask as same as image size.
mask =np.zeros((image.shape[0],image.shape[1],1),dtype='uint8')

#Mask rectangle is selected as points from original image.
mask[30:240,57:168]=255

#Resize image and mask
image1 =cv2.resize(image,(400,400))
mask1 = cv2.resize(mask,(400,400))

#Do bitwise and
image1_changed =cv2.bitwise_and(image1,image1, mask=mask1)

#Save mask and masked image result.
cv2.imwrite("mask.png",mask1)
cv2.imwrite("changed.png",image1_changed)

输出“已更改.png”

© www.soinside.com 2019 - 2024. All rights reserved.